2017-04-04 11 views
0

タイトルが言うように、私は、xboxコントローラの左の親指スティックとInput.GetAxis()メソッドを使用して徐々に増加する移動速度を達成したいと考えています。問題は、対角線の動きが前方、後方などより速く止まるように、動きベクトルを正規化する必要があることです。ノーマライズすると自動的に大きさは1になるので、左の親指の位置でスピードをコントロールする能力が失われます。前もって感謝します!正規化された速度を使って徐々に移動速度を増やす

親指スティックの位置で速度の量を制御できますが、斜めの動きは他の動きよりも速いです。

Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 

    rigidBody.MovePosition(transform.position + moveDirection * moveSpeed * Time.deltaTime); 

親指スティックの位置で速度を上げることはできませんが、斜めの動きは他の動きと同じ速度です。

Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 

    rigidBody.MovePosition(transform.position + moveDirection.normalized * moveSpeed * Time.deltaTime); 
+0

てみrigidBody.position = transform.position + moveDirection.normalized * moveSpeed * Time.deltaTime。 –

+0

@CổChíTâm返信ありがとう、この状況で何も影響しません。 – jozza710

答えて

1

標準化または縮尺ではなく、クランプ。

Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 
Vector3 moveDirection = new Vector3(
    Mathf.Clamp(input.x, -Mathf.Abs(input.normalized.x), Mathf.Abs(input.normalized.x)), 
    0, 
    Mathf.Clamp(input.z, -Mathf.Abs(input.normalized.z), Mathf.Abs(input.normalized.z)) 
); 

rigidBody.MovePosition(transform.position + moveDirection * moveSpeed * Time.deltaTime); 

単位円外の値を単位円上にあるように再計算されながら、単位円の内部の全ての値は、変わりません。

としても、それを書くことができます:

Vector3 move = (input.magnitude<1?input:input.normalized); 
0

おそらくこの問題の解決策がありますが、これが私の解決方法です。私は誰か他の人がより良い解決策を持っているかどうかを確かめるために、この質問に答えてもらいます。

Vector3 moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 

    rigidBody.MovePosition(transform.position + new Vector3(moveDirection.normalized.x * moveSpeed * Time.deltaTime * Mathf.Abs(moveDirection.x), 0, 
                  moveDirection.normalized.z * moveSpeed * Time.deltaTime * Mathf.Abs(moveDirection.z))); 
関連する問題