Unity3D——自定义类的Inspector面板的修改

本文介绍了如何在Unity3D中自定义类的Inspector面板,包括创建Help.cs和HelpInspector.cs脚本,通过重写OnInspectorGUI方法来控制面板显示内容,避免不必要的public变量显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity3D——自定义类的Inspector面板的修改

  1. 预期目标: 对自定义类的Inspector面板进行修改,达到如下效果
    自定义类的Inspector面板
  2. 步骤
    (1)创建自己的脚本(例如Help.cs),置于Assets / Scripts目录(非必须)下
    (2)创建与其对应的脚本(HelpInspector.cs), 置于 Assets / Editor 目录(没有可自行创建)下
    (3)在SudentInspector.cs中
    在这里插入图片描述
  • 引用UnityEditor命名空间
  • 添加特性[CutomEditor(typeof(Help))]
  • 继承Editor类
  • 重写OnInspectorGUI类
  1. 注意:这里重写OnInspectorGUI方法时,编译器自带调用父类中的OnInspectorGUI,这里如果不想要Help类中的不需要的public变量出现在Inspector面板上,就将base.OnInspectorGUI()注释掉

  2. 代码

// SudentInspector.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using UnityEditor;

### 创建和自定义 Unity3D 中的 UI 按钮 #### 使用默认按钮组件 在 Unity 编辑器中,可以通过右键单击场景视图并选择 `UI -> Button` 来快速创建一个标准按钮。这会自动建立 Canvas、EventSystem 以及带有 Text 子对象的 Button 游戏物体。 为了进一步定制外观,可以在 Inspector 面板调整 Button 组件属性下的颜色过渡效果、字体样式和其他视觉参数[^1]。 ```csharp // 修改按钮文字内容的例子 using UnityEngine; using UnityEngine.UI; public class ChangeButtonText : MonoBehaviour { public string newText = "New Label"; void Start() { GetComponentInChildren<Text>().text = newText; // 更改子Text组件的文字 } } ``` #### 构造特殊形状的交互区域——圆形按钮案例 对于希望限定特定几何范围响应触摸的情况,比如制作圆角矩形或完全圆形的按键,则需深入到图形绘制层面处理。通过派生 MaskableGraphic 类来自定义 Image 的显示逻辑,并实现 ICanvasRaycastFilter 接口来精确控制哪些位置应该触发点击事件[^3]。 ```csharp /// <summary> /// 圆形按钮脚本示例 /// </summary> using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(Image))] public class CircleButton : MaskableGraphic, ICanvasRaycastFilter { private RectTransform rectTransform; protected override void OnEnable(){ base.OnEnable(); this.rectTransform = transform as RectTransform; } /// <inheritdoc /> public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera){ Vector2 localPos; RectTransformUtility.ScreenPointToLocalPointInRectangle(this.rectTransform, sp, eventCamera, out localPos); float width = Mathf.Abs(rectTransform.rect.width / 2f); float height = Mathf.Abs(rectTransform.rect.height / 2f); return (localPos.x * localPos.x)/(width*width)+(localPos.y*localPos.y)/(height*height)<=1; } // 覆盖基类方法用于生成网格数据... protected override void OnPopulateMesh(VertexHelper vh){ vh.Clear(); // 清除旧顶点 int cornerCount = 64; // 控制圆滑度 float radiusX = rectTransform.rect.width / 2f; float radiusY = rectTransform.rect.height / 2f; for(int i=0;i<cornerCount;++i){ float angle = ((float)i/(float)(cornerCount-1))*Mathf.PI*2-Mathf.PI/2; vh.AddVert(new Vector3(Mathf.Cos(angle)*radiusX, Mathf.Sin(angle)*radiusY), Color.white, new Vector2((Mathf.Cos(angle)+1)/2,(Mathf.Sin(angle)+1)/2)); if(i>0){ vh.AddTriangle(0,i%cornerCount,(i-1)%cornerCount); } } } } ``` 上述代码片段展示了如何构建一个仅在其内部圆形范围内接受输入信号的按钮控件。注意这里还实现了 `OnPopulateMesh()` 方法以确保最终渲染出来的图像呈现为完美的椭圆形态。 #### 添加互动行为至按钮 为了让按钮具备实际的功能性,在其上附加 Event Trigger 或者直接监听常见的 Unity UI 事件接口(如 IPointerClickHandler),从而绑定具体的回调函数执行预期操作[^4]。 ```csharp using UnityEngine.EventSystems; public class SimpleButtonClickHandler : MonoBehaviour, IPointerClickHandler{ public void OnPointerClick(PointerEventData eventData){ Debug.Log("The button was clicked!"); } } ``` 此段 C# 代码提供了一个简单的处理器模板,当关联的目标被按下时会在控制台打印消息通知开发者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

索利亚噶通

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

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

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

打赏作者

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

抵扣说明:

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

余额充值