1、目标
当在道具栏中选中一个Item时,点击地面就可以实现Item的drop操作,每点击一次就drop一次,直到道具栏中Item数量不够。
这样的好处:避免每次Drop都从道具栏中拖拉Item,通过点击这种操作可以更加高效。
方法:通过EventHandler脚本创建Event,在Player脚本中处理点击并触发Event,在UIInvenrotySlot脚本中订阅Event进行处理。
2、优化EventHandler脚本
添加如下事件代码:
3、优化Player脚本
添加如下变量:
private GridCursor gridCursor;
添加Start方法:
private void Start()
{gridCursor = FindObjectOfType<GridCursor>();
}
在Update中添加如下代码:
其具体实现如下:
private void PlayerClickInput()
{if (Input.GetMouseButton(0)){if (gridCursor.CursorIsEnabled){ProcessPlayerClickInput();}}
}
相关的代码实现如下:
private void ProcessPlayerClickInput(){ResetMovement();// Get Selected item detailsItemDetails itemDetails = InventoryManager.Instance.GetSelectedInventoryItemDetails(InventoryLocation.player);if(itemDetails != null){switch (itemDetails.itemType){case ItemType.Seed:if (Input.GetMouseButtonDown(0)){ProcessPlayerClickInputSeed(itemDetails);}break;case ItemType.Commodity:if (Input.GetMouseButtonDown(0)){ProcessPlayerClickInputCommodity(itemDetails);}break;case ItemType.none:break;case ItemType.count:break;default:break;}}}private void ProcessPlayerClickInputSeed(ItemDetails itemDetails){if(itemDetails.canBeDropped && gridCursor.CursorPositionIsValid){EventHandler.CallDropSelectedItemEvent();}}private void ProcessPlayerClickInputCommodity(ItemDetails itemDetails){if(itemDetails.canBeDropped && gridCursor.CursorPositionIsValid){EventHandler.CallDropSelectedItemEvent();}}
4、优化UIInventorySlot脚本
在OnEnable方法中增加如下代码,订阅事件并进行处理。