2017-11-11 11 views
0

私はこのコードを使用しています:加速度移動限界は、画面サイズに応じて

void Update() 
{ 
    accel = Input.acceleration.x; 
    transform.Translate (0, 0, accel); 
    transform.position = new Vector3 (Mathf.Clamp (transform.position.x,-6.9f, 6.9f), -4.96f, 18.3f); 
} 

をそれは私のゲームオブジェクトは、私はそれ望むように移動しますが、問題は、私は自分の携帯電話にアプリを入れたときにということです(-6.9)(6.9)私の画面の "終わり"ではありません。そして、私はどのようにすべての画面サイズに応じてこれらの値を変更するかを把握することはできません?

+1

'Screen.width'と' Screen.height'を使用して、可能な限り変数をハードコーディングしないようにしてください。 –

+0

ありがとうございます。 screen.widthとheightの使い方を説明できますか? –

+0

私はしようとしますが、私はあなたの文脈でそれを手助けするのに十分な情報がありません。達成しようとしていることのイメージを投稿できますか? –

答えて

0

これは少し時間がかかりますので、ここで私にご負担ください。

正射影のカメラを使用していることを前提としています。使用する式は、パースペクティブカメラでは機能しません。

あなたの欲望が、あなたのオブジェクトをスクリーン境界の内側に保つことが理解できる限り、 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; 

これは、オブジェクトが画面の境界を決して離れないようにする必要があります。

+0

説明に感謝しますが、今やunityはbounds.min.xとbounds.max.x: 'Assets/scripts/controller'にエラーを表示します。cs(31,54):エラーCS0103:名前 'bounds 'が現在のコンテキストに存在しません。' –

+0

@TodorValkov変数' bounds'をどこかに明示的に保存する必要があります。 –

+0

ああ今、私は理解しています。ありがとうございました!!それは今働いている。 –

関連する問題