2016-05-07 14 views
0

私は、3Dオブジェクトを元の回転にゆっくりと戻そうとしています。Unity3d元の回転に戻す

これは私がこれまで持っているものです。

using UnityEngine; 
using System.Collections; 

public class ShipController : MonoBehaviour { 

    public float turnRate; 
    public Transform baseOrientation; 

    private Vector3 worldAxis, worldAxisRelative; 
    private Rigidbody rb; 

    void Start() { 
     rb = GetComponent<Rigidbody>(); 
     worldAxis = new Vector3 (0, 0, 0); 
     worldAxisRelative = transform.TransformDirection (worldAxis); 
    } 

    void Update() { 

    } 

    void FixedUpdate() 
    { 
     if (Input.GetKey (KeyCode.LeftArrow)) { 
      rb.transform.Rotate (Vector3.down * turnRate * Time.deltaTime); 
     } 
     if (Input.GetKey (KeyCode.RightArrow)) { 
      rb.transform.Rotate (Vector3.up * turnRate * Time.deltaTime); 
     } 
     if (Input.GetKey (KeyCode.UpArrow)) { 
      rb.transform.Rotate (Vector3.left * turnRate * Time.deltaTime); 
     } 
     if (Input.GetKey (KeyCode.DownArrow)) { 
      rb.transform.Rotate (Vector3.right * turnRate * Time.deltaTime); 
     } 
     axisAlignRot = Quaternion.FromToRotation (worldAxisRelative, worldAxis) ; 
     rb.transform.rotation = Quaternion.Slerp(rb.transform.rotation, axisAlignRot * transform.rotation, 1.0f * Time.deltaTime); 
    } 
} 

しかし、私はそれとは運を持っていないのです。これをどうやって動かすことができますか?

答えて

1

これは、元のローテーションを保存してQuaternion.RotateTowardsを使用するだけで簡単に行うことができると思います。このために剛体を使う必要はありません。

using UnityEngine; 
using System.Collections; 

public class ShipController : MonoBehaviour { 

    public Quaternion originalRotation; 

    void Start() { 
     originalRotation = transform.rotation; 
    } 

    void Update() 
    { 
     if (Input.GetKey (KeyCode.LeftArrow)) { 
      transform.Rotate (Vector3.down * turnRate * Time.deltaTime); 
     } 
     if (Input.GetKey (KeyCode.RightArrow)) { 
      transform.Rotate (Vector3.up * turnRate * Time.deltaTime); 
     } 
     if (Input.GetKey (KeyCode.UpArrow)) { 
      transform.Rotate (Vector3.left * turnRate * Time.deltaTime); 
     } 
     if (Input.GetKey (KeyCode.DownArrow)) { 
      transform.Rotate (Vector3.right * turnRate * Time.deltaTime); 
     } 
     transform.rotation = Quaternion.RotateTowards(transform.rotation, originalRotation, 1.0f * Time.deltaTime); 
    } 
} 

これは動作するはずです。実際には4つのキーのいずれかを押している場合は、元の回転方向に向いているため、条件を少し変更する必要があります。

関連する問題