キャラの移動範囲を制限する簡単なやり方はないの?
UnityのClamp関数を使えば良いわ!
Unityには、指定された範囲内に値を丸めるClamp関数が提供されています。
これを用いると、例えば次のようにキャラクターの移動範囲を制限することができます。
また、Clamp関数にはいくつかバリエーションが存在します。
本記事では、Clamp関数を用いて値の範囲を制限する方法とその活用例について紹介していきます。
この作品はユニティちゃんライセンス条項の元に提供されています
- Unity 2022.1.0f1
float型の値の範囲を制限する
Mathf.Clampメソッドを使います。
引数には、制限したい値、範囲の下限、範囲の上限の順に指定します。
戻り値は、valueをminとmaxの間に丸めた値です。
参考:Mathf-Clamp – Unity スクリプトリファレンス
使用例
オブジェクトのx軸方向の移動範囲を制限する例です。
このスクリプトをClampSide.csという名前でUnityプロジェクトに保存し、移動範囲を制限したいオブジェクトにアタッチすると機能するようになります。
実行結果
キャラクターのx軸方向(横方向)の移動範囲が制限されていることを確認できました。
移動範囲が分かるように色付けしています。
float型の値を0~1の範囲に制限する
制限したい値の下限が0、上限が1と決まっている場合は、Mathf.Clamp01メソッドを使うと楽です。0~1に正規化された値を扱いたい場合などに重宝するでしょう。
引数には、0~1の範囲に丸めたい値を指定します。
戻り値は、0~1の範囲に丸められた値です。
参考:Mathf-Clamp01 – Unity スクリプトリファレンス
0から1の間の値を使いたいケースはよくあるので、活躍できる場面も少なくないかもしれないわ。
ベクトルの長さを制限する
Vector2型やVector3型のベクトルを指定された長さ以下に収めるClampMagnitudeメソッドも存在します。
Vector2
Vector3
第1引数には、範囲に収めたいベクトル、第2引数にはベクトル長の上限を指定します。
戻り値は、第2引数の長さに丸められたベクトルです。
参考:Vector2-ClampMagnitude – Unity スクリプトリファレンス
参考:Vector3-ClampMagnitude – Unity スクリプトリファレンス
使用例
原点から指定された距離以上にならないように移動範囲を制限するスクリプトです。
このスクリプトをClampCircle.csという名前でUnityプロジェクトに保存し、移動範囲を制限したいオブジェクトにアタッチすると機能します。
実行結果
円形の領域からキャラクターが出ないようになりました。
Vector2.ClampMagnitudeメソッドは円の内部に、Vector3.ClampMagnitudeメソッドは球の内部にベクトルを閉じ込めるような振る舞いをします。
さいごに
Clamp関数を用いて値の範囲を制限する方法を紹介しました。
この辺の計算は自前で実装してもそれほど複雑にはなりませんが、Clampを使うとコード周りがすっきりとします。
ぜひ活用してみてください。