需求:需要一个资源属性,是我可以自己用的。例如我需要加载一个关卡A,那么我需要一个资源文件来记录的我关卡A的所有信息,然后我在读取的时候直接读这个资源就能可以了。
首先,设置一个资源文件,如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace YHGame
{
[CreateAssetMenu(menuName = "YHGame/CreateEnvironment")]
public class EnvironmentConfig : ScriptableObject
{
}
}
此时,有了如下图
创建了即得到
给这个资源文件赋上属性
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace YHGame
{
[CreateAssetMenu(menuName = "YHGame/CreateEnvironment")]
public class EnvironmentConfig : ScriptableObject
{
[Header("Environment")]
public Color32 RealtimeShadowColor;
public Color AmbientColor;
[Range(0,1)]
public float IntensityMultiplier = 1;
[Range(1,5)]
public int Bounces = 1;
}
}
这样资源文件就创作完成了。
增加一个小扩展学习,如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace YHGame
{
[CreateAssetMenu(menuName = "YHGame/CreateEnvironment")]
public class EnvironmentConfig : ScriptableObject
{
[Header("Environment")]
public Color32 RealtimeShadowColor;
public Color AmbientColor;
[Range(0,1)]
public float IntensityMultiplier = 1;
[Range(1,5)]
public int Bounces = 1;
[Header("Other Settings")]
public bool Fog = true;
[HideInInspector] public Color Color_fog;
[HideInInspector] public float Start = 1;
[HideInInspector] public float End = 2;
}
}
Fog 可以控制 Color_fog、Start 和 End 这三个字段显隐。
我们用【HideInInspector】隐藏了这个字段,如果要他显示,我们就要用其他方法控制他显示
写一个脚本在编辑器中
using UnityEditor;
using UnityEngine;
namespace YHGame.Editor
{
[CustomEditor(typeof(EnvironmentConfig))]
public class EnvironmentConfigEditor : UnityEditor.Editor
{
public override void OnInspectorGUI()
{
// 获取目标对象
EnvironmentConfig config = (EnvironmentConfig)target;
// 显示默认属性
DrawDefaultInspector();
// 根据 Fog 的值来决定是否显示 Color_fog、Start 和 End
if (config.Fog)
{
config.Color_fog = EditorGUILayout.ColorField("Color_fog", config.Color_fog);
config.Start = EditorGUILayout.FloatField("Start", config.Start);
config.End = EditorGUILayout.FloatField("End", config.End);
}
}
}
}
这样就可以了