簡體   English   中英

釋放按鍵時如何使對象向后旋轉?

[英]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鍵時什么也沒有發生。

不是最優雅的解決方案,但它可以說明我的觀點。

如果您想回到原來的位置,則需要在每次更新時調用它。 所以我只用了一個觸發器。

您還需要減去目標和源之間的位置,以獲取它們之間的方向。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM