我在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
实例存在问题?
我已经在“更新功能范围”和代码顶部(全局范围)中对其进行了初始化。但没有任何改变。 如何解决这个问题?
答案 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;
}
}