首页 > 其他分享 >Unity 私有变量在 Inspector 中调整其值

Unity 私有变量在 Inspector 中调整其值

时间:2024-10-22 10:48:22浏览次数:6  
标签:变量 SerializeField 私有 Unity Inspector 序列化 其值

在 Unity 中,SerializeField 是一个非常有用的特性(Attribute),它主要用于将私有变量公开到 Unity 编辑器的 Inspector 界面中。下面是对 SerializeField 的详细解释及其用途。

SerializeField 的用途

  1. 公开私有变量:

    • 通常情况下,类的私有变量不会在 Inspector 中显示。如果你想保护变量不被外部访问(保持私有性),但又希望在 Inspector 中调整其值,可以使用 SerializeField 特性。
    • 例如:
      using UnityEngine;
      
      public class Example : MonoBehaviour
      {
          [SerializeField]
          private int myPrivateInt = 5; // 这个私有变量会在 Inspector 中显示
      }
  2. 增强封装性:

    • 使用 SerializeField 可以确保变量保持私有,但同时允许在 Unity 编辑器中进行调整。这符合面向对象编程的封装原则,可以更好地保护数据。
  3. 支持序列化:

    • SerializeField 特性允许 Unity 引擎序列化变量的值。序列化使得变量的状态可以在场景或游戏对象之间持久化,支持保存和加载。
  4. 支持自定义编辑器:

    • 在创建自定义编辑器或使用 Editor 脚本时,SerializeField 使得你可以控制哪些变量被序列化,从而更好地与 Unity 编辑器的工作流程集成。

例子

下面是一个完整的例子,展示如何使用 SerializeField

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField]
    private float health = 100f; // 在 Inspector 中可见,但仍为私有

    [SerializeField]
    private GameObject weapon; // 引用其他游戏对象

    void Start()
    {
        Debug.Log("Player Health: " + health);
    }

    public void TakeDamage(float damage)
    {
        health -= damage;
        if (health <= 0)
        {
            Debug.Log("Player is dead.");
        }
    }
}

注意事项

  • 只对支持序列化的类型有效: SerializeField 仅适用于可以序列化的类型,如基本类型(如 intfloatstring 等)和所有派生自 UnityEngine.Object 的类(如 GameObjectTransformComponent 等)。自定义类需要使用 System.Serializable 特性。

  • 对比 public: 如果你将变量声明为 public,它们也会在 Inspector 中显示,但这将使变量可以在其他类中访问。使用 SerializeField 让你可以保持变量的私有性。

总结

SerializeField 是 Unity 中一个强大的特性,允许开发者在保持封装性的同时,将私有变量暴露到 Inspector 中。这使得在开发过程中能够更方便地进行调整和设置,同时保持代码的整洁性和可维护性。

标签:变量,SerializeField,私有,Unity,Inspector,序列化,其值
From: https://www.cnblogs.com/guangzhiruijie/p/18492133

相关文章

  • 【Unity】Job System
    JobSystem管理WorkThread,Job是JobSystem队列中元素,最小工作单元Job使用时,为了避免多线程的各种问题,采用复制数据而不是引用数据,使用普通变量记录结果(执行参数),结果会保持原来的值,所以需要使用NativeArray。NativeArray是托管公共内存的容器,将执行参数存储在NativeArray中......
  • 【Unity】协程
    协程在主线程执行,可以利用yield实现类似多线程/异步的操作StartCoroutineStartCoroutine("方法名");//无参数StartCoroutine(fun(a));//有参数StartCoroutine("方法名",argu);//有参数StopCoroutineyieldyieldreturnnull;//暂停等待下一帧继续执行yieldreturn0;//同......
  • Unity3D c# 使对象物体始终面向摄像机
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassLookAtMainCamera:MonoBehaviour{ //Usethisforinitialization voidStart(){ } //Updateiscalledonceperframe voidUpdate(){......
  • unity .net8 suppot comming
    Helloeveryone,大家好,Withthesummerholidaysuponus,It’sbeenawhilesincemylastupdate,soIwantedtosharesomeprogressonour.NETModernizationeffort.暑假即将来临,自从我上次更新以来已经有一段时间了,所以我想分享我们的.NET现代化工作的一些进展。......
  • Unity AVPro 解决切换视频卡的问题
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;usingRenderHeads.Media.AVProVideo.Demos.UI;usingRenderHeads.Media.AVProVideo;usingstaticUnityEditor.Experimental.GraphView.GraphView;usingSystem.Numerics;usingSystem;......
  • 【Unity生存类游戏UI资源】GUI Pro - Survival Clean
    GUIPro-SurvivalClean是一款专为Unity设计的用户界面(GUI)插件,特别适用于生存类、沙盒类和开放世界游戏。该插件提供了简洁现代的UI设计风格,能够帮助开发者快速构建清晰且功能丰富的游戏界面。以下是它的主要功能和特点:1.简洁的生存类UI设计插件采用了简洁、......
  • C#从零开始学习(用unity探索C#)(unity Lab1)
    初次使用Unity本章所有的代码都放在https://github.com/hikinazimi/head-first-CsharpUnity的下载与安装从unity官网下载UnityHubUnity的使用安装后,注册账号,下载unity版本,然后创建3d项目设置窗口界面布局3D对象的创建点击对象,然后点击MoveGuzmo,就可......
  • Unity引擎CSharp数据加密通用提取方法
    CSharp一般数据加密后解密使用CryptoStream::Read解密,在程序启动时Hook该函数,然后可以截获到解密的数据步骤:Hook引擎mono的函数mono_runtime_invokeAsmHook::HOOK_INFO _mono_runtime_invoke;BOOL__cdeclhook_mono_runtime_invoke(VOID*pUserParam,AsmHook::......
  • Unity 华为快游戏JS桥接 实现写日志等功能
    之前接入微信小游戏本身代码js桥接比较完善,抖音小游戏有缺少但也没缺的这么多,华为这边的API,大残啊!官方转换插件Github仓库上一次提交在3月份。(截至现在)API给的很简略,接入js代码那里说看demo,但unity的demo里面没jslib,另一个比较完善的demo看起来像是cocos的,比较无奈。还好用unity......
  • Unity网络
    基础概念Unity网络Unity发送网络请求UnityWebRequestUnityWebRequest提供了一个模块化系统,用于构成HTTP请求和处理HTTP响应。UnityWebRequest系统的主要目标是让Unity游戏与Web浏览器后端进行交互。基本支持所有版本的Unity编辑器和某些播放器WebGliOS和An......