【发布时间】:2019-04-05 20:58:03
【问题描述】:
一般来说,大多数对象都是通过拖动或其他方式放置在场景视图中的。我想右键单击鼠标(不拖动对象)以在场景视图中创建对象。我知道这需要一些编辑器编码,但我不知道该怎么做。
更新
经过一番思考,我意识到使用 MenuItem 非常适合我。下面是我的代码:
SLMenuItems:
public class SLMenuItems : MonoBehaviour {
public bool canClickSceneViewToCreatePath = false;
void Start()
{
}
[MenuItem("Component/Create Custom Object")]
static void CreateObject() {
Debug.Log("menu item selected");
canClickSceneViewToCreatePath = true;
}
}
SLMenuItemsEditor:
[CustomEditor(typeof(SLMenuItems))]
public class SLMenuItemsEditor : Editor {
SLMenuItems slMenuItems;
void OnEnable()
{
slMenuItems = (SLMenuItems)target;
}
void OnSceneGUI()
{
if (slMenuItems.canClickSceneViewToCreatePath) {
Vector3 pointsPos = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition).origin;
if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
{
// create object here at pointsPos
slMenuItems.canClickSceneViewToCreatePath = false;
}
}
}
}
我不断收到以下错误:
Assets/SLMenuItems.cs(23,9): error CS0120: An object reference is required to access non-static member `SLMenuItems.canClickSceneViewToCreatePath'
指向线:
canClickSceneViewToCreatePath = true;
在SLMenuItems.
【问题讨论】:
-
1.检测鼠标点击。 2. 实例化游戏对象。我已经为你简化了。如果您迷路了,请使用您当前的代码编辑问题。
-
@Programmer 好的,我想我明白了。这是我想要实现的一小部分。几天前我问过gamedev.stackexchange.com/questions/164911/…,但没有得到任何帮助。如果你能帮我看看,我会很高兴的。
-
我建议您在 SO 上重新创建该问题。有许多 Unity 用户可以为您提供帮助
-
查看
GetMouseButtonDown、ScreenToWorldPoint和ScreenPointToRay,具体取决于您的需求 -
@Programmer 我刚刚更新了问题
标签: unity3d unity-editor