本文参考官方手册(https://docs.unity3d.com/ScriptReference/Editor.html),编写一个简单的自定义Component(组件),用自定义组件定义几种飞碟,编辑并赋予飞碟一些属性,做成预制
首先我们可以定义飞碟的一些共有的属性,脚本DiskData:
public class DiskData : MonoBehaviour
{
public int score = 1; // 射击命中得分
public Color color = Color.white; // 颜色
public Vector3 direction; // 初始的位置
public Vector3 scale = new Vector3(1 ,0.25f ,1); // 大小
}
我们把它绑定到飞碟上,在检查器中可以看到几项属性:
继续参考Unity的文档:https://docs.unity3d.com/cn/current/ScriptReference/Editor.html
可知需要我们新建一个继承Editor的脚本类MyDiskEditor,让我们有一个使用 IMGUI 和多重选择的自定义检视面板。如下:
using UnityEngine;
using UnityEditor;
using System.Collections;
[CustomEditor(typeof(DiskData))]
[CanEditMultipleObjects]
public class MyDEditor : Editor
{
SerializedProperty score; // 分数
SerializedProperty color; // 颜色
SerializedProperty scale; // 大小
void OnEnable()
{
// 序列化属性
score = serializedObject.FindProperty("score");
color = serializedObject.FindProperty("color");
scale = serializedObject.FindProperty("scale");
}
public override void OnInspectorGUI()
{
serializedObject.Update(); // 更新序列化属性
EditorGUILayout.IntSlider(score, 0, 5, new GUIContent("score")); // 分数
if (!score.hasMultipleDifferentValues)
{
ProgressBar(score.intValue / 5f, "score"); // 进度条
}
EditorGUILayout.PropertyField(color); // 颜色
EditorGUILayout.PropertyField(scale); // 大小
serializedObject.ApplyModifiedProperties(); // 应用修改
}
private void ProgressBar(float value, string label)
{
Rect rect = GUILayoutUtility.GetRect(18, 18, "TextField"); // 进度条的位置
EditorGUI.ProgressBar(rect, value, label); // 进度条
EditorGUILayout.Space(); // 空行
}
}
然后我们制作5款不同的飞碟,它们的大小、颜色不同,击中后得分亦不同:
下面分别是第1个和第5个飞碟的情况:
本人的“3D游戏编程与设计”系列合集,请访问:
https://www.yizuodi.cn/category/3DGame/
Comments | NOTHING
<根据相关法律法规要求,您的评论将在审核后展示。