c# - Unity 3d我的角色没有旋转到我画的raycasthit点
问题描述
我用相机正面的方向在我的中心人物上画了一条轨道。我曾经Rigidbody.LookRotation
让角色回到那个点,但事实并非如此。
private void Update()
{
Physics.Raycast(transform.position + new Vector3(0, 3, 0), mainCam.transform.forward, out hit);
Quaternion lookrotation = Quaternion.LookRotation(new Vector3(hit.point.x,0,hit.point.z));
transform.rotation = Quaternion.Slerp(transform.rotation, lookrotation, Time.deltaTime * 2);
Debug.DrawLine(transform.position + new Vector3(0, 3, 0),hit.point);
Debug.Log(hit.collider.gameObject.name);
}
解决方案
乍一看有两点:
LookRotation
期待一个前进的方向..目前你只给它一个位置。您宁愿使用例如
if(Physics.Raycast(transform.position + new Vector3(0, 3, 0), mainCam.transform.forward, out var hit)) { var direction = hit.point - transform.position; direction.y = 0; var lookrotation = Quaternion.LookRotation(direction); ... }
目前你的旋转速度也很慢。假设 60 Fps从当前到目标旋转,您使用
1/60 * 2
大约 10倍的因子进行插值的每一帧。0.033..
因此,您越接近目标旋转,速度就越慢。您宁愿不乘以
Time.deltaTime
而是使用常数因子,例如0.5f
或使用
RotateTowards
并提供一个连续的anglePerSecond * Time.deltaTime
.
推荐阅读
- javascript - Uncaught (in promise) TypeError: Cannot read property 'map' of undefined - 在页面重新加载后仍然添加到 API?
- c# - 使用 CBC Blowfish 加密加密数据不起作用
- oauth-2.0 - keycloak-js 适配器在哪里存储刷新令牌和访问令牌?
- rest - 我可以使用 REST API 在 Discord 的“Server Insights”中获取为我的服务器提供的数据吗?
- python-3.x - 使用 CLI/Python API 导出 Google AutoML 模型
- javascript - 如何检查字符串/变量是否以移动区号开头?
- javascript - React - TypeError:无法读取 null 的属性“toFixed”
- docusignapi - DocuSign.eSign.Client.ApiException:未处理的响应类型
- file - Jmeter 测试:如何生成许多独特的文件?
- date - Power BI - 检查事件是否在相关表中的两个日期之间