乐知付加密服务平台

如果你有资源, 平台可以帮你实现内容变现, 无需搭建知识付费服务平台。

点击访问官方网站 https://lezhifu.cc

扫码关注公众号 乐知付加密服务平台-微信公众号
Unity中GameObject/Component/Transform的区别 | chenzuoli's blog

Unity中GameObject/Component/Transform的区别

大家好我是Lee,今天下班回家,学习一下Unity中的各组件类直接的关系,今天看看GameObject Component Transform直接的关系和区别。

我是Unity初学者,面对3D编程,还是有些陌生,但是Unity开发使用的脚本语言是C#,刚好上半年在公司学过这个语言,这会用上了,所以大家不要觉得现在学的东西没有用,说不定哪天就用上了,珍惜当下的学习机会就行了。

好了,说正题。

我们在开发Unity游戏的时候,需要先创建scene,默认scene中有世界坐标系,摄像头,太阳这三个组件,剩下的就需要我们自己去创建了,比如地面,房屋,任务等组件。

组件的定义

组件 是在游戏对象(Game Object)中的实现某些功能的集合。
无论是模型、 GUI、灯光还是摄像机,所有游戏对象本质上都是一个空对象挂载了不同类别的组件,从而让该游戏对象拥有不同的功能。

游戏对象的定义

游戏对象(GameObject)上可以包含多个组件(Component),拥有组件的组合特性,组件有什么特性,游戏对象就有什么特性。

脚本在Unity中也是一种组件。 所以可以将脚本赋予游戏对象。

Transform的定义

Transform是属性的集合,对于每个组件,有不同的属性(长宽高等等)和不同的方法(功能)。

我们看下源代码怎么实现的吧:
1.Transform继承了Component

1
2
3
4
5
6
7
8
9
/// <summary>
/// <para>Position, rotation and scale of an object.</para>
/// </summary>
[RequiredByNativeCode]
[NativeHeader ("Runtime/Transform/ScriptBindings/TransformScriptBindings.h")]
[NativeHeader ("Runtime/Transform/Transform.h")]
[NativeHeader ("Configuration/UnityConfigure.h")]
public class Transform : Component, IEnumerable
{}

2.GameObject继承了UnityEngine.Object

1
2
3
4
5
6
7
8
/// <summary>
/// <para>Base class for all entities in Unity Scenes.</para>
/// </summary>
[ExcludeFromPreset]
[UsedByNativeCode]
[NativeHeader ("Runtime/Export/Scripting/GameObject.bindings.h")]
public sealed class GameObject : UnityEngine.Object
{}

GameObject可以添加不同的Component:
gameobject

3.Component继承了UnityEngine.Object

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/// <summary>
/// <para>Base class for everything attached to GameObjects.</para>
/// </summary>
[NativeClass ("Unity::Component")]
[RequiredByNativeCode]
[NativeHeader ("Runtime/Export/Scripting/Component.bindings.h")]
public class Component : UnityEngine.Object
{
/// <summary>
/// <para>The Transform attached to this GameObject.</para>
/// </summary>
public extern Transform transform {
[MethodImpl (MethodImplOptions.InternalCall)]
[FreeFunction ("GetTransform", HasExplicitThis = true, ThrowsException = true)]
get;
}

/// <summary>
/// <para>The game object this component is attached to. A component is always attached to a game object.</para>
/// </summary>
public extern GameObject gameObject {
[MethodImpl (MethodImplOptions.InternalCall)]
[FreeFunction ("GetGameObject", HasExplicitThis = true)]
get;
}

它有一个Transform和GameObject属性。

好了,今天就看到这里,下期再见。

我是chenzuoli,我爱学习。

-------------本文结束感谢您的阅读-------------