如何获得统一点击次数c#

时间:2017-03-03 20:00:28

标签: c# unity3d unity5

我正在编写一个统一的c#脚本,主要的想法是当我点击模型的某些部分时,该部分将被突出显示,现在我希望它再次单击它返回到原始状态。当我第三次点击同一部分时,应该再次突出显示。

我不知道如何在Update()方法中实现它,因为每次点击都需要花费几帧而且我无法识别哪个帧是第二次点击,第三次点击等。

有没有办法在不考虑统一帧的情况下识别点击次数?

 void Update(){
    if (Input.GetMouseButton(0))
    {
        RaycastHit hit;

        if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit)){
                bone = hit.collider.transform;
                if (boneList.Contains(bone) != true)
                {
                    /* if the part is not chosen before, add it to the list and highlight all elements in the list */
                    boneList.Add(bone);
                    Highlight(boneList);
                }/*cannot delete the element chosen repetitively*/
    }
}}

1 个答案:

答案 0 :(得分:4)

你是如此亲密。应将else语句添加到您的代码中。你的逻辑应该是这样的:

if(List contains clickedObject){
    Remove clickedObject from List
    UnHighlight the clickedObject
}else{
    Add clickedObject to List
    Highlight the clickedObject
}

另外,与提到的Serlite一样,您必须使用GetMouseButtonDown而不是GetMouseButton,因为按下键时会调用GetMouseButtonDown,但会调用GetMouseButton钥匙关闭时的每一帧。

最终代码应如下所示:

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        RaycastHit hit;

        if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
        {
            bone = hit.collider.transform;


            if (boneList.Contains(bone))
            {
                //Object Clicked is already in List. Remove it from the List then UnHighlight it
                boneList.Remove(bone);
                UnHighlight(boneList);
            }
            else
            {
                //Object Clicked is not in List. Add it to the List then Highlight it
                boneList.Add(bone);
                Highlight(boneList);
            }
        }
    }
}

你必须编写UnHighlight函数,它基本上将传入的GameObject / Transform恢复到默认状态。