Delegates, Events and Singletons with Unity3D – C#
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Delegates, Events and Singletons with Unity3D – C#,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3032字,纯文字阅读大概需要5分钟。
内容图文
![Delegates, Events and Singletons with Unity3D – C#](/upload/InfoBanner/zyjiaocheng/1050/4097255db9644d3c8fb78311fa4296c1.jpg)
在这里我将演示如何创建代表、 事件和Singletons 在一起工作。本教程为 Unity3D 编写。
我想知道这为什么?
作为一个年轻的自学程序员,我经常发现自己写tons 和布尔的语句,以确定是否发生了某些event 或action 。我听这些events 事件通过Coroutines 协同程序和其他方法来返回值。如果你发现自己这做得一样好,停下来 !
欢迎光临Events事件......
介绍
最近,我一直要改善我的 C# 编程技能,以及发现自己缺乏知识,了解Events事件基础。所以,虽然通过许多教程在 MSDN 和其他博客上看着,发现了大多数的教程要复杂和茂盛用令人费解的代码不相关的核心概念。我不希望这发生在你身上 !
这样说过我会试着解释Events 事件和在项目中如何使用它们的基础......
Singleton?
如果你不知道什么Singleton,。单身人士是不能 — 或重复的脚本。嗯......。
我推荐使用Singleton不需要复制多次在game中的东西。 如Inventory System库存系统。 通常情况下,玩家只需要一个库存,我们只想要一个。 当我们调用它时,我们想要确保它不会得到复制。
有许多方法可以创建Singletons,但这种方法经常使用,因为它很简单......
// This class sits on my camera and handles all the clicks I send with a Raycast public class Clicker : MonoBehaviour { // Singleton private static Clicker instance; // Construct private Clicker() {} // Instance public static Clicker Instance { get { if (instance == null) instance = GameObject.FindObjectOfType(typeof(Clicker)) as Clicker; return instance; } // Do something here, make sure this is public so we can access it through our Instance. public void DoSomething() { } ...
在这里,‘Clicker’ ‘类附加到我的Camera上。 此类处理点击 在3D 空间Raycast 的 。
若要从另一个脚本访问我 ‘DoSomething’ 的方法,我只能...
Clicker.Instance.DoSomething();
这消除了需要使用大量的静态方法和变量的调用,再加上只给了我们一个实例 !
委托和事件?
委托可以看作是对对象的引用指针。当它被调用时,它会通知所有引用该委托的方法。
所以,第一件事......
定义一个委托和获取调用时它触发的方法......
public class Clicker : MonoBehaviour { // Event Handler public delegate void OnClickEvent(GameObject g); public event OnClickEvent OnClick;
代理调用 ‘OnClickEvent‘ 通过一个‘GameObject’,我们可以使用来定义它来自什么游戏物体。 然后,我们定义了 ‘event’ OnClick 获取调用时调用的委托。
现在,在相同的脚本中,我们需要调用委托,并将其传递我们的游戏对象。
通过 Raycast......
public class Clicker : MonoBehaviour { // Event Handler public delegate void OnClickEvent(GameObject g); public event OnClickEvent OnClick; // Handle our Ray and Hit void Update () { // Ray Ray ray = Camera.mainCamera.ScreenPointToRay(Input.mousePosition); // Raycast Hit RaycastHit hit; if (Physics.Raycast(ray, out hit, 100)) { // If we click it if (Input.GetMouseButtonUp(0)) { // Notify of the event! OnClick(hit.transform.gameObject); } } } }
如你所见的,如果Ray 已联系 ,我们左鼠标单击对象,我们调用该事件并传递游戏物体。
我们必须做的最后一件事是从我们正在听call 的其他脚本引用委托。
为此我创建了一个名为 GoldPile 类。
public class GoldPile : MonoBehaviour { // Awake void Awake () { // Start the event listener Clicker.Instance.OnClick += OnClick; } // The event that gets called void OnClick(GameObject g) { // If g is THIS gameObject if (g == gameObject) { Debug.Log("Hide and give us money!"); // Hide gameObject.active = false; } } }
在我们的 Awake() 方法中,我们定义我们listening 的事件并分配一个获取调用 OnClick 的本地方法。 ‘OnClick‘ 不需要我们委托方法相同,但它可以。
注: 在以前的帖子我们添加一个单例到我们Clicker 类。 这使我们能够使用 Clicker.Instance
正如你所看到的我们还创建了传递我们点击我们游戏的 OnClick() 方法。
注: 如果您必须使用 if (g == gameObject),否则,它将隐藏该方法以及场景中的其他实例... 这就是为什么我们通过GameObject 供参考 !
现在你有空,如果需要将此方法添加到您的游戏中的任何其他脚本。
别忘了定义的方法,并在你的 Awake() 委派。
Yes, best way is to use OnEnable/OnDisable:
void OnEnable
{
Clicker.Instance.OnClick += OnClick;
}
void OnDisable
{
Clicker.Instance.OnClick -= OnClick;
}
原文:http://blog.csdn.net/u010019717/article/details/44274489
内容总结
以上是互联网集市为您收集整理的Delegates, Events and Singletons with Unity3D – C#全部内容,希望文章能够帮你解决Delegates, Events and Singletons with Unity3D – C#所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。