Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 双击与单击_C#_Unity3d_Mouseevent - Fatal编程技术网

C# 双击与单击

C# 双击与单击,c#,unity3d,mouseevent,C#,Unity3d,Mouseevent,我正在统一制作一个库存系统。单键点击是“拾取”物品并将其放置在您的库存中,而双击则应装备该物品 public void OnPointerDown(PointerEventData eventData) { if (this.item != null) { UICraftResult craftResult = GetComponent<UICraftResult>(); if (eventDat

我正在统一制作一个库存系统。单键点击是“拾取”物品并将其放置在您的库存中,而双击则应装备该物品

public void OnPointerDown(PointerEventData eventData)
    {
        if (this.item != null)
        {
            UICraftResult craftResult = GetComponent<UICraftResult>();
            if (eventData.clickCount == 2)
            {
                EquipItem(this.item);
            }
            else if (craftResult != null && this.item != null && selectedItem.item == null)
            {
                craftResult.PickItem();
                selectedItem.UpdateItem(this.item);
                craftResult.ClearSlots();
            }
            else if (!craftingResultSlot)
            {
                if (selectedItem.item != null)
                {
                    Item clone = new Item(selectedItem.item);
                    selectedItem.UpdateItem(this.item);
                    UpdateItem(clone);
                }
                else
                {
                    selectedItem.UpdateItem(this.item);
                    UpdateItem(null);
                }
            }
POINTERDOWN上的公共无效(PointerEventData事件数据)
{
如果(this.item!=null)
{
UICraftResult=GetComponent();
如果(eventData.clickCount==2)
{
设备项(本项目);
}
else if(craftResult!=null&&this.item!=null&&selectedItem.item==null)
{
craftResult.PickItem();
选择editem.UpdateItem(此项);
craftResult.clearlots();
}
否则如果(!craftingResultSlot)
{
如果(selectedItem.item!=null)
{
项目克隆=新项目(选择editem.Item);
选择editem.UpdateItem(此项);
更新项(克隆);
}
其他的
{
选择editem.UpdateItem(此项);
UpdateItem(null);
}
}

由于某些原因,只有三次单击才会触发“if(eventData.clickCount==2)”检查。而且,即使我双击,也会始终触发一次单击。有人能帮我吗?

每次单击都是单独触发的,因此您的局部变量
eventData
将在每个触发器上重置;它是特定于事件的。
尝试创建一个全局变量,您可以在触发和事件时递增并读取该变量

public class InventoryManager : MonoBehaviour {
    int slotID = -1; //id of the previously clicked slot

    public void OnPointerClick(PointerEventData eventData) {
        if (this.slotID != selectedItem.id) {
            this.slotID = selectedItem.id;
            //your code for a single click
        } else {
            this.slotID = -1; //clear the slot id;
            //your code for a double click
        }
    }
}
现在仍然存在计时问题:这样,它将始终触发单击事件,然后触发双击事件。如果要有条件地跳过单击事件,可以让它在触发单击事件之前等待一秒钟。希望单击事件不会太多,因此可以调整双击事件单击处理程序可撤消单击处理程序所做的操作。

例如,如果捡到一个项目,用户立即再次单击同一个插槽,您可以将该项目放回插槽并执行双击事件。计时器可能是可选的,只要可以撤消单次单击。

您的意思是使用基于clickcount增加的整数?确切地说,您可以定义一个变量类范围内的ble(假设该类关注您的库存)。也可以存储项目槽id,以便您知道何时重置单击计数器,因为单击了另一个项目。然后根据新变量计数生成特定函数?很抱歉,这是非常新的。没问题。事件的单击计数可能不够,因为它缺少有关单击内容的信息它不会告诉您经过了多少时间。您应该定义一个自定义变量来确定。请参阅我的更新答案。