【发布时间】:2020-09-30 17:56:04
【问题描述】:
我是 Raycasting 的新手,所以我可能会以不好的方式处理这个问题,但我会向外发送光线投射到游戏对象所面对的方向,从它击中的第一个对象反弹并在消失前走一小段距离.
据我所知,Unity 中没有用于反射光线投射的内置函数,所以我一直在尝试生成另一个光线投射,但我的运气并不好。到目前为止,这是我所拥有的:
public Gameobject firePoint; // I have an object attached to my main object that I use as a point of origin
void DrawLazer()
{
Vector2 origin = new Vector2(firePoint.transform.position.x, firePoint.transform.position.y);
Vector2 direction = transform.TransformDirection(Vector2.up);
RaycastHit2D hit = Physics2D.Raycast(origin, direction, 10f);
Debug.DrawLine(origin, direction *10000, Color.black);
if (hit)
{
Debug.Log("Hit: " + hit.collider.name);
var whatWeHit = new Vector2(hit.transform.position.x, hit.transform.position.y);
var offset = whatWeHit + hit.point;
offset.y = 0;
RaycastHit2D hit2 = Physics2D.Raycast(offset, Vector3.Reflect(direction, hit.normal) * -10000);
if (hit2)
{
Debug.DrawLine(offset, -Vector3.Reflect(direction, hit.normal) * -10000);
}
}
}
我调用 DrawLaxer();正在更新中。
当前的脚本能够生成第二次光线投射,但是正如您所见,第一次光线投射在击中某物时仍然不会停止,更重要的是,虽然该解决方案在击中平面物体时效果很好水平面。但是,如果它在垂直或对角平面上撞击物体,则会对错误的轴应用多个计算:
任何帮助将不胜感激。
【问题讨论】:
-
你用一段代码发布了一些文本,这里的问题是什么?代码有什么问题?
-
@sommmen 我已经用一些屏幕截图和更多细节更新了我的 OP,这有帮助吗?
标签: unity3d 2d game-physics raycasting