JiNanCementPlantForUnity/Assets/Editor/SpawnPlants.cs

121 lines
3.8 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Adam;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
//============================================================
//支持中文文件使用UTF-8编码
//@author Adam
//@create 20230417
//@company Adam
//
//@description:
//============================================================
public class MyEditor : Editor
{
#if UNITY_EDITOR
[MenuItem("MyTest/MyEditor")]
#endif
public static void OpenEditorWindow()
{
MyEditorWindow.ShowWindow();
}
}
public class MyEditorWindow : EditorWindow
{
public static MyEditorWindow instance;
[SerializeField]//必须要加
protected List<UnityEngine.Object> _assetLst = new List<UnityEngine.Object>();
//序列化对象
protected SerializedObject _serializedObject;
//序列化属性
protected SerializedProperty _assetLstProperty;
//public GameObject flower1;
//public GameObject flower2;
//public GameObject plant1;
//public GameObject plant2;
public GameObject target;
public float max;
public float min;
public static void ShowWindow()
{
instance = GetWindow<MyEditorWindow>();
instance.Init();
}
public void Init()
{
SceneView.duringSceneGui += OnSceneGUI;
//使用当前类初始化
_serializedObject = new SerializedObject(this);
//获取当前类中可序列话的属性
_assetLstProperty = _serializedObject.FindProperty("_assetLst");
}
private void OnGUI()
{
////绘制对象
//GUILayout.Space(10);
//flower1 = (GameObject)EditorGUILayout.ObjectField("Buggy Game Object", flower1, typeof(GameObject), true);
//GUILayout.Space(10);
//flower2 = (GameObject)EditorGUILayout.ObjectField("Buggy Game Object", flower2, typeof(GameObject), true);
//GUILayout.Space(10);
//min = (GameObject)EditorGUILayout.ObjectField("MinScale", plant2, typeof(GameObject), true);
GUILayout.Space(10);
target = (GameObject)EditorGUILayout.ObjectField("Buggy Game Object", target, typeof(GameObject), true);
//更新
_serializedObject.Update();
//开始检查是否有修改
EditorGUI.BeginChangeCheck();
//显示属性
//第二个参数必须为true否则无法显示子节点即List内容
EditorGUILayout.PropertyField(_assetLstProperty, true);
//结束检查是否有修改
if (EditorGUI.EndChangeCheck())
{//提交修改
_serializedObject.ApplyModifiedProperties();
}
}
public void OnSceneGUI(SceneView sceneView)
{
//不能用input因为不是运行时
if (Event.current.type == EventType.MouseDown && Event.current.button == 0)
{
Debug.Log("mouse left click!");
}
else if (Event.current.type == EventType.MouseDown && Event.current.button == 1)
{
//使用HandleUtility来进行编辑器的操作
Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider != null)
{
int index = Random.Range(0, _assetLst.Count - 1);
GameObject obj = GameObject.Instantiate( (GameObject)_assetLst[index]);
obj.transform.localPosition = hit.point;
//obj.transform.LookAt(target.transform);
obj.transform.localScale = new Vector3(Random.Range(1f, 1.5f), Random.Range(1f, 1.5f), Random.Range(1f, 1.5f));
obj.transform.localEulerAngles = new Vector3(0,Random.Range(0f, 360f),0);
Debug.Log("mouse right click : " + hit.collider.gameObject.layer.ToString());
}
}
}
}
}