2017-12-27 10 views
0
private void Update() 
{ 
if (Input.GetKey(KeyCode.R)) 
     { 
      objectToScale.transform.Rotate(Vector3.up, rotationSpeed * Time.deltaTime); 
     } 

     if (Input.GetKeyUp(KeyCode.R)) 
     { 
      var lookPos = transform.position + objectToScale.transform.position; 
      lookPos.y = 0; 
      var rotation = Quaternion.LookRotation(lookPos); 
      objectToScale.transform.rotation = Quaternion.Slerp(objectToScale.transform.rotation, rotation, Time.deltaTime * damping); 
     } 
} 

私は、オブジェクトが別のオブジェクトに面して回転するRキーを離してもらいたいと思います。キーを離したときにオブジェクトを元に戻すにはどうすればよいですか?

回転バック部分をGetKeyUpから削除すると機能します。しかし、それは常にオブジェクトを回転し続けるでしょう、そして、私はRキーをリリースするときだけそれが回転してもらいたいですが、それは動作していません。

if (Input.GetKeyUp(KeyCode.R)) 
      { 
       var lookPos = transform.position + objectToScale.transform.position; 
       lookPos.y = 0; 
       var rotation = Quaternion.LookRotation(lookPos); 
       objectToScale.transform.rotation = Quaternion.Slerp(objectToScale.transform.rotation, rotation, Time.deltaTime * damping); 
      } 

しかし、私はRキーを離したときに何も起こりません:

これは私が何を意味するか、バック回転部分です。

答えて

1

最も洗練された解決策ではありませんが、私の要点を説明する必要があります。

元の位置に復帰したい場合は、更新ごとに呼び出す必要があります。だから私はちょうどトリガーを使用した。

ターゲットとソースの間の位置をマイナスして、それぞれの方向を取得する必要があります。

public bool freeRotateTrigger = false; 
    public Transform target; 

    void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.R)) 
      freeRotateTrigger = true; 

     if (Input.GetKeyUp(KeyCode.R)) 
      freeRotateTrigger = false; 

     if (freeRotateTrigger) 
     { 
      transform.Rotate(Vector3.up, 50f * Time.deltaTime); 
     } 
     else 
     { 
      Vector3 relativePos = target.position - transform.position; 
      Quaternion rotation = Quaternion.LookRotation(relativePos); 
      transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * 10f); 
     } 
    } 
関連する問題