Unity 常用的类

本文详细解释了Unity中GameObject、Component、Transform等核心类的作用、属性和方法,以及脚本如何利用这些类进行组件查找和对象操作,强调了理解和查阅文档的重要性。
摘要由CSDN通过智能技术生成

内容

Object
GameObject
Component
Texture
Mesh
Materrial
Transform
Rigidbody
ParticleSystem
Behaviour
Collider
Renderer
MonoBehaviour
Camera
Animator
AudioSource
Light
Animation
AudioListener
Terrain
我们写的脚本

上图是 Unity 的核心类和我们写的脚本。正所谓在其位,谋其政,知道我们的脚本所在的位置,也就知道脚本能做什么了。子类继承父类,因此子类也拥有了父类的能力。这个图很像族谱,直系的父类的方法(非私有)脚本是可以直接使用。脚本 => MonoBehaviour => Behaviour => Component => Object,所以这些类的功能脚本是已经继承了,了解这些类就很有必要了。

GameObject 是游戏中的游戏物体,一个游戏物体可以挂载多个组件的,组件也就是Component的后代,那么图中80%都是Component。

代码不开源,要想知道类的信息就需要用到 学习必备手册。输入想要查询的类,就有对应的介绍、字段、方法等。

Component

属性:

gameObject、tag、transform。

组件必备的3个属性,组件挂载到游戏物体(gameObject)上才能生效,而游戏物体必有名称(tag)以及所在游戏中的状态——位置缩放旋转(transform),所以这三个属性合情合理,没啥好说的。我猜这是在挂载的时候给这三个变量初始化的。

方法:

GetComonent()、GetComponents()、GetComponentInChildren()…

MeshRenderer meshRenderer = this.GetComponent<MeshRenderer>();
meshRenderer.material.color = Color.red;

Comoponent() 方法中主要的功能是提供了查找组件的功能,一个游戏物体可以挂载多个组件,多个组件之间需要协作,就必定要先找到对应的组件。

示例代码通过获取游戏物体的 MeshRenderer ,从而来把对应的材质颜色设置为红色,其中 MeshRenderer泛型是指定需要的查找的组件类型,默认返回匹配到的第一个,如果需要查找多个可以使用 GetComponents()。

var components = this.GetComponents<Component>();
foreach (var component in components){
	Debug.Log(component);
}

GetComponentInChildren() 方法是获取子游戏物体的指定组件。如图:

在这里插入图片描述
组件 Cube 的子游戏物体就有 Cube(1)Cube(2)

同理还有 GetComponentInParent() 等方法都是类似的查找组件的功能,找指定类型组件,从父级物体找,从子级物体找,找单个,找多个。

除查找外,其他的方法比较少用或不建议用。所以记住这个类是有查找组件功能的方法就行了。

Transform

Transform 主要管理游戏物体的位置、旋转、缩放,每个游戏物体都有这个组件。

该类实现了 IEnumerable 接口,所以可以直接遍历该组件对象,其中的每一项是子游戏物体的变换组件。如下所示:

foreach (Transform child in transform) {
	child.position += Vector3.up * 10.0f;
}

属性:

  • position 和 localPosition: 世界坐标系位置 和 相对于父级的位置。
  • rotation 和 localRotation:旋转角度。
  • localScale:缩放比例。父物体的缩放比,父级缩放是2,localScale为3,此时缩放为模型大小的6倍。
  • lossyScale:缩放比例。当前物体与模型的缩放比例。只有get该属性,无法 set,只能通过 localScale 去set 缩放比例。

在编译器中的 transform 位置、旋转、缩放都是相对相对于父物体的。

方法:

  • Translate():向某个方向移动指定距离距离。
// 向自身Z轴移动1个单位
this.transform.Translate(0, 0, 1);
// 向世界Z轴移动1个单位
this.transform.Translate(0, 0, 1, Space.World);
  • Rotate():向某个方向旋转指定角度。
// 向自身Z轴旋转1度
this.transform.Translate(0, 0, 1);
// 向世界Z轴旋转1度
this.transform.Translate(0, 0, 1, Space.World);
  • RotateAround():围绕某个点,某个方向,旋转多少角度。
this.tranform.RotateAround(Vector3.zero, Vector3.up, 1);

除了控制位置、旋转、缩放外,还可以操作其父级根级子级的相关方法,因为旋转缩放位移有相对于父级的概念。

  • setParent()、root属性、parent属性,childCount属性,Find()等。
// Find() 取子物体变换组件  只取到子级,孙级用递归去查,或者下面这个
Transform childTransform = this.transform.Find("子物体名称");
// 结构不会变的时候用,一般不用这个
Transform childTransform = this.transform.Find("子物体名称/孙物体名称");

// 遍历子变换组件
int count = this.transform.childCount;
for(int i = 0; i < count; i++) {
    Transform childTransX = this.transform.GetChild(i);
}

总之这个类两个主要功能:①控制位置、旋转、缩放;②查找变换组件的功能。

GameObject

场景中的所有游戏物体都是 GameObject。

属性:

  • activeInHierarchy:场景中的游戏对象是否激活(实际激活状态)。
  • activeSelf:游戏对象局部激活状态(面板中的状态)。

因为如果父级不激活,子级局部激活,那么在场景中也是不激活的,所以会有2个状态出现来控制。

方法:

  • SetActive():设置物体的启用/禁用;
// 创建一个游戏物体
GameObject lightGo = new GameObject();
// 给物体创建光,不能自己 new Light(), 设置不到 GameObject 里面
Light light = lightGo.AddComponent<Light>();
// 设置光的属性
light.color = Color.red;
ligh.type= LightType.Point;
  • GetComponent() 系列:和 Component 的是一样的,Component 是组件可以找组件,现在是物体的引用也可以找组件了,当然组件也可以通过属性 gameObject 得到游戏物体。
  • Find():在场景中,根据物体名称查找游戏物体(慎用,物体多时如大海捞针,耗性能)。
  • FindGameObjectsWithTag():根据标签查找物体。
  • FindWithTag():获取使用标签的物体(单个)。

Object

Unity 所有对象的基类。属性 name 为游戏物体的名称。

  • Destroy():删除一个游戏对象、组件、资源。参数是 Object。
  • DontDestroyOnload():跨场景之前调用,场景转换后保留指定的游戏物体,不会被清除。
  • FindObjectOfType()、FindObjectsOfType():根据类型找激活的加载对象。

总结

核心类之间的关系,四个非常常用的类,以及类对应常用的属性和方法。不知道怎么用的时候一定要去看文档,不只是这些类,其他类也要学会自己看文档。

  • 49
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一款非常流行的游戏开发引擎,它提供了许多常用的设计模式,以帮助开发者更好地组织和管理游戏代码。下面是Unity常用的几种设计模式: 1. 单例模式:Unity的许多管理或者工具通常只需要一个实例,使用单例模式可以确保只有一个实例被创建,并且全局可访问。 2. 观察者模式:游戏有很多时候需要监听某些事件的发生,并根据事件触发相应的操作。观察者模式可以实现一个事件的发布和订阅机制,方便不同组件之间进行通信。 3. 工厂模式:在游戏,有时候需要根据不同的条件来创建不同的对象。使用工厂模式可以将对象的创建从具体解耦出来,使得代码更加可维护和扩展。 4. 策略模式:游戏有很多时候需要根据不同的情况来执行不同的算法或者逻辑。使用策略模式可以将不同的算法封装成不同的策略,然后在运行时根据需要动态选择不同的策略。 5. 组件模式:Unity的游戏对象是由不同的组件组成的,每个组件负责不同的功能。使用组件模式可以将游戏对象设计成一个组件的集合,方便开发者对游戏对象进行组装和拆解。 以上是Unity常用的几种设计模式,它们可以帮助开发者更好地组织和管理代码,提高代码的可读性、可维护性和扩展性。实际开发,根据具体的需求,我们可以灵活地选择和组合使用这些设计模式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值