これは少し時間がかかりますので、ここで私にご負担ください。
正射影のカメラを使用していることを前提としています。使用する式は、パースペクティブカメラでは機能しません。
あなたの欲望が、あなたのオブジェクトをスクリーン境界の内側に保つことが理解できる限り、 Unityの画面境界は、カメラのサイズと画面のサイズの組み合わせによって決まります。
float height = Camera.main.orthographicSize * 2;
カメラの正射投影サイズはワールド単位で画面の大きさの半分を決定します。この値を掛け合わせると、画面の上部と下部のワールド単位の量が得られます。
この値から幅を取得するには、値をとり、画面の幅を画面の高さで割った値を乗算します。
float width = height * Screen.width/Screen.height;
ここで私たちは画面の寸法を持っていますが、依然としてその範囲内にオブジェクトを保持する必要があります。
まず、Bounds
のインスタンスを作成します。このインスタンスは、その位置の最大値と最小値を決定するために使用します。私たちは私たちの境界インスタンスの中心がVector3.zero
を使用
Bounds bounds = new Bounds (Vector3.zero, new Vector3(width, height, 0));
注意は世界の中心でなければなりません。これは、オブジェクトが内部で移動できる領域の中心です。
最後に、結果の境界のプロパティに従って、オブジェクトの位置値を固定します。
Vector3 clampedPosition = transform.position;
clampedPosition.x = Mathf.Clamp(clampedPosition.x, bounds.min.x, bounds.max.x);
transform.position = clampedPosition;
これは、オブジェクトが画面の境界を決して離れないようにする必要があります。
'Screen.width'と' Screen.height'を使用して、可能な限り変数をハードコーディングしないようにしてください。 –
ありがとうございます。 screen.widthとheightの使い方を説明できますか? –
私はしようとしますが、私はあなたの文脈でそれを手助けするのに十分な情報がありません。達成しようとしていることのイメージを投稿できますか? –