物理 光线投射 将对象移向摄像机或原点
本文关键字:摄像机 原点 光线投射 对象 物理 | 更新日期: 2023-09-27 18:32:21
我在Update
函数中有以下代码:
if (Input.GetButton("Fire1"))
{
mouseFollow = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(mouseFollow, out hit))
{
target_point = hit.point;
if (blade_created == false)
{
blade = (GameObject)Instantiate(Blade, target_point, Quaternion.Euler(90, 0, 0));
blade_created = true;
}
if (blade != null) blade.transform.position = hit.point;
Debug.DrawLine(mouseFollow.origin, target_point, Color.red);
}
}
刀片游戏对象正确跟随鼠标位置,但是当我按住按钮 (fire1) 时,没有鼠标移动效果,刀片(游戏对象)会向相机移动,这是相交光线的原点。为什么会导致这种情况?也许RaycastHit
实例有问题?
我已经在"更新函数范围"和代码顶部(全局范围)中对其进行了初始化。但没有任何改变。如何解决这个问题?
我发现了问题。这是if (blade != null)
条件。检查空边栏选项卡时。它将始终返回 false,因为您在第一次单击时创建了边栏选项卡。问题开始了。创建边栏选项卡后,我们只需继续检查hit.point
并将刀片转换到该点。我们还应该检查发生命中的对象。
在您的情况下,假设背景上有一个平面。所以我们得到了它的hit.point
。但是一旦我们得到刀片的实例,我们就发现"刀片(克隆)"作为命中对象,它会不断将刀片转换为自身的新命中点(即在该刀片的表面上而不是在刀片的原点上)。
在转换边栏选项卡之前,应检查命中对象,如以下代码所示。
if (Input.GetButton("Fire1"))
{
if(Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
{
target_point = hit.point;
if (blade_created == false)
{
blade = (GameObject)Instantiate(Blade, target_point, Quaternion.Euler(90, 0, 0));
blade_created = true;
}
if (blade != null && hit.transform.name != "Blade(Clone)")
blade.transform.position = hit.point;
}
}