はじめに
今回はVector3をオプション引数として使うことについての記事になります!
私がこれを実装してみようと思ったところ、いくつかつまずきポイントがあったので、軽く紹介してみたいと思います。
定数でなければならない
private void Hoge(Vector3 pos = Vector3.zero){}
最初はこのようにやってみたところ、’pos’の既定のパラメーター値は、コンパイル時の定数である必要がありますというエラーがでてきてしまいました。
ということから、
private void Hoge(Vector3 pos = new Vector3(0,0,0)){}
も同様のエラーが出てきてしまいます。
Vector3の定数を作る
前回のエラーから、Vector3
を定数で記述すればよいことが分かります。
private const Vector3 VECTOR3_ZERO = new Vector3(0, 0, 0);
しかしこのようにしても、型”Vector3”をconst宣言することはできませんというエラーがでてきてしまいました。
またこういった方法では定数にしてくださいと出てしまいます。
private static readonly Vector3 VECTOR3_ZERO = new Vector3(0, 0, 0);
nullで代用する
これまでのことを考えるとオプション引数を宣言するには正攻法では難しそうです。
そこでVector3
の変数にnull
を代入することで代用すれば良いと考えました。
ただ、Vector3
の正体は構造体です。構造体
は値型
なので、null
を代入することはできません。
ということで、null許容型
を使っていきます。
private void Hoge(Vector3? pos = null) { Vector3 position = pos ?? Vector3.zero; }
さいごに
Vector3をオプション引数として使いたいだけなのに、けっこう遠回りをしてしまった気がします。
またこれ以外になにか方法がありましたら、是非コメントをしていただけると嬉しいです!