1、工具需要用OnGUI显示,所以继承了EditorWindow
2、要在游戏中拾取,此时OnGUI会失去焦点,所以鼠标判断在Update函数中
3、UICamera.ScreenPointToRay拾取位置是错误的
4、EventSystem.current.IsPointerOverGameObject只能返回true or false,但是没有明确的拾取对象,EventSystem.current.currentSelectedGameObject返回的是上一次点击的对象。
5、最后方案参考了https://blog.csdn.net/andyhebear/article/details/51433748的重载代码:
PointerEventData eventData = new PointerEventData(UnityEngine.EventSystems.EventSystem.current);
eventData.pressPosition = Input.mousePosition;
eventData.position = Input.mousePosition;
list = new List<RaycastResult>();
pathList = new List<string>();
UnityEngine.EventSystems.EventSystem.current.RaycastAll(eventData, list);
6、取了RaycastResult的gameObject中所有的Image对象,都是实例化后的,取路径是需要用它的sprite,即AssetDatabase.GetAssetPath(img.sprite)