提问人:colossalchrist97 提问时间:7/15/2023 更新时间:7/16/2023 访问量:21
Unity 操作/事件/委托混淆
Unity Actions/events/delegates confusion
问:
在Unity中为我正在处理的一个小项目设置Actions时遇到一些问题。很想得到一些指导,因为我有点困惑。
基本设置如下:
我单击一个 ui 按钮元素,将玩家角色向某个方向移动。即向前、向后、向左、向右。
void onMoveForwardClicked()
{
Actions.OnPlayerMoved(Directions.Forward);
}
我有一个叫做 Actions 的类,看起来像这样
public static class Actions
{
public static Action<Directions> OnPlayerMoved;
}
我的播放器脚本有一个方法,它接受方向的枚举参数,并使用 switch 语句为我用作地图/竞技场的 2d 数组设置新位置。
public void MovePlayer(Directions direction)
{
switch (direction)
{
case Directions.Forward:
_NewPositionInRing.x -= 1;
break;
case Directions.Backward:
_NewPositionInRing.x += 1;
break;
case Directions.Left:
_NewPositionInRing.y -= 1;
break;
case Directions.Right:
_NewPositionInRing.y += 1;
break;
default:
break;
}
}
我的地图类实例化了 10x10 的 2D 数组,并为玩家设置了初始位置。地图类还具有设置玩家新位置并将旧位置重置为 0(空白区域)的方法
public void setNewPlayerPositions(Vector2Int oldPos, Vector2Int newPos, int playerID)
{
Debug.Log("oldPos: X:" + oldPos.x + ", Y:" + oldPos.y);
Debug.Log("newPos: X:" + newPos.x + ", Y:" + newPos.y);
Player1Postions = new Vector2Int(newPos.x, newPos.y);
mapArray[newPos.x, newPos.y] = playerID;
mapArray[oldPos.x, oldPos.y] = 0;
}
我对如何连接这个 ui 按钮有点困惑,例如当单击它时,它会使用 unity Actions 更新正确的值。
我可能从根本上误解了如何做到这一点,但我愿意学习,所以任何帮助都是值得赞赏的。谢谢!
我已经按照本教程 https://www.youtube.com/watch?v=8fcI8W9NBEo,但是当多个侦听器发挥作用并且参数复杂化时,我在~9分钟左右迷失了方向。
答:
0赞
Yusuf
7/16/2023
#1
基本上,在 C# 中使用 Action 时有 3 个步骤:定义、侦听和调用。
首先,定义它。您已经用以下行定义了它:
public static Action<Directions> OnPlayerMoved;
第二,听听。你没有在听。想象一下,这就像订阅 youtube 频道一样。如果您订阅了,则可以从频道接收通知。所以你应该像这样听你的行动:
Actions.OnPlayerMoved += OnPlayerMovedListenerMethod;
private void OnPlayerMovedListenerMethod(Directions direction)
{
Debug.Log(direction);
}
最后,您应该调用它。但你已经做到了。
Actions.OnPlayerMoved(Directions.Forward);
这是最基本的。为了进一步研究,您可以了解以下内容:
- event 关键字
- 功能
- delegate 关键字
评论