【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

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值