如何在Unity中使用C#事件

发布时间:2019-06-09 15:07
目的

本博文的主要目的是让您了解如何在Unity中使用C#事件。

代表有什么问题?

什么是活动?

为什么要使用事件?

如何宣布活动?

您可能会想到所有这些问题。

别担心,你来对地方了。

让我们开始吧,你还记得代表们的问题吗?

如果我们在使用多播委托后使用单个委托,那么它将重置现有的调用列表。

如果多个类订阅同一个委托,则很难跟踪这种情况。

这就是我们举办活动的原因。

让我们看看它们是如何运作的。

事件是一种特殊的委托,当你想要在事情发生时通知其他类时使用它们。比如,在GameStart上,在Gameover上。

让我们来看看事件的声明和使用。

1。声明代表

  public delegate void OnGameStart();  

2.创建活动

 公共静态事件OnGameStart onGameStart;  

3。指向方法

  onGameStart + = Move;  

4。调用事件

  onGameStart();  

让我们使用Event Delegate创建一个简单的游戏。

第1步

根据需要创建一个空的GameObject名称。

第2步

创建C#脚本将其命名为EventManager。

在EventManager.cs中编写以下代

  public class EventManager:MonoBehaviour {public delegate void OnButtonClick();public static event OnButtonClick onButtonClick;public void RaiseOnButtonClick(){if(onButtonClick!= null){onButtonClick();}}}  

第3步

将其分配给空GameObject。

第4步

创建一个2d对象并在SpriteRenderer中将旋钮指定为sprite。

第5步

创建C#脚本名称PlayerTransformAndColor。

在PlayerTransformAndColor.cs中编写以下代

  public class PlayerTransformAndColor:MonoBehaviour {?public SpriteRenderer spriteRenderer;public color color1,color2;private void OnEnable(){EventManager.onButtonClick + = ChangePosition;EventManager.onButtonClick + = ChangeColor;?}?public void ChangePosition(){transform.position + = Vector3.one * 2;}public void ChangeColor(){spriteRenderer.color = color2;}}  

第6步

将其分配给空GameObject。

现在让我们在PlayerTransformAndColor.cs中做一些改变

  public class PlayerTransformAndColor:MonoBehaviour {public SpriteRenderer spriteRenderer;public color color1,color2;private void OnEnable(){EventManager.onButtonClick + = ChangePosition;EventManager.onButtonClick + = ChangeColor;EventManager.onButtonClick = ChangeRotation;}public void ChangePosition(){transform.position + = Vector3.one * 2;}public void ChangeColor(){spriteRenderer.color = color2;}public void ChangeRotation(){transform.Rotate(0,90,0);}?}  

您可能会发现错误。如下所示,

了解了事件如何克服代表问题。

事件在委托上添加了一层抽象和保护,这种保护可以防止委托的客户端重置委托和调用列表。

现在让我们再举一个实际的例子吧。这使您可以更清楚地了解事件如何仅通过一个事件调用来处理多个事件侦听器。

为此,我们将遵循这些步骤。

第1步

创建一个空的GameObject名称,它是EventManager。

第2步

创建C#scrip并将其命名为Eventmanager。

在EventManager.cs中编写以下代

  public class EventManager:MonoBehaviour {public delegate void OnRest(); //声明代表公共静态事件OnRest onReset; //创建一个事件public delegate void OnReStart(); //声明代表公共静态事件OnReStart onReStart; //创建一个事件public static void RaiseOnReset(){if(onReset!= null){onReset();目的

本博文的主要目的是让您了解如何在Unity中使用C#事件。

代表有什么问题?

什么是活动?

为什么要使用事件?

如何宣布活动?

您可能会想到所有这些问题。

别担心,你来对地方了。

让我们开始吧,你还记得代表们的问题吗?

如果我们在使用多播委托后使用单个委托,那么它将重置现有的调用列表。

如果多个类订阅同一个委托,则很难跟踪这种情况。

这就是我们举办活动的原因。

让我们看看它们是如何运作的。

事件是一种特殊的委托,当你想要在事情发生时通知其他类时使用它们。比如,在GameStart上,在Gameover上。

让我们来看看事件的声明和使用。

1。声明代表

  public delegate void OnGameStart();  

2.创建活动

 公共静态事件OnGameStart onGameStart;  

3。指向方法

  onGameStart + = Move;  

4。调用事件

  onGameStart();  

让我们使用Event Delegate创建一个简单的游戏。

第1步

根据需要创建一个空的GameObject名称。

第2步

创建C#脚本将其命名为EventManager。

在EventManager.cs中编写以下代

  public class EventManager:MonoBehaviour {public delegate void OnButtonClick();public static event OnButtonClick onButtonClick;public void RaiseOnButtonClick(){if(onButtonClick!= null){onButtonClick();}}}  

第3步

将其分配给空GameObject。

第4步

创建一个2d对象并在SpriteRenderer中将旋钮指定为sprite。

第5步

创建C#脚本名称PlayerTransformAndColor。

在PlayerTransformAndColor.cs中编写以下代

  public class PlayerTransformAndColor:MonoBehaviour {?public SpriteRenderer spriteRenderer;public color color1,color2;private void OnEnable(){EventManager.onButtonClick + = ChangePosition;EventManager.onButtonClick + = ChangeColor;?}?public void ChangePosition(){transform.position + = Vector3.one * 2;}public void ChangeColor(){spriteRenderer.color = color2;}}  

第6步

将其分配给空GameObject。

现在让我们在PlayerTransformAndColor.cs中做一些改变

  public class PlayerTransformAndColor:MonoBehaviour {public SpriteRenderer spriteRenderer;public color color1,color2;private void OnEnable(){EventManager.onButtonClick + = ChangePosition;EventManager.onButtonClick + = ChangeColor;EventManager.onButtonClick = ChangeRotation;}public void ChangePosition(){transform.position + = Vector3.one * 2;}public void ChangeColor(){spriteRenderer.color = color2;}public void ChangeRotation(){transform.Rotate(0,90,0);}?}  

您可能会发现错误。如下所示,

了解了事件如何克服代表问题。

事件在委托上添加了一层抽象和保护,这种保护可以防止委托的客户端重置委托和调用列表。

现在让我们再举一个实际的例子吧。这使您可以更清楚地了解事件如何仅通过一个事件调用来处理多个事件侦听器。

为此,我们将遵循这些步骤。

第1步

创建一个空的GameObject名称,它是EventManager。

第2步

创建C#scrip并将其命名为Eventmanager。

在EventManager.cs中编写以下代

  public class EventManager:MonoBehaviour {public delegate void OnRest(); //声明代表公共静态事件OnRest onReset; //创建一个事件public delegate void OnReStart(); //声明代表公共静态事件OnReStart onReStart; //创建一个事件public static void RaiseOnReset(){if(onReset!= null){onReset();
                           

上一篇:今年夏天推出的新DS Lite颜色
下一篇:蒙特利尔游戏峰会以小泉,吹,史密斯为特色