本文基于我现有的理解,难免有不合理和错误之处。
联系是一个哲学概念:事物内部矛盾双方和事物之间所发生的关系,事物的联系是普遍存在的、多种多样的。
联系在计算机编程中也是一个非常重要的部分。简单的理解就是类之间的联系,对象之间的联系。设计模式中的类图就是描述类之间的联系的,按耦合强度递增有:依赖、关联、聚合、组合、继承、实现。
本文将专门讲述unity3d中的联系。
unity3d基于一种entity framework的结构,程序结构较松散。物体之间的联系可以通过自己构造代码用传统面向对象的手法建立关系,也可以通过unity3d或者C#特有的方式建立关系。本文专注于后者。
1.使用GameObject.Find、GameObject.FindWithTag、Object.FindObjectOfType。
解释:unity3d的场景就是一棵树,哦不,是一片森林。在这片森林中,你可以通过其自身的api去寻找父节点、子节点。一切都是已经构建好的。有时候你并没有多少依据,比如你随便查找一个具有xx类名的Component挂接的某个GameObject或者单纯某个名字的GameObject。这个时候的查找其实就是遍历了。这是最慢的。
明白下面四句话的含义:
hand = GameObject.Find("Hand");
hand = GameObject.Find("/Hand");
hand = GameObject.Find("/Monster/Arm/Hand");
hand = GameObject.Find("Monster/Arm/Hand");
2.依靠碰撞系统,OnTriggerEnter。
3.发送消息。SendMessageUpwards。
4.扩展unity3d的api(如MonoBehavior)来统一接口。
5.在构建prefab的时候建立关系,只应用于MonoBehavior。
解释:
6.Awake或Start的时候去查找父节点或子节点。
7.通过反射看那个类是否具有自定义的Attribute,决定是否进行某步操作。
利用C#自己的那套metadata管理机制。GetType->FindMembers->GetCustomAttributes->。。。
8。。。未完