您现在的位置是:首页 >学无止境 >【Unity入门】13.脚本外置参数网站首页学无止境

【Unity入门】13.脚本外置参数

Lampard猿奋 2023-05-20 12:00:02
简介【Unity入门】13.脚本外置参数

【Unity入门】脚本外置参数

    大家好,我是Lampard~~

    欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢

 

(一)外置脚本参数

(1)外置自转脚本的速度参数

    我们在RotateLogic的时候,为了实现自转功能,我们在update方法里调用了transform.Rotate方法,其中我们给他的速度设置为90°每秒,4秒转一圈

    void Update()
    {
        float speed = 90;
        this.transform.Rotate(0, speed * Time.deltaTime, 0);
    }

    当前效果:

    为了更方便的去调整这个速度,能够在编译器中像修改Position那样修改这个自转速度,我们可以把这个speed速度字段设置为全局

    public float speed = 90;
    void Update()
    {
        this.transform.Rotate(0, speed * Time.deltaTime, 0);
    }

    设置完之后看编译器,就会神奇的发现RotateLogic脚本多了一个外置的Speed参数

     修改这里的值就能同步修改脚本的速度数值,举个栗子:

(2)Tooltip给外置参数加上注解

    脚本很多,参数很多。为了更易读我们可以给外置的参数设置注解,使用到的是Tooltips方法:

Tooltips是Unity编辑器中的一个功能,用于为组件、变量、属性等提供提示信息,方便开发者使用和理解。当鼠标悬停在一个组件或变量上时,Unity编辑器会显示该组件或变量的Tooltips信息。

Tooltips信息通常用于描述该组件或变量的作用、取值范围、注意事项等,可以帮助开发者更好地理解和使用该组件或变量。同时,Tooltips信息也可以用于文档化和代码注释,方便维护和交流

     它的用法也比较简单,加上这样一行代码即可:

    [Tooltip("自转每秒Y轴旋转的角度")]
    public float speed = 90;
    void Update()
    {
        this.transform.Rotate(0, speed * Time.deltaTime, 0);
    }

    

 

(二)参数赋值的顺序

(1)参数赋值的作用

    在我们做地月系统旋转的时候,因为月亮和地球的旋转速度不一样,我们是给地球赋予了RotateLogic,然后给月亮单独写了一个MoonRotateLogic

    当我们可以直接在编译器对参数赋值,就不需要两个脚本了,把MoonRotateLogic,把RotateLogic增加组件至月亮旋转节点处,然后调节速度即可

(2)参数赋值的顺序

    上一篇在学习MonoBehaviour事件函数的时候,我们知道一个脚本会执行awake,onEnter,start,update等方法

    那如果我们定义全局变量时设定一个速度值,在编译器又设置一个速度值,awake,onEnter,start,update又分别修改这个速度值,那最终会取哪一个值呢?

     很简单,加一个日志打印看看就可以了:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateLogic : MonoBehaviour
{
    // Update is called once per frame
    [Tooltip("自转每秒Y轴旋转的角度")]
    public float speed = 90;

    private void Awake()
    {
        this.speed = 100;
        Debug.Log("正在执行Awake方法, 当前速度是:" + this.speed);
    }

    private void OnEnable()
    {
        this.speed = 200;
        Debug.Log("正在执行OnEnable方法, 当前速度是:" + this.speed);
    }

    // Start is called before the first frame update
    void Start()
    {
        this.speed = 300;
        Debug.Log("正在执行Start方法, 当前速度是:" + this.speed);
    }

    void Update()
    {
        this.speed = 400;
        Debug.Log("正在执行Update方法, 当前速度是:" + this.speed);
        this.transform.Rotate(0, speed * Time.deltaTime, 0);
    }
}

    然后我们在编译器把速度改成30,看看打印日志:

     可以看到哪怕我们在编译器里有修改速度值,但是在基类的事件函数中都会覆盖那个赋值,而且顺序是Awake->OnEnter->Start->Update

好啦今天就到这里,感谢阅读!!!
点赞,关注!!!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。