はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】Vector3をオプション引数として使う

はじめに

今回は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をオプション引数として使いたいだけなのに、けっこう遠回りをしてしまった気がします。
またこれ以外になにか方法がありましたら、是非コメントをしていただけると嬉しいです!