萌熊跑酷(六)编辑器摆放障碍物

摆放方案

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);//添加到所有的方案中
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值