0

我在函数中有以下代码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也许实例有问题?

我已经在“更新函数范围”和代码顶部(全局范围)中对其进行了初始化。但没有任何改变。如何解决这个问题?

4

1 回答 1

0

我发现了问题。它的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;

        }
    }
于 2013-09-21T07:19:18.557 回答