Unity 访问组件(三)

来源:互联网 发布:百姓网发帖软件 编辑:程序博客网 时间:2024/06/07 15:09
添加组件的方法
gameObejct.AddComponent<>(); //动态添加组件 <脚本名称>
[RequirtComponenr(typeof())] //添加组件(扩展编辑器)

方法与属性的执行效率
比较组件:
Component.tag == "XXX";
Component.CompareTag("XXX");
注: 继承自GameObject 的游戏对象和Component类的组件都有一个tag 和 CompareTag属性和方法,,,执行效率ComparTag相对更高;

Tags 标签管理类
游戏中可以通过标签来分别主角,敌人和场景,,比如射击游戏,我们需要判断子弹打到了谁,而对方有什么样的动作,,,此时我们如果用标签管理类就会方便很多
例如:
public class Tags
{
pubilc const string player = "Player";
pubilc const string mainCamera= "MainCamera";
}
此类不需要挂载到物体上,所有没有必要继承MonoBehavior ,需要被外部访问所以用 public 修饰符,用count 代替static 是防止在代码中更改标签值,
使用时直接调用,
if(this.gameObject == Tags.player) { ... } 就可以了

游戏对象的生成和销毁

GameObject.CreatePrimitive 创建基本物体
C# => static GameObject CreatePrimitive(PrimitiveType type);
PrimitiveType 是枚举类型,使用时只需"."出想创建的基础物体即可,,,
Object.Instantiate 克隆、实例,创建一个游戏物体,
C# => static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
C# => static Object Instantiate(Object original);
注:创建每个实例都比较消耗系统的内存,所以我们用完的时候,一定及时销毁

删除场景中的一个物体或组件
Object.Destroy 销毁
//Destroy()方法继承自Object ,凡是基础Object的组件物体资源都可被此方法动态删除

Object.DestroyImmediate 立即销毁

Object.DontDestroyOnLoad 加载时不销毁
//DontDestroyOnLoad ()方法用于当前场景到新场景中切换,保留被加载的物体,身上所有的组件及对应的属性信息都不会改变

MonoBehaviour.OnDestroy 当销毁 //此方法和以上三个不一样,该方法属于生命周期函数
注:销毁父级物体,自己物体自动销毁

面试易问问题:GameObject.Find()和Transform.Find()的区别
GameObject可以根据游戏物体的名称查找所有层级的游戏物体,不支持查找被禁用(未激活)物体
Transform只能查找脚本所依附的游戏对象的子物体中,并且只能查一级子物体,如查找多层需要完整路径,支持查找被禁用物体