Unity核心概率④:MonoBehavior

一、定义

MonoBehavior是 Unity 中所有脚本的基类。你编写的每一个 C# 脚本,只要需要挂载到游戏对象(GameObject)上并参与游戏逻辑,都必须直接或间接地继承自这个类。

二、重要成员GameObject

1.获取依附的GameObject。

cs 复制代码
print(this.GameObject.name);

2.获取依附的GameObject的位置信息,得到对象的位置信息。

cs 复制代码
print(this.transform.position);//打印该游戏对象在世界坐标系(World Space)中的位置坐标。

print(this.transform.eulerAngles);//打印该游戏对象在世界坐标系中的旋转角度,以欧拉角(Euler Angles)的形式表示。

print(this.transform.lossyScale);//打印该游戏对象在世界坐标系中的全局缩放比例。

3.获取脚本是否激活。

复制代码
this.enabled = true;
this.enabled = false;

三、重要方法

1.得到依附对象上挂载的其它脚本

①得到自己挂载的单个脚本

根据脚本名获取:如果获取失败,就是没有对应的脚本,会默认返回null。

cs 复制代码
//尝试获取当前游戏对象上名为 "Test" 的组件
//并将其转换为 Test 类型后赋值给变量 t
Test t = this.GetComponent("Test") as Test;
print(t);//在 Unity 控制台打印变量 t 的信息。

根据Type获取:

cs 复制代码
// 尝试获取当前对象上名为 "Test" 的组件
// 使用 as 运算符将结果安全转换为 Test 类型
t = this.GetComponent(typeof("Test")) as Test;

// 打印查找结果,如果找到则显示组件信息,未找到则显示 null
print(t);

根据泛型获取,建议使用泛型获取,因为不用二次转换。

cs 复制代码
// 获取当前物体上第一个 Test 类型的组件
t = this.GetComponent<Test>();

// 打印获取结果:如果找到则显示组件信息,未找到则显示 null
print(t);

②得到自己挂载的多个脚本

cs 复制代码
// 获取当前物体上所有Test组件,返回一个新数组
Test[] array = this.GetComponents<Test>();
print(array.Length);

// 创建一个空列表
List<Test> list = new List<Test>();
// 将找到的所有Test组件添加到这个列表中
this.GetComponents<Test>(list);
print(list.Count);

③得到子对象挂载的脚本(它默认也会找自己身上是否挂载该脚本)

子对象挂载脚本单个:

cs 复制代码
// 在当前对象及其所有子对象(包括未激活的)中查找第一个找到的 Test 组件
t = this.GetComponentInChildren<Test>(true);
// 打印查找结果,如果找到则显示组件信息,未找到则显示 null
print(t);

子对象挂载脚本多个:

cs 复制代码
// 获取当前对象及其所有子对象(包括未激活的)中的全部Test组件,返回一个数组
Test[] Its = this.GetComponentsInChildren<Test>(true);

// 打印找到的Test组件数量
print(Its.Length);
cs 复制代码
// 创建一个空的Test类型列表list
List<Test> list = new List<Test>();

// 在当前对象及其所有层级子对象中查找所有Test组件(包含未激活的)
// 并将结果添加到list列表中(true参数表示包含未激活对象)
this.GetComponentsInChildren<Test>(true, list);

// 打印列表中找到的Test组件总数
print(list.Count);

当是false时,如果子对象失活,不会去找这个对象上是否有某个脚本。当是true时,即使子对象失活也会查找。

④得到父对象挂载的脚本(它默认也会找自己身上是否挂载该脚本)

cs 复制代码
// 在当前物体及其所有父级物体中查找第一个 Test 类型的组件
// 从自身开始向上搜索,找到第一个匹配的组件就立即返回
t = this.GetComponentInParent<Test>();

// 打印查找结果:如果找到则显示组件信息,未找到则显示 null
print(t);
cs 复制代码
// 在当前物体及其所有父级物体中查找所有 Test 类型的组件
// 返回一个包含所有找到的组件的数组(包括自身和所有层级父对象)
Test[] Its = this.GetComponentsInParent<Test>();

// 打印找到的 Test 组件总数(数组的长度)
print(Its.Length);

⑤尝试获取脚本

cs 复制代码
// 尝试获取Test组件,如果成功则将组件赋值给变量t,并返回true
// 如果失败则返回false,变量t为null
if(this.TryGetComponent<Test>(out Test t))
{
    // 如果进入这个代码块,说明组件获取成功
    print("找到组件:" + t.name);
    
}
相关推荐
Chester_19998 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲9 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员9 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导9 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan9 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
m0_6952514910 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說11 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
可乐鸡翅yeah_12 小时前
hls.js 内存泄漏实战排查,直播 M3U8 长时间播放异常定位方案
开发语言·javascript·python·django·ecmascript·m3u8·m3u8在线
2601_9622035112 小时前
Java进阶07集合(续)
java·开发语言
郑州光合科技余经理12 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php