c# - 为什么物体在移动时根本不旋转?
问题描述
IEnumerator ThrowObject(Transform objectToMove, Transform toPosition, float duration)
{
float counter = 0;
while (counter < duration)
{
objectToMove.Rotate(throwSpeed * Time.deltaTime, 0, 0);
counter += Time.deltaTime;
Vector3 currentPos = objectToMove.position;
float time = Vector3.Distance(currentPos, toPosition.position) / (duration - counter) * Time.deltaTime;
objectToMove.position = Vector3.MoveTowards(currentPos, toPosition.position, time);
yield return null;
}
var naviParent = GameObject.Find("Navi Parent");
StartCoroutine(ThrowBack(objectToMove, naviParent.transform.position , duration));
}
然后 :
IEnumerator ThrowBack(Transform objectToMove,Vector3 originalPosition , float duration)
{
float counter = 0;
while (counter < duration)
{
counter += Time.deltaTime;
Vector3 currentPos = objectToMove.position;
float time = Vector3.Distance(currentPos, originalPosition) / (duration - counter) * Time.deltaTime;
objectToMove.position = Vector3.MoveTowards(currentPos, originalPosition, time);
yield return null;
}
objectToMove.localPosition = new Vector3(0, 0, 0);
}
我试过了 :
objectToMove.Rotate(throwSpeed * Time.deltaTime, 0, 0);
我想要做的是当 objectToMovei 开始移动时也开始旋转,并且当 objectToMove 接近目标时,距离目标大约 5 距离时慢慢降低旋转速度并在到达目标时停止完成旋转。
物体向后旋转时的逻辑相同,然后在距离 5 停止旋转时缓慢减小旋转。但现在 objectToMove 根本没有旋转。
解决方案
它不是旋转的,因为您没有告诉它旋转。
如果您在动画中的标准化位置可以表示为 x,则解决此问题的常用方法是使用 Quaternion.Lerp(或 Slerp)
float x= counter/duration;
Quaternion startRotation=objectToMove.rotation;
Quaternion endRotation=?
objectToMove.rotation=Quaternion.Lerp(startRotation,endRotation,x);
我留下了你的结束轮换,因为你需要以某种方式提供它(可能作为 IEnumerator 调用中的下一个参数)
这会给你线性运动。如果你想要更好的动作,你可以做
x = Mathf.SmoothStep(0,1,x);
推荐阅读
- javascript - 使用打字稿声明类私有变量时是否可以使用解构?
- android - 离子应用程序的密钥斗篷:带有cordova-native的keycloak-js不起作用
- angular - 选项卡中的角度子路由未显示在活动选项卡中
- r - 在 R 图中快速插入缺失值
- c# - C# Linq/Lambda 在相关表中搜索项目但不在视图模型中
- java - 如何使用 Session load() 然后 delete() 按 ID 删除一位客户?
- xml - XSD - 在 XML 模式中使元素成为可选和强制
- azure-functions - 如何在 Azure Function App 中禁用只读模式?
- arrays - VBA - 无意中在数组中创建数组
- android - 如何修复无法解决“de.hdodenhof:circleimageview:2.2.0”的依赖关系。