如何在释放按键时使对象旋转回来?

时间:2017-12-27 02:48:54

标签: c# unity3d unity5

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 个答案:

答案 0 :(得分: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);
        }
    }