树洞中的狐狸 2022-02-08 10:30 采纳率: 100%
浏览 92
已结题

关于TransformDirection的一些疑问

最近在尝试做纪念碑谷的效果,在墙上行走的功能上出现了一些问题,我使用了transform.TransformDirection(Vector3.up)来标记角色的上面,好让角色不管怎么旋转可以始终标明他的头顶,通过Quaternion.LookRotation方法实现垂直上墙。但是实际运行起来的时候,一开始的旋转没有出现任何问题,角色可以正常在垂直的墙上行走,debug输出的TransformDirection(Vector3.up)正常的由(0,1,0)变为(1,0,0)(因为角色与所在的方块绕z轴旋转了90度),但当我继续往上面行走的时候,输出的角度开始错误,角色也因此歪了过去,TransformDirection(Vector3.up)开始变为(0.6,0,0.8)或者是(0.7,0,0.7),经过各种测试后发现只要角色在这个平面上向上行走TransformDirection(Vector3.up)的值就会出错,但我查到的资料来看这个值应该只会将(0,1,0)转化到角色的坐标上来,因此没有想明白这个错误出现的原因。

img

img

img

  • 写回答

1条回答 默认 最新

  • 小鱼游戏开发 2022-02-08 14:28
    关注

    官方解释 TransformDirection 是 将方向从局部空间转换到世界空间
    局部方向:这个方向并非是世界方向如Vector3.right,Vector3.up之类的,而是 对象A - 对象B 得出或者其他方式计算出来的方向
    然而你输入的却是一个世界方向。这是不正确的
    如果你需要对象上方的方向,那么你需要的仅仅是transform.up
    如果你需要对象上方的坐标,你可以简单的 transform.position + transform.up * distance 得到头顶的坐标

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 2月8日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错