c# - Unity 3D Raycast 没有朝着正确的方向发展
问题描述
我写了一些代码,应该从游戏对象的肩部发出光线投射并通过游戏对象的手。这是为了给出鼠标的方向,如果我的角色拿起一个物品,他们可以在那个方向使用那个物品,即朝那个方向射击。目前我只有它绘制演员表来调试它,因为演员表从正确的位置发射但不通过手。我根据上一个问题的答案尝试了此代码的多次迭代,但它似乎不起作用。游戏是一个2.5D横向卷轴。
pos.x = transform.position.x;
pos.y = transform.position.y -1.4f;
pos1.x = shoulder.transform.position.x;
pos1.y = shoulder.transform.position.y;
pos1.z = 15f;
pos.z =0f;
RaycastHit info;
Debug.DrawRay(pos1, pos, Color.yellow);
代码在手游戏对象上,当我从原点移动宪章时它也会做一些奇怪的事情,比如翻转方向并且只旋转一半并且不会向相反方向发射光线投射。
解决方案
从您之前拥有的向量开始:
// Hand
pos.x = transform.position.x;
pos.y = transform.position.y -1.4f;
pos.z = 0f;
// Shoulder
pos1.x = shoulder.transform.position.x;
pos1.y = shoulder.transform.position.y;
pos1.z = 15f;
从肩向量中减去手向量,得到两点之间的距离(或增量)。
Vector3 dir = pos1 - pos;
// For bonus point you can set the length of the ray by using dir as a unit vector
public float length;
dir = dir.normalized * length;
最后将肩部的位置和包含光线方向和长度的新方向向量提供给函数。
Debug.DrawRay(pos1, dir, Color.yellow);
推荐阅读
- python - 如何在某些位置生成字符串的所有可能组合?
- ethereum - Solidity Remix - 主链上的交易失败,但在私有链和备用链上工作
- c++ - 代码运行正确,但当括号数量更多时不起作用
- xamarin - 在 Xamarin 表单 Ios 中使用 MaterialEntryRenderer Placeholdercolor 和 Cursorcolor 未更改
- html - 具有动态内容的 Flex 网格
- laravel - 如何在laravel中获取第三个关系表列的总和
- hybris - 为 asagentsalesgroup hybris 添加路径限制
- mongodb - 为什么在mongocxx(c++17)中“find_one”比“find”耗时更长?
- python - 当文件存在时,Jupyter notebook os.path.isfile 返回 false
- avr - AVR - GNU AS - 在预处理器宏中的汇编指令后强制行结束