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键时没有任何事情发生。
答案 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);
}
}