物理RayCast将物体移向相机或原点

时间:2013-09-20 18:07:24

标签: c# unity3d

我在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);
    }
}  

刀片GameObject正确地跟随鼠标位置,但是当我按住按钮(fire1)时,没有鼠标移动效果,刀片(GameObject)移向相交光线的原点相机。为什么会这样? 也许RaycastHit实例存在问题?

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

1 个答案:

答案 0 :(得分: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;

        }
    }