2017-01-31 6 views
3

sample pic of my desire solutionスクリプトで特定のポイントでunity3dのドアを移動するC#

私のゲームには2つのドアがあります。最初は閉じています。その後、彼らは開き、特定の点で停止します(写真はサンプルとして添付されます)。これまで私はスクリプトを書いており、ドアを連続的に回転させています。私は彼らを止めたい、45の角度のように、何か提案が必要です。

using UnityEngine; 
using System.Collections; 

public class rotate : MonoBehaviour 
{ 
    public string rotate_along = "y"; 
    public float speed = 10.0f; 

    // Use this for initialization 
    void Start() { 

    } 

    // Update is called once per frame 
    void Update() 
    { 
       if (rotate_along == "y") { 
         this.transform.Rotate (0, speed, 0); 
       } else if (rotate_along == "x") { 
         this.transform.Rotate (speed * Time.deltaTime, 0, 0); 
       } else if (rotate_along == "z") { 
         this.transform.Rotate (0, 0, speed * Time.deltaTime); 
       } else { 
         print ("please! check your cordinate for rotating for "+gameObject.name); 
       } 
    } 
} 

答えて

3

void Update() { 
     transform.rotation = Quaternion.Lerp(from.rotation, to.rotation, Time.time * speed); 
} 

[Source]

これがスムーズに現実の世界のように自然にあなたのドアを移動すると、あなたはベクトルに恐怖をコーディング避けるようになりますスペース。 Unityコミュニティには、クォータニオンがどのように機能するかについての多くの例があります。ここでは、違いが何であるかの簡単な説明を見つけることができます。

http://answers.unity3d.com/questions/389713/detaliled-explanation-about-given-vector3slerp-exa.html

+0

答えていただきありがとうございます。より良い回答をいただき、ありがとうございました。歓声:-)あなたたちの岩 –

1

あなたは.. ..このような

何かがトリックを行う必要があり、最大角度を設定せずに、一定速度でドアを回転しているしかし、私はそれをテストすることができていません。

私はあなたがこのためにLerpまたはSlerpを使用することをお勧め
using UnityEngine; 
using System.Collections; 

public class rotate : MonoBehaviour 
{ 
    public string rotate_along = "y"; 
    public float speed = 10.0f; 
    private float _currentAngle = 0.0f; 
    private float _targetAngle = 45.0f; 
    private float _completed = false; 

    // Use this for initialization 
    void Start() 
    { 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     if (_completed) 
      return; 

     float angle = speed * Time.deltaTime 

     if (_currentAngle + angle > _targetAngle) 
     { 
      angle = _targetAngle - _currentAngle; 
      _completed = true; 
     } 

     if (rotate_along == "y") 
     { 
      this.transform.Rotate (0, angle, 0); 
     } 
     else if (rotate_along == "x") 
     { 
      this.transform.Rotate (angle, 0, 0); 
     } else if (rotate_along == "z") 
     { 
      this.transform.Rotate (0, 0, angle); 
     } 
     else 
     { 
      print ("please! check your cordinate for rotating for "+gameObject.name); 
     } 

     _currentAngle += angle; 
    } 
} 
+0

'、それはのための余地を残してい – Dawnkeeper

+0

あなたは正しい、それは浮動小数点数を比較しているとして(_currentAngle == _targetAngle)は'真でない可能性が高いん場合エラー、それは視覚的な問題を引き起こすことはありません..私は私の答えを更新しました。 – Ben

関連する問題