U3D 사용자 정의 Inspector 항목에 저장된 이벤트가 트리거되지 않은 솔루션
1.1.설명
U3D 편집기 플러그인을 만드는 부분만 시작해야 합니다.
이 문제는 UI 플러그인을 만들 때 Inspector 패널에서 수동으로 값을 수정한 후 U3D 편집기 자체의 수정 이벤트가 트리거되지 않아 저장할 수 없고 취소할 수 없었기 때문입니다.
수정 이벤트가 트리거된 구체적인 표현은 파일 이름의 맨 오른쪽에 별표 '*' 가 있습니다. 현재 대부분의 텍스트 편집기에서 내용 변화도 기본적으로 이와 같습니다.
1.2.솔루션
두 가지 솔루션을 살펴보겠습니다.
(아래에서 수정할 객체는 PlayerControl 유형의 obj 변수입니다.)
public class PlayerControl : MonoBehaviour {
public int intVal = 0;
public List<int> listVal = new List<int>();
}
1. UnityEngine의 Undo 클래스, 예를 들어 obj에서 int 유형의 구성원 변수인 intVal 수정:
using UnityEditor;
public class test : Editor {
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
var obj = target as PlayerControl;
Undo.RecordObject(obj,"obj change");
obj.intVal = 1;
}
}
그러나 obj의 구성원 변수가 인용 형식이고 변동할 때 인용이 변하지 않으면 RecordObject가 적용되지 않습니다.예를 들어 List 유형의 변수는 원소를 추가했다. 이 변수는 시작 메모리 주소는 변하지 않았지만 크기가 증가했다. 이 때 두 번째 방법을 사용하거나 대상을 다시 실례화해야 한다.
using System.Collections.Generic;
using UnityEditor;
public class test : Editor {
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
var obj = target as PlayerControl;
Undo.RecordObject(obj,"obj change");
// obj.listVal.Add(1); // Undo
obj.listVal = new List<int>(obj.listVal);
obj.listVal.Add(1);
}
}
2. EditorUtility 클래스의 SetDirty를 사용하여 변경된 객체를 표시합니다.
using UnityEditor;
public class test : Editor {
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
var obj = target as PlayerControl;
obj.listVal.Add(1);
EditorUtility.SetDirty(obj);
}
}
U3D 자체의 취소 시스템이 구체적으로 차량 보존인지, 위의 두 가지 방식이 각각의 좋고 나쁨을 말하기 어렵다.
2. 요약
다른 사람의 물건을 사용할 때(엔진, 라이브러리), 설명 문서와 인터페이스를 많이 보고, 특히 관련 클래스를 돕는 인터페이스(클래스명은 Helper, Tool, Utility 등 어휘 포함)를 포함한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.