U3D GameObject 解读

  GameObject本身没有功能,是Unity场景里所有组件的基类,但很多时候我们需要在脚本中操作GameObject。先讲一下GameObject类包含哪些内容,其中常用的用红色标出了

 

Variables 变量
activeInHierarchyIs the GameObject active in the scene?
场景中的游戏对象是否激活?
activeSelfThe local active state of this GameObject. (Read Only)
该游戏对象的局部激活状态。(只读)
isStaticEditor only API that specifies if a game object is static.
如果一个游戏对象是静态仅在编辑器API指定。
layerThe layer the game object is in. A layer is in the range [0…31].
游戏对象所在的层,层的范围是在[0…31]之间。
sceneScene that the GameObject is part of.
场景物体。
tagThe tag of this game object.
这个游戏对象的标签。
transformThe Transform attached to this GameObject. (null if there is none attached).
附加于这个游戏对象上的变换。(如果没有则为空)
Constructors 构造器
GameObjectCreates a new game object, named name.
创建一个新的游戏物体,命名为name。
Functions 函数
AddComponentAdds a component class named /className/ to the game object.
添加一个名称为className的组件到游戏对象。
BroadcastMessageCalls the method named /methodName/ on every MonoBehaviour in this game object or any of its children.
对此游戏对象及其子对象的所有MonoBehaviour中调用名称为methodName的方法。
CompareTagIs this game object tagged with /tag/?
此游戏对象是否被标记为tag标签?
GetComponentReturns the component of Type /type/ if the game object has one attached, null if it doesn't.
如果这个游戏对象附件了一个类型为type的组件,则返回该组件,否则为空。
GetComponentInChildrenReturns the component of Type /type/ in the GameObject or any of its children using depth first search.
返回此游戏对象或者它的所有子对象上(深度优先)的类型为type的组件。
GetComponentInParentFinds component in the parent.
从父对象查找组件。
GetComponentsReturns all components of Type /type/ in the GameObject.
返回该游戏对象所有type类型的组件列表。
GetComponentsInChildrenReturns all components of Type /type/ in the GameObject or any of its children.
返回此游戏对象与其子对象所有type类型的组件。
GetComponentsInParentReturns all components of Type /type/ in the GameObject or any of its parents.
返回此游戏对象与其父对象所有type类型的组件。
SampleAnimationSamples an animation at a given time for any animated properties.
用于任何动画剪辑在给定的时间采样动画。
SendMessageCalls the method named /methodName/ on every MonoBehaviour in this game object.
在这个游戏物体上的所有MonoBehaviour上调用名称为methodName的方法。
SendMessageUpwardsCalls the method named /methodName/ on every MonoBehaviour in this game object and on every ancestor of the behaviour.
在这个游戏物体及其祖先物体的所有MonoBehaviour中调用名称为methodName的方法。
SetActiveActivates/Deactivates the GameObject.
激活/停用此游戏对象。
Static Functions 静态函数
CreatePrimitiveCreates a game object with a primitive mesh renderer and appropriate collider.
创建一个带有原型网格渲染器和适当的碰撞器的游戏对象。
FindFinds a game object by /name/ and returns it. 
找到并返回一个名字为name的游戏物体。
FindGameObjectsWithTagReturns a list of active GameObjects tagged /tag/. Returns empty array if no GameObject was found. 
返回具体tag标签的激活的游戏对象列表,如果没有找到则为空。
FindWithTagReturns one active GameObject tagged /tag/. Returns null if no GameObject was found. 
返回标记为tag的一个游戏对象,如果没有找到对象则为空。

 
下面举几个例子
 
   public static GameObject Find(string name)
    Find找到并返回一个名字为name的游戏物体,如果以name为名字的游戏物体没有被找到,则返回空.。  如果name中包含'/'字符,这个名称将被视作一个hierarchy中的路径名,比如 GameObject.Find("animals/cat")就只会查到父物体名字为animals的cat物体。. 这个函数只返回活动的游戏物体。  
   除非迫不得已,建议不要在每一帧中使用这个函数。因为其效率比较低,一般的做法是,在Awake或Start方法中通过Find找到,然后保存到成员变量中。
   注:Find查找时,只要是当前场景下的物体默认都可以查找到,而且不管是将脚本挂在那个对象上都可以查找到
    如果有多个同名对象,只能查找到一个
 
  那么如何查找active为false的物体呢?
    1、不要使用Find,直接在代码中通过public的变量关联物体。
    2、不要设置物体的active为false,先在游戏最开始时通过代码找到物体,然后通过代码设为false
    3、通过transform.Find
 
  下面例子演示怎么查找到名为Hand的GameObject物体
using UnityEngine;

using System.Collections;

 

public class ExampleClass : MonoBehaviour {

    public GameObject hand;

    void Example() {

        hand = GameObject.Find("Hand");

        hand = GameObject.Find("/Hand");

        hand = GameObject.Find("/Monster/Arm/Hand");

        hand = GameObject.Find("Monster/Arm/Hand");

    }

}

  FindWithTag用法与此类似,这里就不举例了

 

  public Component GetComponent(Type type)

  type 表示检索数组的类型

  如果这个游戏对象附件了一个类型为type的组件,则返回该组件,否则为空。

using UnityEngine;

public class GetComponentExample : MonoBehaviour
{
    void Start()
    {
        HingeJoint hinge = gameObject.GetComponent(typeof(HingeJoint)) as HingeJoint;

        if (hinge != null)
            hinge.useSpring = false;
    }
}

  

  public T GetComponent()   

using UnityEngine;

public class GetComponentGenericExample : MonoBehaviour
{
    void Start()
    {
        HingeJoint hinge = gameObject.GetComponent<HingeJoint>();

        if (hinge != null)
            hinge.useSpring = false;
    }
}

 

  public Component GetComponent(string type)

     type 表示检索数组的类型

       如果这个游戏对象附件了一个类型为type的组件,则返回该组件,否则为空。

using UnityEngine;

public class GetComponentNonPerformantExample : MonoBehaviour
{
    void Start()
    {
        HingeJoint hinge = gameObject.GetComponent("HingeJoint") as HingeJoint;

        if (hinge != null)
            hinge.useSpring = false;
    }
}

   

  当你把脚本挂在一个物体上之后,脚本中的gameObject代表该物体,例如可以通过gameObject.name来获取脚本挂载对象的名字

 
 

转载于:https://www.cnblogs.com/forever-Ys/p/10556147.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值