ゆにてく備忘録

Unityやその他学んだ事を忘れないために書くぶろぐ

【Unity】uGUIのImageを変形して色々な形を作る

uuGUIのImageの頂点を追加したり削除したりして,色々な図形を作れます

使い方

https://github.com/n-taku/DeformationImage

このリポジトリのDeformationImage.csとDeformationImageVertex.csをプロジェクトに入れて,uGUIのImageにDeformationImageコンポーネントをつける.

DeformationImageのInspectorから頂点追加ボタンを押す.

頂点追加ボタンを押すと,DeformationImageの子供にDeformationImageVertexが追加される.

この子供のDeformationImageVertexがImageの頂点になるので,それを動かして任意の形を作る.

f:id:n_taku:20190511184950g:plain

f:id:n_taku:20190511183519p:plain

【Unity】LWRPの任意の場所にカスタムレンダーパスを追加する方法

Unity2019でのやり方は以下

Lightweight Render Pipeline(LWRP) のパイプラインを拡張する - Unity Connect

 

Unity 2018.3からLWRPの任意のタイミングでカスタムレンダーパスを追加することができるようになりました.Unity 2018.3 リリース – Unity Blog

そのやり方を書こうと思います.

Unity2018.3.1f1 LWRPのバージョンは4.6.0を使用してます.

必要クラス

Transparentのパスを追加する例で説明します.必要なクラスは2つあります.

  1. 追加するパスを定義するScriptableRenderPassを継承したクラス
  2. レンダリング順番を制御するIRendererSetupとMonoBehaviourを継承したクラス

追加するパス

追加するパスのクラスを以下ではRenderTransparentForwardPass2とする.

RenderTransparentForwardPass2は以下のように作成

  • LWRPのRenderTransparentForwardPassクラスをコピーして作成.
  • LWRPではShaderのLightModeタグで描画するShaderを決めています.作成したコンストラクタでそのタグの名前を定義しているので RenderTransparentForwardPassで使用している文字列"LightweightForward"とは別のものにします. ここでは"LightweightForward2"とします

RenderTransparentForwardPass2のソースコードは記事の最後

レンダリング順番を制御

LWRPではDefaultRendererSetupというクラスをデフォルトで定義しています.DefaultRendererSetupでは,パスの描画順を制御しています.

そのクラスを丸々自分で作成したクラスに置き換えることでパスを追加します.

レンダリング順番を制御するクラスを以下ではCustomRendererSetupとする.

CustomRendererSetupは以下のように作成

  • LWRPのDefaultRendererSetupのクラスをコピーして作成(※CustomRendererSetupはMoneBehaviourを継承させる)
  • 他のパスと同じようにRenderTransparentForwardPass2を宣言してnewを追加
  • 追加したいタイミングでRenderTransparentForwardPass2のSetUp関数をよび,renderer.EnqueuePassに追加

CustomRendererSetupのソースコードは記事の最後

使い方

上のクラスを作成して,パスを追加したいカメラに対してCustomRendererSetupコンポーネントをつけるだけで,カスタムレンダーパスを追加できます.

demo

上記を用いて3Pathを使用したステンシルを用いたアウトラインの例

github.com

f:id:n_taku:20190112183357p:plain

RenderTransparentForwardPass2

LWRPに追加するカスタムパス(Transparent)

CustomRendererSetupにRenderTransparentForwardPass3のパスも追加したソースコード

LWRP のレンダラーを上書きするためのカスタムしたRendererSetup

【Unity】UGUIのImageで波エフェクトを作る

UGUIのImageで波エフェクトを作りました

使い方

https://github.com/n-taku/WaveEffectImageこのリポジトリの中の4つのファイル,ListPool.cs,ObjectPool.cs,Subdivide.cs,WaveMeshEffect.csを自分のプロジェクトにコピーする.

WaveMeshEffectコンポーネントを波エフェクトさせたいImageなどにつけて,コンポーネントのインスペクタからWaveInfoを編集する.

f:id:n_taku:20180825194305p:plain

demo

f:id:n_taku:20180825194316g:plain

スクリプト

WaveMeshEffectコンポーネントはBaseMeshEffectを継承していて,ModifyMesh関数で頂点を上下にoffsetしている.offset量はWaveInfoで指定したSin波を合成している

UGUIのImageで波エフェクト

ListPool.cs,ObjectPool.csはUnityのInternalな非公開クラスで,Listを使い回すのに使っている

Subdivide.csはImageの頂点を増やして分割している.【Unity】「モダンなUIの提案と実装」 - テラシュールブログで使われていたクラスを少し直したもの

【Unity】追尾レーザー,誘導ミサイルの実装

Unite2018の誘導ミサイル完全マスターのスライドの追尾レーザーと誘導ミサイルのスクリプトを実際に動かしてみました.

追尾レーザー

現在の速度,到達時間,ターゲットの位置を元に加速度を計算して動かします. 加速度に制限をかけない限り絶対に当たります.

f:id:n_taku:20180729154356g:plain

追尾スクリプト

誘導ミサイル

ターゲットの位置,トルクの強さを用いて,ターゲット方向に向きを変えて,その方向に移動する.係数によってはバネのようにゆらゆらしながら飛んで行きます

f:id:n_taku:20180729154403g:plain

誘導スクリプト

参考URL

【Unite Tokyo 2018】誘導ミサイル完全マスター

Pythonを使ってTwitterで検索をする

Pythonを使ってTwitterで検索をするスクリプとを作りました.

検索したツイートのidを保存しておいて,そのid以降のツイートしか保存しないようにしてあります.

Pythonを使ってTwitterで検索をかける

【Unity】Unity上から一括でリネームするEditor拡張

Unity上から一括でリネームするEditor拡張です.

アセットのリネームとAnimationClipパスのリネームとPrefab内のオブジェクトのリネーム機能があります.

使い方

WindowメニューからCustomSearchReplaceを選んで.
検索文字と置換文字を入れて,置換ボタンor全置換ボタンを押すだけ.

f:id:n_taku:20180407185001g:plain

スクリプトは以下

Unity上から一括でリネームするEditor拡張

【Unity】複数のコンポーネントを一度にコピー&ペーストするEditor拡張

複数のコンポーネントを複数のオブジェクトにコピーするEditor拡張です.

小さなことだけど,あったら使うかもしれない機能かなと.

使い方

  1. Inspector上のコンポーネントの歯車を押して,CustomCopyを選択.
  2. Windowが開くので,コピーしたいコンポーネントにチェックを入れてCopyボタンを押す.
  3. ヒエラルキー上もしくはプロジェクト上でペーストしたいオブジェクトを1つ以上選択して,Pasteボタンを押す.

f:id:n_taku:20180321183412g:plain

スクリプトは以下

複数コンポーネントのコピー&ペースト