为什么我的光线投射在几秒钟后停止工作?

时间:2020-10-15 05:47:45

标签: c# unity3d

我得到了一个脚本,它可以像rts游戏那样选择并移动单位,直到12秒左右过去了,游戏dosnt冻结,脚本中的任何内容都没有起作用,然后一切都很好,它应该将选定的单位放到列表中并激活亮点子对象,但似乎在单击该对象后,经过一段时间后,它将停止工作。

代码如下:

bool flag = false;
NavMeshAgent agent;
[SerializeField]
List<Transform> selected_units = new List<Transform>();
public Camera cam;

public Vector3 v2;
private RaycastHit hit;
void Update()
{
    

    if (Input.GetMouseButtonDown(0))
    {

        Ray ray = cam.ScreenPointToRay(Input.mousePosition);
       
        if (Physics.Raycast(ray, out hit))
        {
            
            if (hit.collider.gameObject.CompareTag("unit"))
            {
                flag = true;
                SelectUnits(hit.transform, Input.GetKey(KeyCode.LeftShift));
                v2 = hit.point;
                
                hit.collider.transform.GetChild(3).gameObject.SetActive(true);

            }
            else
            {
                
                DeselectUnits();
                flag = false;

            }


        }
    }
    else if (Input.GetMouseButtonDown(1) && flag == true)
    {

        Ray ray = cam.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(ray, out hit))
        {
            Move(hit.point);
        }
    }
}
private void Move(Vector3 hit)
{
    for(int i = 0; i < selected_units.Count; i++)
    {
        agent = selected_units[i].GetComponent<NavMeshAgent>();
        v2 = hit;
        agent.SetDestination(v2);
        
    }
}




private void SelectUnits(Transform unitt, bool isMultiselect)
{
    
    if (isMultiselect == false)
    {
        
        DeselectUnits();
        
    }
    selected_units.Add(unitt);
    


   

}
private void DeselectUnits()
{
    for(int i = 0; i < selected_units.Count; i++)
    {
        selected_units[i].transform.GetChild(3).gameObject.SetActive(false);
        
        
    }
    selected_units.Clear();


}

1 个答案:

答案 0 :(得分:0)

使用Input.GetMouseButton()...代替Input.GetMouseButtonDown...

按下并释放按钮后,拳头将返回True。 第二个在用户按下按钮的帧期间返回True。