摆放方案
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class PatternManager : MonoSingleton<PatternManager>
{
public List<Pattern> patterns = new List<Pattern>();//所有的方案
}
//一个物体的信息
[Serializable]
public class PatternItem
{
public string prefabeName;
public Vector3 pos;
}
//一套方案
[Serializable]
public class Pattern
{
public List<PatternItem> patternItems = new List<PatternItem>();
}
添加障碍物
/// <summary>
/// 添加障碍物
/// </summary>
/// <param name="obj">需要添加障碍物的道路</param>
void AddItem(GameObject obj)
{
var itemChild = obj.transform.Find("Item");
if (itemChild!=null)
{
var patternManager = PatternManager.Instance;
if (patternManager != null && patternManager.patterns != null && patternManager.patterns.Count > 0)
{
//随机生成一套方案
var pattern = patternManager.patterns[Random.Range(0,patternManager.patterns.Count)];
if (pattern != null && pattern.patternItems != null && pattern.patternItems.Count > 0)
{
foreach (var item in pattern.patternItems)
{
//生成方案中所有的游戏物体
GameObject go= Game.Instance.objectPool.Spawn(item.prefabeName,itemChild);
go.transform.parent = itemChild;
go.transform.localPosition = item.pos;
}
}
}
}
}
编辑器自动摆放
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class SpawnManager : EditorWindow
{
/// <summary>
/// 根据摆放到的位置,自动生成到方案中(名字、位置)
/// </summary>
[MenuItem("Tool/Click me")]
static void PatternSystem()
{
GameObject spawnManager = GameObject.Find("PatternManager");
if (spawnManager!=null)
{
var patternManager = spawnManager.GetComponent<PatternManager>();
if (Selection.gameObjects.Length==1)//如果当前选择的游戏物体是1个
{
var item= Selection.gameObjects[0].transform.Find("Item");//从第一个游戏物体上查找到Item
if (item!=null)
{
Pattern pattern = new Pattern();
foreach (var child in item)
{
Transform childPos = child as Transform;//所有的Item强制转换
if (childPos!=null)
{
//得到当前障碍物对应的Prefab的名字
var prefab = UnityEditor.PrefabUtility.GetPrefabParent(childPos.gameObject);
if (prefab!=null)
{
//对每个障碍物进行赋值
PatternItem patternItem = new PatternItem
{
prefabeName = prefab.name,
pos = childPos.localPosition
};
pattern.patternItems.Add(patternItem);//添加到一套方案中
}
}
}
patternManager.patterns.Add(pattern);//添加到所有的方案中
}
}
}
}
}