Unity3D实践系列11, 组件的添加和访问
组件 系列 实践 添加 访问 11 Unity3D
2023-09-11 14:16:51 时间
当把一个脚本附加到一个GameObject上的时候,这个GameObject就有了脚本组件。
通过GameObject的属性获取组件
比如如下:
[RequireComponent(typeof(Rigidbody))]public class PhysicCtrl : MonoBehaviour{public Rigidbody rb;void Start(){rb = gameObject.rigidbody;rb.AddForce(0,0,-10,ForceMode.Impulse);}}
以上,rigidbody是GameObject的属性,通过GameObject的属性获取了组件。
如果我们自定义一个脚本:
public class CollisionAndTrigger : MonoBehaviour{}
现在,在PhysicCtrl脚本中引用CollisionAndTrigger脚本组件。
[RequireComponent(typeof(Rigidbody))]public class PhysicCtrl : MonoBehaviour{public Rigidbody rb;CollisionAndTrigger cat;void Start(){rb = gameObject.rigidbody;rb.AddForce(0,0,-10,ForceMode.Impulse);cat=gameObject.}}
以上,当在Start方法中,gameObject后点不出来自定义的脚本组件。这是因为CollisionAndTrigger脚本组件不是Unity3D自带的,是我们自定义的。
通过GameObject的泛型实例方法获取组件
点不出来没关系,Unity3D为我们提供了GetComponent<r>泛型方法来获取自定义的组件。
[RequireComponent(typeof(Rigidbody))]public class PhysicCtrl : MonoBehaviour{public Rigidbody rb;public CollisionAndTrigger cat;void Start(){rb = gameObject.rigidbody;rb.AddForce(0,0,-10,ForceMode.Impulse);cat=gameObject.GetComponent<CollisionAndTrigger>();}}
类似的方法还包括:
gameObject.GetComponentInParent<PhysicCtrl>
gameObject.GetComponentInChild<PhysicCtrl>
GameObject还有增加组件的实例方法:
gameObject.AddComponent<PhysicCtrl>();
在有些时候,还可以使用GetComponent的这个非泛型实例方法。
public class ExampleClass : MonoBehaviour{public HigerJoint hinge;void Example(){hinge = gameObject.GetComponent("HingerJoint") as HingerJoint;hinge.useSpring = false;}}
通过GameObject的静态方法
GameObject.Find("Wall").GetComponent<PhysicCtrl>();
例子
public class SetComponent : MonoBehaviour{//如果在声明变量的时候初始化,需要Reset一下才能看到public PhysicCtrl[] PSCs;//一般放在Awake方法中初始化变量void Awake(){PSCs = new PhysicCtrl[3];}void OnEnable(){PSCs[0] = gameObject.GetComponentInParent<PhysicCtrl>();PSCs[1] = gameObject.GetComponnetInChildren<PhysicCtrl>();PSCs[2] = GameObject.Find("Wall").GetComponent<PhysicCtrl>();}void Start(){foreach(PhysicCtrl psc in PSCs){psc.addImpulse();}}}
脚本初始化的时候经历了3个过程,分别是Awake,OnEnable和Start方法。一般放在Awake方法中初始化变量,在OnEnable方法中实例化变量对象。
参考资料:极客学院听课笔记
相关文章
- [转] 深入理解React 组件状态(State)
- 第二十三节: EF性能篇(三)之基于开源组件 Z.EntityFrameWork.Plus.EF6解决EF性能问题 第四节:一些指令总结 定时调度系列之Quartz.Net详解 第十七节:易混淆的概念(静态和非静态、拆箱和装箱) 那些年我们一起追逐的多线程(Thread、ThreadPool、委托异步调用、Task/TaskFactory、Parallerl、async和await)
- vue2.0 自定义 饼状图 (Echarts)组件
- [转]JS组件系列——表格组件神器:bootstrap table
- 26复杂类型比较,使用Compare .NET objects组件
- 《iOS组件与框架——iOS SDK高级特性剖析》——第6章,第6.6节练习
- 《iOS组件与框架——iOS SDK高级特性剖析》——第8章,第8.3节UIDocument简介
- 微信开源组件WCDB漫谈及Demo
- Delphi BitBtn组件
- 《Effective Debugging:软件和系统调试的66个有效方法》——第15条:查看第三方组件的源代码,以了解其用法
- AI for Science系列(二):国内首个基于AI框架的CFD工具组件!赛桨v1.0 Beta API介绍以及典型案例分享!
- SwiftUI iOS 开源组件之FlashCard旋转卡片slider(教程含源码)
- macOS SwiftUI 组件之选择器Picker组件(教程含源码)
- flutter系列之:Material中的3D组件Card
- [js高手之路] vue系列教程 - 组件定义与使用上部(7)
- 【Unity3D-UGUI系列】(五)RawImage 显示纹理组件详解
- 【Unity3D-UGUI系列】(三)Button 按钮组件详解
- 欧洲最大双面发电光伏项目全部采用英利组件
- freemarker写select组件报错总结(六)
- Android自己定义组件系列【4】——自己定义ViewGroup实现双側滑动