我正在编写一个统一的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*/
}
}}
答案 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恢复到默认状态。