我想从自定义编辑器窗口捕获屏幕截图,我将其用作我正在开发的游戏的关卡编辑器,但我不确定如何执行此操作。
我想要的是捕获 EditorWindow,而不是游戏视图或场景视图。
你能帮助我吗?谢谢!
编辑:我想在按下 GUILayout.Button 时通过代码截取屏幕截图:)
简而言之:我有一个 KeyValuePair,我想在检查器中显示并使其可编辑。
我有以下自定义键值对的实现类。
using UnityEngine;
namespace Unit.Properties
{
public class ClassificationPropertySuperClass : MonoBehaviour, IClassificationUnitProperty
{
[SerializeField]
KeyValuePair<UnitClassifications, float> value;
public KeyValuePair<UnitClassifications, float> GetComponentValue()
{
return value;
}
public void SetComponentValue(KeyValuePair<UnitClassifications, float> value)
{
this.value = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,这是我制作的自定义 KeyValuePair 类
[System.Serializable]
public class KeyValuePair<TKey, TValue>
{
public KeyValuePair()
{
}
public KeyValuePair(TKey key, TValue value)
{
Key = key;
Value = value;
}
public TKey Key { get; set; }
public TValue Value { get; set; }
} …Run Code Online (Sandbox Code Playgroud) 我的目标:我有一个脚本
public class MyScript: MonoBehaviour
{
public bool A;
public bool B;
}
Run Code Online (Sandbox Code Playgroud)
仅当 A 为 TRUE 时,我才需要 B 可见
我对脚本进行了扩展,并在标题中添加了 UnityEditor
[CustomEditor(typeof(MyScript))]
public class MyEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
MyScript tool = (MyScript) target;
tool.A = GUILayout.Toggle(tool.A, "Flag");
if(tool.A)
{
tool.B= EditorGUILayout.Toggle(tool.B, "Flag");
}
}
}
Run Code Online (Sandbox Code Playgroud)
但一切都没有真正改变。我做错了什么?
我有一个ScriptableObject名为的脚本Level,在关卡脚本中我有一个游戏对象列表和一个名为introduceNewEnemies.
我想要做的是:我想在 bool 变量打开时启用游戏对象列表,并在它关闭时使用 Unity 自定义检查器方法或属性隐藏/灰色(我们无法向其添加元素)它抽屉。做起来有那么难吗?
我有一个自定义结构,代码如下:
[Serializable]
public struct HexPoint : IEquatable<HexPoint>
{
public readonly int x;
public readonly int y;
public readonly int z;
// Some custom methods for initializations and operators
}
Run Code Online (Sandbox Code Playgroud)
如果我将 x、y 和 z 变量设为非只读,它们就会在统一检查器中正常显示。但是,我有一些他们需要满足的规则(实际上是 x+y+z=0),所以我添加了 readonly 以防止人们弄乱它。
但是作为只读变量,它们不会显示(因为它们不能被修改)!:(
我想知道它们是否是我在统一检查器中显示它们的一种方式,类似于 PropertyDrawer。我知道我可以将我的结构切换到一个类,因为 PropertyDrawer 是为类保留的,但我想将它保留为一个结构。
那么,有没有办法显示值?并最终使用自定义初始值设定项修改它们?
非常感谢!
我熟悉为 Unity 游戏引擎更改脚本模板的能力。但是,它非常有限,只允许一个关键字:#SCRIPTNAME#。
随着项目变得越来越复杂,命名空间变得至关重要。并且无法通过Create --> C# Script.
有谁知道任何解决方案?
PS 我知道您可以使用 Visual Studio 创建文件,根据位置自动获取命名空间。但是,它们包含不必要的部分,例如Assets.Scripts...
我正在尝试在 Unity 上创建自定义编辑器脚本,并且出于不同的原因我希望有很多快捷方式。有没有办法创建在编辑器中触发事件的快捷方式?创建一个自定义编辑器只是为了编辑第一个编辑器的快捷方式对我来说是不可能的,因为我没有那么多时间,但它确实会帮助我能够轻松地更改我自己的快捷方式。
截至目前,这是我的代码:
static void EditorGlobalKeyPress()
{
Event current = Event.current;
if ((!current.alt && !current.control)|| current.type != EventType.KeyUp) return;
switch (Event.current.keyCode)
{
case KeyCode.L:
// Load stuff
break;
case KeyCode.U:
// Unload stuff
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然它工作得很好,但拥有可编辑的快捷方式会很棒。有谁知道是否可以以某种方式实现?
我应该如何创建PropertyAttribute并在检查器的下拉菜单中PropertyDrawer显示s 以进行多重选择?ScriptableObject
我正在制作一个 Unity C# 脚本,供其他人用作角色对话工具来写出多个游戏角色之间的对话。
我有一个DialogueElement类,然后我创建了一个DialogueElement对象列表。每个对象代表一行对话。
[System.Serializable] //needed to make ScriptableObject out of this class
public class DialogueElement
{
public enum Characters {CharacterA, CharacterB};
public Characters Character; //Which characters is saying the line of dialog
public string DialogueText; //What the character is saying
}
Run Code Online (Sandbox Code Playgroud)
public class Dialogue : ScriptableObject
{
public string[] CharactersList; //defined by the user in the Unity inspector
public List<DialogueElement> DialogueItems; //each element represents a line of dialogue
}
Run Code Online (Sandbox Code Playgroud)
我希望用户能够仅通过与 Unity 检查器交互来使用对话框工具(因此无需编辑代码)。这种设置的问题是对话工具的用户无法为Characters枚举中的字符指定他们自己的自定义名称(例如 …
我正在尝试通过脚本添加排序层。
我可以通过脚本添加排序层吗?如何?