c# - monobehaviour 中的公共变量,不会出现在 Unity 编辑器检查器中
问题描述
我加入了一个项目,我想在脚本中添加新变量,但它们没有出现在检查器中。变量不会出现在这个特定的脚本中,但它们会出现在我刚刚创建并复制它们的另一个脚本上。如图所示,两者都是单一行为。两个脚本都在同一个目录中。
解决方案
因此,有一个编辑器脚本,它可以操作检查器视图并以自定义方式在检查器上绘制 PointOfInterest scipt。
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(PointOfInterest))]
public class POI_Inspector : Editor
{
private SerializedObject soTarget;
private PointOfInterest p;
private SerializedProperty experienceType;
private SerializedProperty video;
private SerializedProperty videoUrl;
private SerializedProperty LoadType;
private SerializedProperty youTubeUrl;
public SerializedProperty startTime;
public SerializedProperty endTime;
private SerializedProperty imageUrl;
private SerializedProperty subtitle;
private SerializedProperty backdrop360;
private SerializedProperty panoAnchorsCount;
private SerializedProperty experienceName;
private SerializedProperty latitude, longitude;
private SerializedProperty regionMap;
private SerializedProperty regionMapData;
private SerializedProperty image;
private SerializedProperty texture;
private SerializedProperty audioClip;
private SerializedProperty slides;
private SerializedProperty emissionMap;
private SerializedProperty emissionMaps;
private SerializedProperty panoPrefab;
private SerializedProperty assetUrlAndroid;
private SerializedProperty assetUrlIos;
private void OnEnable()
{
p = target as PointOfInterest;
soTarget = new SerializedObject(target);
experienceType = soTarget.FindProperty("experienceType");
// Video, Video360
video = soTarget.FindProperty("video");
videoUrl = soTarget.FindProperty("videoUrl");
LoadType = soTarget.FindProperty("videoLoadType");
youTubeUrl = soTarget.FindProperty("youTubeUrl");
startTime = soTarget.FindProperty("startTime");
endTime = soTarget.FindProperty("endTime");
imageUrl = soTarget.FindProperty("imageUrl");
subtitle = soTarget.FindProperty("subtitle");
// Panoguide
backdrop360 = soTarget.FindProperty("image");
panoPrefab = soTarget.FindProperty("panoPrefab");
experienceName = soTarget.FindProperty("experienceName");
latitude = soTarget.FindProperty("latitude");
longitude = soTarget.FindProperty("longitude");
regionMap = soTarget.FindProperty("regionMap");
regionMapData = soTarget.FindProperty("regionMapData");
image = soTarget.FindProperty("image");
texture = soTarget.FindProperty("texture");
audioClip = soTarget.FindProperty("audioClip");
slides = soTarget.FindProperty("slides");
emissionMap = soTarget.FindProperty("emissionMap");
emissionMaps = soTarget.FindProperty("emissionMaps");
assetUrlAndroid = soTarget.FindProperty("assetUrlAndroid");
assetUrlIos = soTarget.FindProperty("assetUrlIos");
}
public override void OnInspectorGUI()
{
//base.OnInspectorGUI();
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(experienceType);
EditorGUILayout.Separator();
switch (p.experienceType)
{
case ExperienceType.VIDEO_360:
{
EditorGUILayout.PropertyField(LoadType);
switch (p.videoLoadType)
{
case global::LoadType.locally:
EditorGUILayout.PropertyField(video);
break;
case global::LoadType.remotly:
EditorGUILayout.PropertyField(videoUrl);
break;
}
EditorGUILayout.PropertyField(subtitle);
break;
}
case ExperienceType.VIDEO_2D:
{
EditorGUILayout.PropertyField(LoadType);
switch (p.videoLoadType)
{
case global::LoadType.locally:
EditorGUILayout.PropertyField(video);
break;
case global::LoadType.remotly:
EditorGUILayout.PropertyField(videoUrl);
break;
}
EditorGUILayout.PropertyField(subtitle);
EditorGUILayout.Space();
EditorGUILayout.PropertyField(emissionMap);
break;
}
case ExperienceType.PANO_GUIDE:
{
EditorGUILayout.PropertyField(LoadType);
EditorGUILayout.PropertyField(panoPrefab);
break;
}
case ExperienceType.REGION_MAP:
{
EditorGUILayout.PropertyField(LoadType);
EditorGUILayout.PropertyField(regionMap);
EditorGUILayout.PropertyField(regionMapData);
break;
}
case ExperienceType.IMAGE_2D:
{
EditorGUILayout.PropertyField(LoadType);
EditorGUILayout.PropertyField(imageUrl);
EditorGUILayout.PropertyField(image);
EditorGUILayout.PropertyField(audioClip);
EditorGUILayout.PropertyField(subtitle);
EditorGUILayout.Space();
EditorGUILayout.PropertyField(emissionMap);
break;
}
case ExperienceType.IMAGE_360:
{
EditorGUILayout.PropertyField(LoadType);
EditorGUILayout.PropertyField(imageUrl);
EditorGUILayout.PropertyField(image);
EditorGUILayout.PropertyField(audioClip);
EditorGUILayout.PropertyField(subtitle);
break;
}
case ExperienceType.SLIDE_SHOW:
{
EditorGUILayout.PropertyField(LoadType);
EditorGUILayout.PropertyField(slides);
EditorGUILayout.PropertyField(audioClip);
EditorGUILayout.PropertyField(subtitle);
EditorGUILayout.Space();
EditorGUILayout.PropertyField(emissionMap);
break;
}
case ExperienceType.YOUTUBE:
{
EditorGUILayout.PropertyField(youTubeUrl);
EditorGUILayout.PropertyField(startTime);
EditorGUILayout.PropertyField(endTime);
break;
}
case ExperienceType.Asset3D:
{
EditorGUILayout.PropertyField(assetUrlAndroid);
EditorGUILayout.PropertyField(assetUrlIos);
break;
}
case ExperienceType.AUDIO:
{
EditorGUILayout.PropertyField(audioClip);
break;
}
}
if (p.emissionMap)
{
EditorGUILayout.PropertyField(emissionMaps);
}
if (EditorGUI.EndChangeCheck())
{
soTarget.ApplyModifiedProperties();
GUI.FocusControl(null);
}
}
}
推荐阅读
- css - 如何修复 HTML 样式覆盖 CSS?
- javascript - Openlayers geometry shapes not zooming when map is zoomed
- c# - Convert.ToBase64String 给出空字符串
- sql - SQL:我需要一列根据其他列的值自动更新其值
- plot - 如何为 X 轴创建对数刻度的 ROC 曲线图?
- android - Android 应用程序因配置更改而崩溃
- xml - 如何在 Xpath 1.0 中进行连接?
- android - BroadcastReceiver 和 ACTION_BOND_STATE_CHANGED 在 Android 9.0 中部分工作
- python - 一个 django APIView 中有两个 get 请求
- sql - 用于检查下一行值是否相同或不同的 SQL 查询