unity 位置 管理

来源:互联网 发布:游戏推广联盟源码 编辑:程序博客网 时间:2024/06/06 03:43

资源下载 http://download.csdn.net/download/tianyongheng/10161641
场景中生成的一些辅助点,占用,回收等功能.有demo可以下载,细节就不讲了

using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class PositionInfo{    /// <summary>    /// 位置点    /// </summary>      public Vector3 pos;    /// <summary>    /// 是否被占用    /// </summary>      public bool isUse;    /// <summary>    /// 和实体映射 标记    /// </summary>    public int flag;}public class MatrixPos: MonoBehaviour {    public MatrixPosManager.PosFlag flag;    /// <summary>    /// 每个行元素之间的间距(列间距)    /// </summary>    [HideInInspector]    public float columnSpacing=0;    /// <summary>    /// 每一行之间的间隔(行间距)    /// </summary>    [HideInInspector]    public float rowSpacing=0;    /// <summary>    /// child排列多少行    /// </summary>    [HideInInspector]    public int row = 0;    /// <summary>    /// 每一行多少个child    /// </summary>    [HideInInspector]    public int column = 0;    public List<PositionInfo> listPos = new List<PositionInfo>();    void Awake()    {        InitData();    }    void AddListener()    {    }    // Use this for initialization    void Start () {    }    void InitData()    {        Transform child = transform.Find("child");        for (int i=0;i< child.childCount;i++)        {            Vector3 v = child.GetChild(i).position;            listPos.Add(new PositionInfo() { pos = new Vector3(v.x, v.y, v.z), isUse = false });        }        Destroy (child.gameObject);    }    public void SpawnPoint()    {        Transform child= transform.Find("child");        for (int i=0;i<row;i++)        {                    for (int j = 0; j < column; j++)            {                Vector2 p = ComputerPosition(i,j);                GameObject go=   GameObject.CreatePrimitive(PrimitiveType.Sphere);                go.name = i.ToString() + j.ToString();                go.transform.SetParent(child);                go.transform.localPosition = new Vector3(p.y, 0, p.x);                          }                }    }    /// <summary>    /// x:是行位置,y:是列位置    /// </summary>    /// <param name="row"></param>    /// <param name="col"></param>    /// <returns></returns>   Vector2 ComputerPosition(int row,int col)    {     return new  Vector2  (row* rowSpacing, col* columnSpacing);    }    public Vector3 PushChild(int flag)    {        Vector3 v=Vector3.zero;        for(int i=0;i<listPos.Count;i++)        {            if(!listPos[i].isUse)            {                v = listPos[i].pos;                listPos[i].isUse = true;                listPos[i].flag = flag;//建立映射关系                break;            }        }        return v;    }    ///// <summary>    ///// 移除child    ///// </summary>    ///// <param name="flag"></param>    public void RemoveChild(int flag)    {        for (int i = 0; i < listPos.Count; i++)        {            if (listPos[i].isUse&&listPos[i].flag==flag)            {                listPos[i].flag = 0;                listPos[i].isUse = false;                Debug.Log("移除me:" + flag);                break;            }        }    }    void Update()    {    }}
using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class MatrixPosManager : MonoBehaviour {    public enum PosFlag    {        none,        one,        two,    }    Dictionary<PosFlag, MatrixPos> flagPosDic = new Dictionary<PosFlag, MatrixPos>();    private void Awake()    {        InitData();       }    /// <summary>    /// 保存映射    /// </summary>    void InitData()    {        foreach (PosFlag flag in Enum.GetValues(typeof(PosFlag)))        {            if (flag == PosFlag.none)            {                continue;            }            if (transform.Find(flag.ToString()))            {                if (transform.Find(flag.ToString()).GetComponent<MatrixPos>())                {                    if (!flagPosDic.ContainsKey(flag))                    {                        flagPosDic.Add(flag, transform.Find(flag.ToString()).GetComponent<MatrixPos>());                    }                }            }        }    }    public Vector3 PushChild(PosFlag posFlag,int flag)    {        Vector3 v=Vector3.zero;        MatrixPos matrixPos = null;        if (flagPosDic.TryGetValue(posFlag, out matrixPos))        {           v= matrixPos.PushChild(flag);            matrixPos = null;        }        return v;    }    public void RemoveChild(PosFlag posFlag, int flag)    {        MatrixPos matrixPos = null;        if (flagPosDic.TryGetValue(posFlag, out matrixPos))        {            matrixPos.RemoveChild(flag);            matrixPos = null;        }    }}
原创粉丝点击