unity,引用类型

什么时候用到过引用类型?

把一个游戏物体从层级窗口拖到右侧的Inspector窗口的某个属性中时,就是用的引用类型。

 

 

代码

/**
     * 移动速度
     */
    [Tooltip("移动速度")]
    public float moveSpeed=3;

    /**
     * 目标物体(请将目标物体拖到Inspector窗口的Target Object属性)
    */
    [Tooltip("目标物体")]
    public GameObject targetObject;

    // Start is called before the first frame update
    void Start()
    {
        //GameObject flag = GameObject.Find("红旗");//找到目标物体
        //this.transform.LookAt(flag.transform);//脸转过来对着这个位置

        this.transform.LookAt(targetObject.transform);//脸转过来对着这个位置
    }

    // Update is called once per frame
    void Update()
    {
        float distance = moveSpeed * Time.deltaTime;

        transform.Translate(0, 0, distance, Space.Self); //相对于自身坐标系,即本地坐标系
    }

运行效果

图中所示,第一次运行,没有指定目标物体,第二次运行时,把红旗拖动到了Target Object属性中

 

引用类型可以引用哪些类型

参数也可以是引用类型

节点,GameObject
组件,如 Transform、MeshRenderer 、AudioSource资源 ,如 Material 、Texture I AudioClip 、...
数组类型

 

视频教程

https://www.bilibili.com/video/BV1TZ4y1o76s?p=63&vd_source=1e7fe4cf32e0dc77c402668041d23eff

 

上面的代码与视频中不一样,下面是与视频中一致的代码

下面的代码,如果不在一开始拖动目标到Target Object,则会报错,原因是update中的代码用到了这个对象(start中的this.transform.LookAt(targetObject.transform);不报错,原因不明)

/**
     * 移动速度
     */
    [Tooltip("移动速度")]
    public float moveSpeed=3;

    /**
     * 目标物体(请将目标物体拖到Inspector窗口的Target Object属性)
    */
    [Tooltip("目标物体")]
    public GameObject targetObject;

    // Start is called before the first frame update
    void Start()
    {
        //GameObject flag = GameObject.Find("红旗");//找到目标物体
        //this.transform.LookAt(flag.transform);//脸转过来对着这个位置

        this.transform.LookAt(targetObject.transform);//脸转过来对着这个位置
    }

    // Update is called once per frame
    void Update()
    {
        //float distance = moveSpeed * Time.deltaTime;
        //transform.Translate(0, 0, distance, Space.Self); //相对于自身坐标系,即本地坐标系


        Vector3 pl = this.transform.position; //自身的位置
        Vector3 p2 = targetObject.transform.position;//目标的位置
        Vector3 p = p2 - pl;
        float distance = p.magnitude;//向量的长度,即求距离

        if (distance >0.3f)
        {
            float move = moveSpeed * Time.deltaTime;
            transform.Translate(0, 0, move, Space.Self); //相对于自身坐标系,即本地坐标系
        }


    }

  

  

 

posted @ 2023-12-06 22:41  牛大胆V5  阅读(65)  评论(0)    收藏  举报