Unity3d--学习笔记之GameObject和Transform的区别

Unity3d–学习笔记之GameObject和Transform的区别

对Transform的困惑

查找游戏对象的方法有transform.Find()和GameObject.Find(),但为什么transform是一个表示位置属性的组件却可以find游戏对象呢?

GameObject

Gameobject是一个类型,所有的游戏物件都是这个类型的对象。
gameobject是一个对象, 就跟java里面的this一样, 指的是这个脚本所附着的游戏物件

Transform

Transform是一个类,用来描述物体的位置,大小,旋转等等信息。
transform是Transform类的对象,依附于每一个物体。也是当前游戏对象的一个组件(每个对象都会有这个组件)

transform与gameObject

  1. 二者的含义
    transform : 当前游戏对象的transform组件
    gameobject :当前游戏对象的实例

  2. 两者的联系和区别

        * 在unity中每个游戏对象都是一个gameobject. monodevelop中的gameobject就代表着本脚本所依附的对象.
    

    每个gameobject都包含各种各样的组件,但从这点可以看出transform是gameobject的一个组件,控制着gameobject的位置,缩放,和旋转,而且每个gameobject都有而且必有一个transform组件
    * gameobject.find用来获取场景中那个我们需要查找的对象(object). 而transform.find方法则是获取当前对象的子对象下我们需要获取的目标对象位置信息。

        * 注意:  在update() 中尽量不使用find() 方法,影响性能,下面详细说。
    
  3. gameobject.transform与transform.gameobject

        *  gameobject.transform,是获取当前游戏对象的transform组件.
            所以在start函数中 gameobject.transform 和this.transform,指向的都是同一个对象。即:gameobject.transform == this.transform== transform
    
        * transform.gameobject:可以这么理解为:获取当前transform组件所在的gameobect
           所以在start()函数中transform.gameobject == this.gameobject == gameobect
    

    所以他们可以无限的引用下去

意思就是。gameobject.transform == this.transform == gameobject.transform.gameobject.tranform == tranform.gameobect.transform

GameObject.Find

通过名字或路径查找游戏对象。

GameObject.Find(“GameObject”);

GameObject.Find("GameObject/ChildGameObject);

使用规范:

  1. 无法查找隐藏对象隐藏对象包括查找路径的任何一个父节点隐藏(active=false)
  2. 如果查找不在最上层,建议合理使用路径查找,路径查找是把双刃剑
    优点1:解决查找中可能出现的重名问题。
    优点2:如果有完全的路径,减少查找范围,减少查找时间。
    缺点: 路径或结构调整后,容易影响到程序中的查找,需要重新定位查找路径。
  3. 如果路径查找中的任何一个父节点active=false,这个对象都将查找不到。
  4. 使用方便但效率低下。
    此查找相当于递归遍历查找,虽使用方便但效率堪忧,建议在Start()函数中查找对象并保存引用,切忌在Update()中动态查找。

Transform.Find

通过名字或路径查找当前游戏对象的子对象。

  1. 可以查找隐藏对象
  2. 支持路径查找
  3. 查找隐藏对象的前提是transform所在的根节点必须可见,即active=true

GameObject root = GameObject.Find(“root”);

root.SetActive(false); // 根节点为空

// 总是查找失败

root.transform.Find(“root/AnyChildObjectName”);

实际开发:
实际开发中会将功能预制体放到一个可见的GameObject目录下,将这个GameObject目录作为查找根节点,下面的所有对象(隐藏、非隐藏)都可以查找到。

你可以把”map”节点放在一个active = true的MapRoot上,无论是关闭 或者 显示 代码中写起来都很方便。 假如你的map节点就是顶级节点,那么它一旦天生acive = false ,那么你将无法得到它的对象,更无法设置它的属性了。

GameObject root = GameObject.Find(“MapRoot”);

GameObject map = root.transform.Find(“map”).gameObject;

map.SetActive(true);

其他查找方法

GameObject.FindGameObjectsWithTag(“tag”)
GameObject.FindWithTag(“tag”)

根据一个标记来获取游戏对象,返回一个 或者 一个数组

参考链接:

link.
link.

### 回答1: GameObjectUnity中最基本的对象,它代表了场景中的一个实体,可以包含各种组件,如Transform、Mesh Renderer、Collider等。GameObject可以通过代码或编辑器创建、修改和销毁。 TransformGameObject的一个组件,它包含了游戏对象的位置、旋转和缩放信息。通过Transform组件,我们可以在游戏运行时动态地修改游戏对象的位置、旋转和缩放等属性,实现游戏中的移动、旋转和缩放效果。 ### 回答2: Unity中的GameObjectTransform是两个非常重要的概念,它们是构建游戏场景的基本组成部分。 首先,GameObject是游戏中的基本对象,所有游戏中的元素都是以GameObject的形式存在的。它是一个空的容器,可以添加各种组件以实现不同的功能。例如,一个GameObject可以是玩家,可以添加控制器组件、动画组件、碰撞器组件、声音组件等,以实现玩家的移动、攻击、物理碰撞和音效等功能。 在GameObject的基础上,Transform是一个用于控制GameObject位置、旋转和缩放的组件。每个GameObject都有一个Transform组件,它定义了GameObject在场景中的位置、方向和大小。使用Transform可以让我们改变GameObject的位置、旋转和缩放,实现游戏中的各种动态效果。 除此之外,Transform还可以作为父子关系的重要手段。当一个GameObject作为另一个GameObject的子物体时,它的Transform组件可以实现相对于父GameObject的位置、旋转和缩放。这种父子关系可以使我们在游戏场景中更加方便地管理各种元素,以及实现游戏中的各种逻辑和效果。 总的来说,GameObjectTransformUnity中非常重要和基础的概念,掌握它们的使用方法和相关技巧,可以让我们更加高效和精确地构建游戏场景,实现更加丰富的游戏体验。 ### 回答3: Unity中的GameObjectTransform是游戏对象的两个重要组成部分。GameObjectUnity中最基本和最重要的对象,是所有场景中任何物体的父类。Transform则是GameObject的一个组件,它控制GameObject在空间中的位置、旋转和缩放。 GameObject表示场景中的实体,包括人物、怪物、场景等等。每个GameObject都有一个名称和一个唯一的标识符,可以在代码中通过标识符或名称来访问和操作GameObject。除此之外,GameObject还可以包含其他组件,例如脚本、碰撞器、渲染器等等。 Transform组件则是控制GameObject在三维空间中的位置、旋转和缩放的重要组件。它包含了三个重要属性:Position、Rotation和Scale,分别控制对象的位置、旋转和缩放。在代码中,我们可以通过Transform组件的属性来访问和控制当前GameObject的位置、旋转和缩放等属性。 Unity中的GameObjectTransform在游戏开发中非常重要。在创建游戏场景和实体时,我们需要创建和处理GameObject对象,并通过Transform组件来控制它们在场景中的位置和状态。在编写游戏逻辑代码时,我们需要通过GameObject对象和Transform组件来访问和操作游戏实体。因此,了解和掌握GameObjectTransform是游戏开发中必不可少的技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值