释放按键时如何使对象旋转回来?
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);
}
}
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);
}
}