2017-10-22 19 views
0

まずは、私の悪い英語で申し訳ありませんが、私はオランダ語です。回転中にプレイヤーオブジェクトの位置が変更される

私は、前後の(上下のキーで)歩くことができ、左右のキーでプレーヤーを回転させることができるプレーヤーオブジェクトを作成しようとしています。しかし、左または右のキーを押すと、プレーヤーの位置が変わり、ある点を中心に回転するように見えます。しかし、私は周りを回るときと同じように回転して同じ場所に留まるべきです。

私は、同じ「移動スクリプト」と同じ入力マネージャ設定を使用して、いくつかの小さなプログラムを用意しています。そこでは正常に動作するので、なぜ今は動作しないのか分かりません。

これは私の移動スクリプトですが、このスクリプトは、他のプログラムと正常に動作します:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class MoveScript : MonoBehaviour 
{ 

    public float speed = 3f; 
    public float rotate = 50f; 
    private Rigidbody rb; 
    // Update is called once per frame 

    private void Start() 
    { 
     rb = GetComponent<Rigidbody>(); 
    } 
    void Update() 
    { 
     if (Input.GetButton("Up")) 
      transform.Translate(Vector3.forward * speed * Time.deltaTime); 
     if (Input.GetButton("Down")) 
      transform.Translate(-Vector3.forward * speed * Time.deltaTime); 
     if (Input.GetButton("Right")) 
      transform.Rotate(Vector3.up, rotate * Time.deltaTime); 
     if (Input.GetButton("Left")) 
      transform.Rotate(-Vector3.up, rotate * Time.deltaTime); 
     if (gameObject.GetComponent<Rigidbody>().velocity.y < 0.01) 
     { 
      if (Input.GetButtonDown("Jump")) 
       rb.AddForce(0, 225, 0); 
     } 

    } 

} 

InputManagerの設定(それが正常に動作し、他のプログラムなども同じ):

enter image description here

enter image description here

誰かが自分のプログラムのスクリーンショットを望む場合は、いつでもそれはもちろんです。スクリプトや入力マネージャーになければ、問題はどうなるか分かりません。

+0

あなたは*プレイヤオブジェクトの中心点にご回転*の相対を行っていますまたは、例えば、彼の(0,0,0)ローカル座標の周りにプレーヤーを回転させていますか?プレーヤーモデルはどのように定義されていますか? – hacksalot

+0

今では、地球が太陽の周りを回っているような特定の点を回っていますが、地球が自分の軸の周りを回っているように、それは自分の軸です。選手オブジェクトは球/円柱/カプセルの組み合わせ(親)であり、親選手オブジェクトは剛体と「移動スクリプト」を有する。 – lakeviking

+0

Transform.Rotateは、デフォルトでローカル空間でローテーションを実行します。他のすべてのものは等しく、オブジェクトのローカル(0,0,0)を中心に回転を行います。その点がプレーヤーモデルのジオメトリの中心でない場合は、目撃している動作が見えます。もしそうであれば回転する前に翻訳を試みるか、地元の指導を調整して、そうする必要はありません。別の言い方をすると、同じY軸の周りをXZ平面上の平坦な四分円を回転させているとします。あなたはそれを中心点か、左下隅の(0,0)で回転していますか? – hacksalot

答えて

0

OPのコメントに続いて、解決策を使用する必要があります:

xRotationあなたはときと回転キーのいずれかがダウンしている間、毎秒回転したい量のフロートである
if (Input.GetButton("Right")) 
    transform.localEulerAngles = transform.localEulerAngles + new Vector3(xRotation, 0, 0) * Time.deltaTime; 
if (Input.GetButton("Left")) 
    transform.localEulerAngles = transform.localEulerAngles - new Vector3(xRotation, 0, 0) * Time.deltaTime; 

(PS:今オープン団結を持っていないので、+-が反転するかもしれないが、そのようなものでなければなりません。)

関連する問題