- Home /
Question by
burgee · Apr 19, 2018 at 05:21 AM ·
editorinstantiateprefab
Attempting to write an editor tool to let me place random prefabs frrom a pool in the scene editor on mouse click. It's causing issues!
I've written an editor, and when I try to place a prefab by left-clicking on my terrain, the scene editor just goes to a black screen. If I undo the click, it returns to normal. I'm new-ish to unity and not sure how to trouble shoot this.
Note that while the editor has room for 9 prefabs to be loaded, I'm testing it by just trying to place the 0th value of the array that holds all of the prefabs. (I drag the prefabs into the inspector manually).
Editor Class:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(TerrainTrees))]
public class PrefabPlacement : Editor
{
public GameObject[] Prefab = new GameObject[10];
public float minScale = .5f;
public float maxScale = 2f;
public GameObject parent;
private bool placeMode = false;
private void OnSceneGUI()
{
int i;
if (placeMode)
{
if (Event.current.type == EventType.MouseUp)
{
Ray worldPoint = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
RaycastHit hitInfo;
if (Physics.Raycast(worldPoint, out hitInfo))
{
if (hitInfo.collider.transform.tag == "Terrain")
{
GameObject newPrefab = PrefabUtility.InstantiatePrefab(Prefab[0]) as GameObject;
newPrefab.transform.position = hitInfo.point;
newPrefab.transform.parent = parent.transform;
newPrefab.name = "PrefabTreePlacement";
}
}
}
Event.current.Use();
}
}
public override void OnInspectorGUI()
{
for (int i = 0; i < 9; i++)
Prefab[i] = EditorGUILayout.ObjectField("Prefab", Prefab[i], typeof(GameObject), true) as GameObject;
minScale = EditorGUILayout.FloatField("Min", .5f);
maxScale = EditorGUILayout.FloatField("Max", 2.5f);
parent = EditorGUILayout.ObjectField("Parent", parent, typeof(GameObject), true) as GameObject;
if (placeMode)
{
if (GUILayout.Button("Disable Editing"))
{
placeMode = false;
}
}
else
{
if (GUILayout.Button("Enable Editing"))
{
placeMode = true;
}
}
}
}
Comment