【Odin插件学习】新手上手示例:一个简单的角色面版

【Odin插件学习】新手上手示例:一个简单的角色面版示例展示前置准备创建脚本,例SimpleCharacterPanel.cs添加Odin库using指令usingSirenix.OdinInspector;需求分析我们可以将面版主要分为如下四个部分:角色基础信息名称等级经验值角色模型角色属性经验上限(升级所需经验)攻击力血量上限蓝量上限血条蓝条模拟操作(金手指)经验值增加其他初始化等级提升 #region属性publicstringm_Characte

大家好,又见面了,我是你们的朋友全栈君。

示例展示

请添加图片描述

前置准备

  1. 创建脚本,例 SimpleCharacterPanel.cs
  2. 添加Odin库using指令 using Sirenix.OdinInspector;

需求分析

我们可以将面版主要分为如下四个部分:

  • 角色基础信息
    • 名称
    • 等级
    • 经验值
    • 角色模型
  • 角色属性
    • 经验上限(升级所需经验)
    • 攻击力
    • 血量上限
    • 蓝量上限
    • 血条
    • 蓝条
  • 模拟操作(金手指)
    • 经验值增加
  • 其他
    • 初始化
    • 等级提升

请添加图片描述

	#region 属性

    public string m_CharacterName = "银色大蜥蜴";
    public int m_Level;
    public int m_Exp;

    public Object m_CharacterModel;

    public int m_ExpLimit;
    public int m_ATK;
    public int m_MaxHP;
    public int m_MaxSP;

    public int m_HP;
    public int m_SP;

    private void _Get100Exp()
    { 
   
        int ExpCount = m_Exp + 100;
        while (ExpCount >= m_ExpLimit)
        { 
   
            ExpCount -= m_ExpLimit;
            _LevelUp();
        }
        m_Exp = ExpCount;
    }

    private void _LevelUp()
    { 
   
        m_Level++;
        m_ExpLimit = m_Level * m_Level + 100;
        m_ATK = m_Level * m_Level * 3;
        m_MaxHP = m_Level * m_Level * 20;
        m_MaxSP = m_Level * m_Level * 5;
        m_HP = m_MaxHP;
        m_SP = m_MaxSP;
    }

    private void _Init()
    { 
   
        m_Level = 1;
        m_ExpLimit = 100;
        m_Exp = 0;
        m_ATK = 1;
        m_MaxHP = 50;
        m_MaxSP = 10;
        m_HP = m_MaxHP;
        m_SP = m_MaxSP;

        m_CharacterModel = this.gameObject;
    }
    
#endregion

面版改造

基础信息部分

  1. 显示改造

    • 使用[DisplayAsString]去除文本框,只显示文本
    • 使用[ProgressBar]以进度条形式显示经验值
      • 第一个参数为进度最小值,此处为0
      • 第二个参数为最大值,此处依赖 m_ExpLimit 字段的值
      • 后三位分别为进度条颜色的RGB值
    • 使用[PreviewField]显示模型预览

    请添加图片描述

    		[DisplayAsString]
    		public string m_CharacterName = "银色大蜥蜴";
    		
    		[DisplayAsString]
    		public int m_Level;
    		
    		[ProgressBar(0, "m_ExpLimit", 0, 0.8f, 0)]
    		public int m_Exp;
    		
    		[PreviewField(ObjectFieldAlignment.Left)]
    		public Object m_CharacterModel;
    
  2. Label改造

    • 使用[HideLabel]隐藏标签
    • 使用[LabelWidth]设置标签宽度

    请添加图片描述

  3. 布局改造

    • 使用[HorizontalGroup]使名称和等级设置在同一水平区域

      请添加图片描述

      		[HorizontalGroup("名称等级")]
      		[HideLabel]
      		[DisplayAsString]
      		public string m_CharacterName = "银色大蜥蜴";
      		
      		[HorizontalGroup("名称等级")]
      		[LabelWidth(40)]
      		[DisplayAsString]
      		public int m_Level;
      		
      		[LabelWidth(50)]
      		[ProgressBar(0, "m_ExpLimit", 0, 0.8f, 0)]
      		public int m_Exp;
      		
      		[HideLabel]
      		[PreviewField(ObjectFieldAlignment.Left)]
      		public Object m_CharacterModel;
      
    • 使用[VerticalGroup]使上一步的组合与经验值设置在同一垂直区域

      请添加图片描述

      	[HorizontalGroup("文本信息/名称等级")]
          [HideLabel]
          [DisplayAsString]
          public string m_CharacterName = "银色大蜥蜴";
      
          [HorizontalGroup("文本信息/名称等级")]
          [LabelWidth(40)]
          [DisplayAsString]
          public int m_Level;
      
          [VerticalGroup("文本信息")]
          [LabelWidth(50)]
          [ProgressBar(0, "m_ExpLimit", 0, 0.8f, 0)]
          public int m_Exp;
      
          [HideLabel]
          [PreviewField(ObjectFieldAlignment.Left)]
          public Object m_CharacterModel;
      
    • 再次使用[HorizontalGroup]使上步组合和模型预览处在同一水平区域

      请添加图片描述

      	[HorizontalGroup("基础信息/文本信息/名称等级")]
          [HideLabel]
          [DisplayAsString]
          public string m_CharacterName = "银色大蜥蜴";
      
          [HorizontalGroup("基础信息/文本信息/名称等级")]
          [LabelWidth(40)]
          [DisplayAsString]
          public int m_Level;
      
          [VerticalGroup("基础信息/文本信息")]
          [LabelWidth(50)]
          [ProgressBar(0, "m_ExpLimit", 0, 0.8f, 0)]
          public int m_Exp;
      
          [HorizontalGroup("基础信息")]
          [HideLabel]
          [PreviewField(ObjectFieldAlignment.Right)]
          public Object m_CharacterModel;
      

    属性信息部分

    1. 显示改造

      • 使用[DisplayAsString]去除文本框,只显示文本

        请添加图片描述

    2. 布局改造

      • 使用[FoldoutGroup]将其收录在一个可折叠的框中

        请添加图片描述

        		[FoldoutGroup("角色属性"), DisplayAsString]
            public int m_ExpLimit;
            [FoldoutGroup("角色属性"), DisplayAsString]
            public int m_ATK;
            [FoldoutGroup("角色属性"), DisplayAsString]
            public int m_MaxHP;
            [FoldoutGroup("角色属性"), DisplayAsString]
            public int m_MaxSP;
        

    血条蓝条

    请添加图片描述

    	[ProgressBar(0, "m_MaxHP", 0.8f, 0, 0)]
        public int m_HP;
        [ProgressBar(0, "m_MaxSP", 0.1f, 1, 0.9f)]
        public int m_SP;
    

    模拟操作的按钮

    • 在函数前使用[Button]在Inspector界面绘制一个调用按钮

    • 使用[Title]绘制一个标题

      请添加图片描述

      		[Title("模拟操作"), Button("加100经验")]
          private void _Get100Exp()
          { 
             
              int ExpCount = m_Exp + 100;
              while (ExpCount >= m_ExpLimit)
              { 
             
                  ExpCount -= m_ExpLimit;
                  _LevelUp();
              }
              m_Exp = ExpCount;
          }
      

    在Inspector初始化时初始化字段

    [OnInspectorInit("_Init")]
    private void _Init()
        { 
         
            m_Level = 1;
            m_ExpLimit = 100;
            m_Exp = 0;
            m_ATK = 1;
            m_MaxHP = 50;
            m_MaxSP = 10;
            m_HP = m_MaxHP;
            m_SP = m_MaxSP;
    
            m_CharacterModel = this.gameObject;
        }
    

    完整代码

    using Sirenix.OdinInspector;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class SimpleCharacterPanel : MonoBehaviour
    { 
         
        #region 完整Demo
        [OnInspectorInit("_Init")]
    
        [HorizontalGroup("CharacterBaseInfo/Info/Base", Width = 80), HideLabel, DisplayAsString]
        public string m_CharacterName = "银色大蜥蜴";
    
        [HorizontalGroup("CharacterBaseInfo/Info/Base", Width = 200, MinWidth = 100), LabelWidth(40), DisplayAsString]
        public int m_Level;
    
        [VerticalGroup("CharacterBaseInfo/Info"), LabelWidth(50), ProgressBar(0, "m_ExpLimit", 0, 0.8f, 0)]
        public int m_Exp;
    
        [HorizontalGroup("CharacterBaseInfo", Width = 50), HideLabel, PreviewField(ObjectFieldAlignment.Left)]
        public Object m_CharacterModel;
    
        [FoldoutGroup("角色属性"), DisplayAsString]
        public int m_ExpLimit;
        [FoldoutGroup("角色属性"), DisplayAsString]
        public int m_ATK;
        [FoldoutGroup("角色属性"), DisplayAsString]
        public int m_MaxHP;
        [FoldoutGroup("角色属性"), DisplayAsString]
        public int m_MaxSP;
    
        [ProgressBar(0, "m_MaxHP", 0.8f, 0, 0)]
        public int m_HP;
        [ProgressBar(0, "m_MaxSP", 0.1f, 1, 0.9f)]
        public int m_SP;
    
        [Title("模拟操作"), PropertySpace(30), Button("加100经验")]
        private void _Get100Exp()
        { 
         
            int ExpCount = m_Exp + 100;
            while (ExpCount >= m_ExpLimit)
            { 
         
                ExpCount -= m_ExpLimit;
                _LevelUp();
            }
            m_Exp = ExpCount;
        }
    
        private void _LevelUp()
        { 
         
            m_Level++;
            m_ExpLimit = m_Level * m_Level + 100;
            m_ATK = m_Level * m_Level * 3;
            m_MaxHP = m_Level * m_Level * 20;
            m_MaxSP = m_Level * m_Level * 5;
            m_HP = m_MaxHP;
            m_SP = m_MaxSP;
        }
    
        private void _Init()
        { 
         
            m_Level = 1;
            m_ExpLimit = 100;
            m_Exp = 0;
            m_ATK = 1;
            m_MaxHP = 50;
            m_MaxSP = 10;
            m_HP = m_MaxHP;
            m_SP = m_MaxSP;
    
            m_CharacterModel = this.gameObject;
        }
        #endregion
    }
    
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162825.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Extjs grid设置单元格字体颜色,及单元格背景色「建议收藏」

    Extjs grid设置单元格字体颜色,及单元格背景色「建议收藏」转自:http://blog.csdn.net/suixufeng/article/details/7480170上面这种是最简单的,设定固定的某单元格中字体颜色。[javascript]viewplaincopy//————————————————–列头    var cm = new

    2022年7月11日
    22
  • 首次使用空气炸锅需要干烧10分钟_pycharm第一次打开

    首次使用空气炸锅需要干烧10分钟_pycharm第一次打开1、PyCharm的下载下载地址:https://www.jetbrains.com/pycharm/版本:PyCharmProfessionalEdition收费版本:PyCharmCommunityEdition免费2、首次新建项目打开安装好的PyCharm首次打开会出现本界面,点击CreateNewProject项目命名及选择Python解释…

    2022年8月27日
    6
  • Windows server WSUS补丁服务器搭建

    写在前面关于微软Windows操作系统补丁更新,针对于客户生产环境补丁更新,为了安全起见不得不建议搭建相应的补丁服务器,利用自动或者手动更新指定服务器的最新补丁。借用闲暇时间做相应的总结,方便后期工作中参考。搭建条件首先安装相应的.NET环境,IIS环境, 存放补丁包,需要充裕的磁盘空间。搭建过程首先下载Wsus3.0的安装文件,这里给出简体中文版的下载地址,…

    2022年4月1日
    58
  • Awvs详细使用教程「建议收藏」

    Awvs详细使用教程「建议收藏」Awvs的是一款非常好用的web漏洞扫描工具,他的扫描速度比较快,可以自己选择扫描速度,比较灵活。Awvs分为老的版本和新版本,下面我介绍的是新版本的功能和用法。功能介绍如下:仪表盘(监视器)功能,添加目标功能,漏洞排序功能,扫描功能,发现功能,用户功能,扫描配置功能,网络扫描功能,追踪器功能,防火墙设置,邮件设置,引擎,时间排除功能,代理功能,常规设置主要使用的功能是前面的6个,后面的根据个人的需要进行配置详细介绍如下:Dashboard功能:翻译意思仪表盘(监视器),可以对扫描对扫描

    2025年8月24日
    4
  • 嵌入式学习路线图「建议收藏」

    嵌入式学习路线图「建议收藏」可能是年前跳槽的比较多,遇到不少同学咨询到嵌入式行业发展和职业规划的问题,这里总结一下嵌入式行业的机遇和选择,希望对读者们有所帮助。我们暂且宏观上把程序员分为3类:业务类,专业类,系统类。 业务类 业务类更多的是在应用程序。随着移动互联网的快速发展出现一批UI设计师,这里的设计师是指APP的界面设计,在注重用户体验的今天对于界面的设计出现水涨船高的需求。一时间Android…

    2022年6月6日
    36
  • Matlab 7.1安装及打不开问题解决

    Matlab 7.1安装及打不开问题解决

    2022年2月6日
    75

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号