MonoBehaviour基类与Component组件

1.MonoBehaviour基类

MonoBehaviour派生自组件脚本,因此组件脚本所有的公有,保护的属性,成员变量,方法等功能,MonoBehaviour也都有,继承mono之后这类可以挂载到游戏物体上。

public class No4_MonoBehaviour : MonoBehaviour
{
    void Start()
    {  
        Debug.Log("No4_MonoBehaviour组件的激活状态是:"+this.enabled);
        Debug.Log("No4_MonoBehaviour组件挂载的对象名称是:" + this.name);
        Debug.Log("No4_MonoBehaviour组件挂载的标签名称是:" + this.tag);
        Debug.Log("No4_MonoBehaviour组件是否已激活并启用Behaviour:" + this.isActiveAndEnabled);
        print("Trigger");
        
        //常使用的一些方法
        //Destroy();
        //FindObjectsOfType();
        //Instantiate();
    }
}

2.Component组件

Mono继承自Behaviour,Behaviour继承自Compontent,Compontent继承自Object子辈拥有父辈以及父辈以上(派生程度低的基类)所有的公有,保护的属性,成员变量方法等功能,挂载功能其实是Component,也就是我们写的脚本组件其实指的是Component组件,而Mono是在此基础上进行的封装与扩展。
组件的使用与获取:
a.组件都是在某一个游戏物体身上挂载的,可以通过游戏物体查找获取之后使用
b.通过其他组件查找

(1).在此脚本组件自身的使用

public class No5_Component : MonoBehaviour
{
    public int testValue;
    void Start()
    {
        No5_Component no5_Component = gameObject.GetComponent<No5_Component>();
        Debug.Log(no5_Component.testValue);//输出no5_Component组件中testValue的值
    }
}

(2).脚本未挂载在本物体的使用(错误用法)

public class No5_Component : MonoBehaviour
{

    void Start()
    {
        //注意:本游戏物体未挂载No2_EventFunction脚本组件
        No2_EventFunction no2_EventFunction = gameObject.GetComponent<No2_EventFunction>();
        Debug.Log(no2_EventFunction);
        //输出为NULL,因为这里未获取No2_EventFunction脚本组件。
        Debug.Log(no2_EventFunction.attackValue);
        //输出会报错。因为未获取组件No2_EventFunction并想要调取里面的成员变量或方法会报错
    }
}

(3).游戏物体未挂载在本脚本组件

public class No5_Component : MonoBehaviour
{

    void Start()
    {
        //查找获取名称为Gris的游戏物体(未引用)
        GameObject grisGo = GameObject.Find("Gris");
        Debug.Log(grisGo.GetComponent<SpriteRenderer>());//输出grisGo获取到游戏物体的SpriteRenderer组件
    }
}

(4).游戏物体被引用

public class No5_Component : MonoBehaviour
{
    //将一个游戏物体拖到此脚本的enemyGos进行引用(带子物体的父物体)
    public GameObject fatherGameObject;//获取父游戏物体
    public GameObject sonGameObject;//获取子游戏物体

    void Start()
    {
        //有对象被脚本引用
        //GetComponentInChildren
        Debug.Log(fatherGameObject.GetComponentInChildren<BoxCollider>());//输出enemyGos中子物体和父物体的第一个BoxCollider组件(从上往下遍历的第一个)
        //GetComponentsInChildren
        Debug.Log(fatherGameObject.GetComponentsInChildren<BoxCollider>());//输出enemyGos中子物体和父物体的所有BoxCollider组件的数组()

        //GetComponentInParent
        Debug.Log(sonGameObject.GetComponentInParent<BoxCollider>());//输出enemyGos中子物体的父物体

        //b.通过其他组件查找
        SpriteRenderer sr= grisGo.GetComponent<SpriteRenderer>();
        sr.GetComponent<Transform>();
        this.GetComponent<Transform>();
    }
}

(5).通过其他组件查找

public class No5_Component : MonoBehaviour
{
    void Start()
    {
        //b.通过其他组件查找
        GameObject grisGo = GameObject.Find("Gris");
        SpriteRenderer sr= grisGo.GetComponent<SpriteRenderer>();
        sr.GetComponent<Transform>();//通过SpriteRenderer调用Transform
        
        //获取自身组件
        //this.GetComponent<Transform>(); == GetComponent<Transform>();
    }
}