Canvas内の要素にトレイラーを付ける場合の方法のメモ。
想定する状況としては2Dでプレイヤーの動きに軌跡を付けたりするとか。
作る途中で放置してたUnityアプリを開くと変な動作をしていた。
シーンビューで反映されているのにゲーム画面では表示されていない。
表示がされてないんだからと Material を色々変えてみたり、 Sorting Layer を追加して Order in Layer を変更してみても出てこない。
なんでかなーと動かしてると画面が大きく変わった。
ここでようやく気付いたけど TrailRenderer は3次元座標上に作られる。
Canvas上で動かしても当然反映されない。
そこで通常の空オブジェクトを作ってトレールと座標変換用のスクリプトを付ける。
1 2 3 4 5 6 7 |
public class TrailUI : MonoBehaviour { public Transform targetUI; void Update () { Vector3 v = Camera.main.ScreenToWorldPoint(targetUI.position); transform.position = new Vector3(v.x,v.y,0); } } |
ここでポジションのZ軸に一手間いれているのは、デフォルトだとカメラ位置と同じZ座標になってしまってカメラに映らなくなるためです。
これで画面に軌跡が表示される。
しかし、このままだとCanvas要素の後ろに隠れてしまう。
一番前にするには Canvas の RenderMode を Screen Space – Camera に変更する。
するとキャンバスがカメラの正面に来るようになるのでスクリプトを調整する。
1 2 3 4 5 6 7 |
public class TrailUI : MonoBehaviour { public Transform targetUI; void Update () { Vector3 v = targetUI.position; transform.position = new Vector3(v.x,v.y,-10); } } |
これでキャンバス上にTrailを表示することができた。