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

How can I make the object to rotate back when releasing a key press?

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 键时没有任何反应。

不是最优雅的解决方案,但它应该能说明我的观点。

如果你想 lerp 回到原来的位置,需要在每次更新时调用它。所以我只用了触发器。

您还需要减去目标和源之间的位置以获得它们之间的方向。

    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);
        }
    }