物理 光线投射 将对象移向摄像机或原点

本文关键字:摄像机 原点 光线投射 对象 物理 | 更新日期: 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;
        }
    }