【发布时间】:2022-12-18 08:14:39
【问题描述】:
所以我有这段代码悬停时选择 UI 中的对象,并将当前悬停的元素存储在类范围内hoveredAction.
我觉得会有一个更优雅的方法这个逻辑。我知道如果光线投射对象与存储的对象相同,我可以再添加一项检查以避免一些计算,但“样板”else if (hoveredAction != null) 会持续存在。
这不是我第一次遇到这种逻辑,但这次很简单,我可以总结一下,任何想法都会有所帮助。
void Update()
{
pointerEventData = new PointerEventData(eventSystem)
{
position = Input.mousePosition
};
List<RaycastResult> results = new();
raycaster.Raycast(pointerEventData, results);
if (results.Count > 0)
{
var result = results[0];
var obj = allowedActions.Where(a => result.gameObject == a.UiObject.gameObject);
if (obj.Count() > 0)
{
hoveredAction = obj.First();
hoveredAction.UiObject.GetComponent<Image>().color = shown;
}
else if(hoveredAction != null)
{
hoveredAction.UiObject.GetComponent<Image>().color = hidden;
hoveredAction = null;
}
}
else if (hoveredAction != null)
{
hoveredAction.UiObject.GetComponent<Image>().color = hidden;
hoveredAction = null;
}
}
【问题讨论】: