当前位置: 首页 > news >正文

Unity3D 入门:让 C# 脚本公开可在 Unity 编辑器中设置的属性

将一部分参数从 C# 脚本中抽离出来,可以让 C# 脚本在 Unity 项目中更通用,适用于更多游戏对象(gameObject)。

本文介绍如何创建可在 Unity 编辑器中设置属性的 C# 脚本,并介绍如何在 Unity 编辑器中设置它们。


本文内容

    • 简单的 C# 脚本
    • 公开字段
    • 在哪里修改值
    • 有趣的名称

简单的 C# 脚本

本文的例子取自于我的另一篇博客:

  • Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本 - walterlv
using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private Transform transform;
    public float moveSpeed = 5f;
    public float rotateSpeed = 50f;

    void Start()
    {
        transform = GetComponent<Transform>();
    }

    void Update()
    {
        float adValue = Input.GetAxis("Horizontal");
        float wsValue = Input.GetAxis("Vertical");
        float mValue = Input.GetAxis("Mouse X");

        var moveDirection = (Vector3.forward * wsValue) + (Vector3.right * adValue);
        transform.Translate(moveDirection.normalized * moveSpeed * Time.deltaTime, Space.Self);
        transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime * mValue);
    }
}

公开字段

只需要将脚本的字段设为 public,Unity 编辑器便能识别出这些字段以及它们的类型,然后允许你在 Inspector 中编辑它们。

在 Inspector 中设置公开字段的值

注意,Inspector 中不会识别属性,更不会识别方法。所以要公开,必须使用“字段”。

在哪里修改值

Unity 编辑器会在每次重新激活编辑器窗口的时候重新加载 Unity 项目。因此,当你在 Visual Studio 或其他编辑器中新编写了公开字段后,回到 Unity 编辑器中便会识别到这些字段,然后显示出来。

值得注意的是,这个时候就已经记录了此脚本在此游戏对象中的值。也就是说,此后无论你如何在脚本中修改公开字段的值,运行游戏都不会有变化,因为游戏开始后,就会用你在编辑器中设置的值(虽然不是手工设的)覆盖脚本中编写的默认值。

要修改,还是需要在 Inspector 中去修改值。

有趣的名称

按照 Unity C# 脚本的编写规范,公开的字段也是按 camelCase 命名的。当然,你也可以用 PascalCase 命名也不会有什么识别上的问题。

不过,无论你用什么命名,Inspector 中都会将你的名称拆开成多个单词,并首字母大写。

更有趣的是,如果你使用了一些预设的字段名称,那么 Inspector 中会显示成预设的名称。典型的是命名成 Name 的时候,Inspector 中会显示“名称”(如果你装了中文语言包的话)。


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • Unity3D 入门:如何管理 Unity 项目中的 NuGet 包?使用第三方 NuGet 包管理器——NuGetForUnity
  • Unity3D 入门:如何在脚本中找到游戏对象的父子级 祖孙级对象和它们的组件
  • Unity3D 入门:如何制作天空效果?天空盒的使用
  • Unity3D 入门:使用 Visual Studio 开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件
  • Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本
  • 比较 Windows 上四种不同的文件(夹)链接方式(NTFS 的硬链接、目录联接、符号链接,和大家熟知的快捷方式)
  • 了解 Windows Linux 下命令行 Shell 启动程序传参的区别,这下不用再担心 Windows 下启动程序传参到 Linux 下挂掉了
  • 适合 .NET 开发者用的 GitHub Actions(时不时更新)
  • 在 CMD 里根据进程名杀掉进程
  • 在 PowerShell 里根据进程名杀掉进程
  • 在制作多框架项目的 NuGet 包时应该注意的问题(buildMultiTargeting TargetFrameworks)
  • 专业团队:推荐一个网站,生成巨幅文字注释
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • 通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率
  • 使用 SetWindowCompositionAttribute 来控制程序的窗口边框和背景(可以做 Acrylic 亚克力效果、模糊效果、主题色效果等)
  • 深入了解以太坊
  • [Vue CLI 3] 配置解析之 css.extract
  • “大数据应用场景”之隔壁老王(连载四)
  • Create React App 使用
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Intervention/image 图片处理扩展包的安装和使用
  • Js基础——数据类型之Null和Undefined
  • JWT究竟是什么呢?
  • KMP算法及优化
  • React-生命周期杂记
  • 给github项目添加CI badge
  • 来,膜拜下android roadmap,强大的执行力
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链分支循环
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 限制Java线程池运行线程以及等待线程数量的策略
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (10)ATF MMU转换表
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (分布式缓存)Redis哨兵
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (力扣题库)跳跃游戏II(c++)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (推荐)叮当——中文语音对话机器人
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • *1 计算机基础和操作系统基础及几大协议
  • .axf 转化 .bin文件 的方法
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET/C# 使用反射注册事件
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • /etc/fstab和/etc/mtab的区别
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @PreAuthorize注解