【问题标题】:Physics RayCast Moves Object towards the camera or origin物理 RayCast 将对象移向相机或原点
【发布时间】:2019-03-16 08:20:17
【问题描述】:

我在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)时,没有鼠标移动效果,刀片(游戏对象)向相交射线原点的相机移动。为什么会这样? 可能RaycastHitInstance有问题?

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

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-05-26
      • 2015-02-25
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多