UnityでCanvasにImageを張り付けたので、その上に線を描きたい。
これが意外と大変でdraw.line()みたいな簡単に使える関数がない。三角形なら簡単にかけるので、細長い三角形を2つ書いて直線っぽくする。
1. HierarchyにあるCanvasをクリック、①のちょっと左上にある+ボタンを押して、Create Empty Child を選んで、GameObjectを追加する。
2. GameObjectをクリックして、Inspectorを表示。
3. ②をクリックして、Shiftキーを押しながら(選択肢が変わる)Bottom, leftを選ぶ。Pos X,Y,Z を0にする。
4. Projectにある③Assetsをクリック、Assetsのちょっと左上にある+ボタンを押して、C# Script を選んで、NewBehaviourScriptを追加する。
5. ④のスライダーを一番左にする(NewBehaviourScriptの文字を全部見たい)
6. NewBehaviourScriptをダブルクリックして、Visual Studio 2022を起動して、NewBehaviourScript.csを表示する。
7. 自動で作られるコードは使わないので、全部消して、以下に書き換えて保存する。
8. Unityの編集画面に戻って、⑤の「Add Component」ボタンをクリック、虫眼鏡(検索)の欄にCanvas Rendererと入れて、選択肢に出る「Canvas Renderer」を追加する。
9. AssetsにあるNewBehaviourScript⑥をドラッグして、HierarchyにあるGameObject⑦にドロップする。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class NewBehaviourScript : MaskableGraphic { static NewBehaviourScript self; NewBehaviourScript() { self = this; } // このクラスの外から再描画したい場合はNewBehaviourScript.redraw()を呼び出す static public void redraw() { print("redraw"); self.SetAllDirty(); } protected override void OnPopulateMesh(VertexHelper vh) { vh.Clear(); UIVertex vertex = UIVertex.simpleVert; vertex.color = Color.red; // 左下から、右上に斜めの赤い線を書く // 1番目の三角形 vertex.position = new Vector2(0, 0); // 左下 vh.AddVert(vertex); vertex.position = new Vector2(canvas.pixelRect.width+2, canvas.pixelRect.height); vh.AddVert(vertex); vertex.position = new Vector2(canvas.pixelRect.width-2, canvas.pixelRect.height); vh.AddVert(vertex); // 2番目の三角形 vertex.position = new Vector2(2, 0); vh.AddVert(vertex); vertex.position = new Vector2(-2, 0); vh.AddVert(vertex); vertex.position = new Vector2(canvas.pixelRect.width, canvas.pixelRect.height); // 右上 vh.AddVert(vertex); // 細長い三角形を2つ書いて直線にする vh.AddTriangle(0, 1, 2); // 三角形しか書けない vh.AddTriangle(3, 4, 5); // 三角形しか書けない } }
10. HierarchyにあるGameObjectをクリックして、Inspectorを表示すると、Canvas Rendererの下にNew Behaviour Script (Script)が追加されているのを確認する。
11. 画面中央の上にある▶(実行ボタン)を押して、アプリを実行して、目的の画像に斜めの赤い線が表示されるのを確認する。
12. Visual Studio 2022 のソリューション エクスプローラーで、NewBehaviourScript.csを右クリックして、名前の変更を選ぶ。
13. RedLineOnCanvas.csに変更して、Enterで確定する。「すべての参照に対して、名前を変更しますか?」と問われるので、「はい」を選ぶ。
14. これでUnity側のコードも含めて、C#クラス名まで全部の名前が変更される。
15. HierarchyにあるGameObjectをクリックして、①のちょっと左上にある+ボタンを押して、UI→Legacy→Textを選択する→Text(Legacy)が追加される。
16. ②をShiftを押しながらクリック→bottom, leftを選ぶ。
17. ③のPosX, PosY, Pos Zをすべて0にする 。
18. ④のFont StyleをBoldにする(ラインの上に文字があることが分かりやすくなる)。
19. 画面中央の上にある▶(実行ボタン)を押して、アプリを実行して、斜めの赤い線の上に白文字のNew Textが表示されるのを確認する。