博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3D实践系列11, 组件的添加和访问
阅读量:5873 次
发布时间:2019-06-19

本文共 2038 字,大约阅读时间需要 6 分钟。

 

当把一个脚本附加到一个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
();
}
}

 

类似的方法还包括:

 

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
();
PSCs[1] = gameObject.GetComponnetInChildren
();
PSCs[2] = GameObject.Find("Wall").GetComponent
();
}
 
void Start(){
foreach(PhysicCtrl psc in PSCs){
psc.addImpulse();
}
}
}
 
 

 

脚本初始化的时候经历了3个过程,分别是Awake,OnEnable和Start方法。一般放在Awake方法中初始化变量,在OnEnable方法中实例化变量对象。

 

参考资料:极客学院听课笔记

转载地址:http://ckhnx.baihongyu.com/

你可能感兴趣的文章
1489 蜥蜴和地下室
查看>>
Linux服务-bind
查看>>
SpringMVC系列(十六)Spring MVC与Struts2的对比
查看>>
20061008: IntelliJ Idea 6
查看>>
Android IOS WebRTC 音视频开发总结(四一)-- QQ和webrtc打洞能力pk
查看>>
Immediately register your GHD frizzy hair straightener concerning the GHD web page
查看>>
清除Xcode缓存
查看>>
Sharepoint2013:在页面上显示错误信息
查看>>
8-2测试总结
查看>>
SQLiteDatabase中query、insert、update、delete方法参数说明
查看>>
将军令
查看>>
多线程实现端口扫描
查看>>
java 类的应用
查看>>
koa cookie使用
查看>>
shutdown immediate ,无法关闭数据库的解决方案
查看>>
CentOS7系统上的GPSTK源码安装
查看>>
三种样式表
查看>>
Eclipse 常用快捷键(动画讲解)
查看>>
python pandas 数据处理
查看>>
[Learn AF3]第七章 App framework组件之Popup
查看>>