Unity - Quaternion.Slerp瞬间旋转

时间:2017-07-15 02:30:43

标签: c# unity3d quaternions

我试图让我的物体在Z轴上平滑旋转,从0到180,每按一次按钮来回。

使用的 Quaternion.Slerp 设置不能平滑地旋转到目标旋转,而是立即跳转到接近它的数字。在按下Quaternion.Slerp的许多按钮之后,它最终的一半工作在于从0到180,但仍然是立即且不顺利。

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

public class PlayerController : MonoBehaviour 
{
    public float moveSpeed;
    public bool movePlayer;
    private float maxMoveSpeed;
    public float waitToMove;
    Rigidbody2D thisRigidbody;


    //SCOOP variables
    private GameObject scoop;
    private GameObject scoopRotation;

    Quaternion currentScoopRotation;
    public Quaternion targetScoopRotation;
    Quaternion lastScoopRotation;
    public float scoopRotateTime;


    // Use this for initialization
    void Start () 
    {
        thisRigidbody = gameObject.GetComponent<Rigidbody2D> ();
        maxMoveSpeed = moveSpeed;

        //SCOOP finders
        scoop = GameObject.FindGameObjectWithTag ("Scoop");
        currentScoopRotation = scoop.transform.rotation;
    }

    // Update is called once per frame
    void Update () 
    {
        if(movePlayer)
        thisRigidbody.velocity = new Vector2 (moveSpeed,  thisRigidbody.velocity.y);    


        //Rotates SCOOP using Quaternions + Spacebar
        if (Input.GetKeyDown(KeyCode.Space)) { 
            lastScoopRotation = currentScoopRotation;
            scoop.transform.transform.rotation = Quaternion.Lerp (currentScoopRotation, targetScoopRotation, scoopRotateTime * Time.time);
            currentScoopRotation = targetScoopRotation;
            targetScoopRotation = lastScoopRotation;
            changeMoveDirection ();
        }
    }

    void changeMoveDirection()
    {
            moveSpeed *= -1;
    }

     IEnumerator changeDirectionCO()
    {
        //thisRigidbody.velocity = new Vector2 (0f,0f);
        //moveSpeed = 0;
        yield return new WaitForSeconds (waitToMove);
        moveSpeed *= -1;
    }


}

0 个答案:

没有答案