物体组件

发布时间 2023-05-29 19:41:06作者: gatran

物体组件

1.组件的基本操作

代码类名后面跟的MonoBehaviour使脚本能够挂到物体的组件中。

组件在Inspector视图中,可以通过最下面的Add Component添加组件,通过组件点击组件名左边的勾选符号打开或关闭组件,通过组件名右边的三个点下面的Remove Component移除组件。

2.通过脚本操作组件

2.1添加组件

使用的API:AddComponent</*组件名称*/>();

示例:

using UnityEngine;

public class Test : MonoBehaviour

{

    void Start()

    {

        GameObject go = GameObject.Find("Cube/Sphere");

        go.AddComponent<Rigidbody>();

    }

}

该段代码先找出物体Sphere,运行时在该物体上添加Rigidbody组件。

2.2查找组件

2.2.1.查找单个组件

使用的API:GetComponent</*组件名称*/>()

示例:

using UnityEngine;

public class Test : MonoBehaviour

{

    void Start()

    {

        GameObject go = GameObject.Find("Cube/Sphere");

        go.GetComponent<SphereCollider>().radius = 1;

    }

}

该段代码的功能是,先查找Sphere物体,然后查找Sphere物体的SphereCollider组件,并将该组件中radios值改为1。

如果想查找该物体及其子物体的某个组件,可以将示例代码中的go.GetComponent<SphereCollider>().radius = 1;改为go.GetComponentInChildren<SphereCollider>().radius = 1;,改完之后会查找该物体及其子物体的该组件类型,找到一个后便停止,不再继续查找。

如果想查找该物体及其父物体的某个组件,可以将示例代码中的go.GetComponent<SphereCollider>().radius = 1;改为go.GetComponentInParent<SphereCollider>().radius = 1;改完之后会查找该物体及其父物体的该组件类型,找到一个后便停止,不再继续查找。

2.2.2.查找多个同类型的组件

使用的API:GetComponents<AudioSource>();

示例:

using UnityEngine;

public class Test : MonoBehaviour

{

    void Start()

    {

        GameObject go = GameObject.Find("Cube/Sphere");

        SphereCollider[] sphereColliders= go.GetComponents<SphereCollider>();

        Debug.Log("查找到多少个:"+sphereColliders.Length);

    }

}

这段代码的功能是,先找到Sphere物体,找出物体里所有SphereCollider组件,将找到的组件放入数组SphereCollider中,并通过控制台打印数组的长度。

如果想查找该物体及其子物体的某个组件,可以将示例代码中的SphereCollider[] sphereColliders= go.GetComponents<SphereCollider>();改为SphereCollider[] sphereColliders= go.GetComponentsInChildren<SphereCollider>();改完之后会查找该物体及其子物体的所有该组件类型。

如果想查找该物体及其父物体的某个组件,可以将示例代码中的SphereCollider[] sphereColliders= go.GetComponents<SphereCollider>();改为SphereCollider[] sphereColliders = go.GetComponentsInParent<SphereCollider>();改完之后会查找该物体及其父物体的所有该组件类型。

3.删除组件

使用的API:Destroy(/*要删除的组件类型*/);

示例:

using UnityEngine;

public class Test : MonoBehaviour

{

    void Start()

    {

        GameObject go = GameObject.Find("Cube/Sphere");

        SphereCollider sphereCollider = go.GetComponent<SphereCollider>();

        Destroy(sphereCollider);

    }

}

该段代码的功能是,找到物体Sphere,并在运行时删除该物体的SphereCollider组件。SphereCollider sphereCollider = go.GetComponent<SphereCollider>();改为Component sphereCollider = go.GetComponent<SphereCollider>();也可实现该效果。

4.关闭和激活组件

使用的API:enabled=false;

示例:

using UnityEngine;

public class Test : MonoBehaviour

{

    void Start()

    {

        GameObject go = GameObject.Find("Cube/Sphere");

        go.GetComponent<SphereCollider>().enabled=false;

    }

}

该代码的功能是,找到物体Sphere,并在运行时关闭该物体的SphereCollider组件。

如果想要激活组件,可以将上面示例中的go.GetComponent<SphereCollider>().enabled=false;改为go.GetComponent<SphereCollider>().enabled=true;