3D空間に基本的な図形を描画するアセットです。
Canvasのオーバーレイに対応していないことに注意しましょう。
(普通のImageのUIの用にキャンバスに図形を描画することはできない。)
(キャンバスに描画するにはスクリプトを使用します。)
基礎情報
基本的な使い方
- パッケージマネージャーからインストール
- ヒエラルキーウインドウから → 右クリック → Shapes で作成したい形状のShapesオブジェクトを作成(全15種類の形がある)
- 15種類の形を組み合わせて自分の作りたい形状の形を作っていく。
- インスペクターで幅やまだら模様など色々設定できる。
公式ShapesGallery
公式のこんなことできるよ、例を見ながら自分のゲームにどう応用できそうか?を妄想しよう。
インストールパス
アセットが要らなくなったらShapesフォルダを削除しよう。
ただしシーン上に配置したShapesオブジェクトなどに注意。
(シーン上のShapesオブジェクトも削除しよう。)
応用
CanvasのオーバーレイのUIの様にShapesを描画する方法1
ShapesでUIの用にキャンバス上に形を作る場合は専用のスクリプトを作成する必要があります。
公式ドキュメント https://acegikmo.com/shapes/docs/#immediate-mode に記載がありますがいきなりだと本当にこれで動くのか?と疑問がでるので備忘も兼ねて手順を残しておきます。
最終目標のスクリプトの形(画面中央に3軸のギズモ風図形が表示される)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Shapes;
[ExecuteAlways] public class Shapes_UI_AimScope : ImmediateModeShapeDrawer
{
public override void DrawShapes(Camera cam)
{
using(Draw.Command(cam))
{
// set up static parameters. these are used for all following Draw.Line calls
Draw.LineGeometry = LineGeometry.Volumetric3D;
Draw.ThicknessSpace = ThicknessSpace.Pixels;
Draw.Thickness = 4; // 4px wide
// set static parameter to draw in the local space of this object
Draw.Matrix = transform.localToWorldMatrix;
// draw lines
Draw.Line( Vector3.zero, Vector3.right, Color.red );
Draw.Line( Vector3.zero, Vector3.up, Color.green );
Draw.Line( Vector3.zero, Vector3.forward, Color.blue );
}
手順
- 通常のスクリプトと同様に Add Component から任意の名前をつけたスクリプトを作成します。今回は Shapes_UI_AimScope という名前にしました。
- using Shapes;が必要かは不明ですが念のため記載しました。
- スクリプトを MonoBehaviour ではなく ImmediateModeShapeDrawer に変更します。
- さらにスクリプト冒頭に [ExecuteAlways] を追加します。
- 続いてスクリプト内に public override void DrawShapes(Camera cam) を追加し
- using(Draw.Command(cam)) も追加し そのカギカッコの中に自分の描きたい形のスクリプトコードを作成していきます。
- スクリプトを保存してエラーなくコンパイルできたらデバッグボタンを押してみましょう。
- 画面中央に赤青緑のギズモ風の図形が表示されたら成功です。
- あとは自分の望む形になるようにコードを書き換えていきましょう。
追記
この方法ではエディター上では描画されましたが、いざビルドすると描画されない問題に遭遇しました。方法2でビルドしたときどうなるかまた検証します。
どうもビルドしたときのエラーが原因の様に感じます。おそらくUnityEditorのバージョンで問題が発生しているのではないかと予想しています。前回テストでShapesを同じ様に動かしたときは正常に動作してくれたので、違いはUnityバージョンしかないはずです。
その後デモシーンをビルドしてWindowsで動かすと正常に動作しました。どうやらUnityバージョンではなく何かしらのコードの書き方などが間違っているとおもいますが、時間があるときにまた検証します。
CanvasのオーバーレイのUIの様にShapesを描画する方法2
{
{
}
}
撃ったら動く、レティクル(狙いのUI)を作りたい
細かい注意
- カメラにShapesを記載したスクリプトをアタッチすると実行画面で描画されなかった。
コメント