Unity A星寻路

文章介绍了在Unity中如何根据图片预制体和指定的单元格大小,生成并平铺地图的过程,包括使用GameObject和SpriteRenderer组件,以及适用于A*寻路的3D场景中的立方体平铺。作者寻求关于缩放和清理内存的指导。
摘要由CSDN通过智能技术生成

地图单元格生成函数

参数一是图片预制体,参数二是单元格大小,根据图片的大小,设置每一块单元格的大小.平铺整个地图

因为我用于平铺的预制体是一张空图片,缩放与Cube的缩放不一样,我也不知道怎么弄.我的cellSize = 0.1

    private void GenerateMap(GameObject map,float cellSize)
    {
        ClearMap(); //先清空
        ground = new GameObject("Base"); //创建一个父节点
        //MapEditorMgr mm = ground.AddComponent<MapEditorMgr>();
        //mm.mapX = this.mapX;
        //mm.mapY = this.mapY;
        //mm.blockSize = this.blockSize
        UnityEngine.Vector2 startPos = GetStartPos(map); //获得图片的左下角坐标
        //加载单元格prefab,
        GameObject planPrefab = AssetDatabase.LoadAssetAtPath<GameObject> ("Assets/AStartMapEdit/Res/Plane.prefab");
        
        for (int i = 0; i < mapY; i++)
        {
            UnityEngine.Vector2.pos= startPos;
            for (int j = 0; j < mapX; j++)
            {
            	//创建预制体,设置一些属性
                GameObject plane = PrefabUtility.InstantiatePrefab(planPrefab) as GameObject;
                plane.transform.SetParent(ground.transform, false); 
                plane.transform.position = pos;
                plane.transform.localScale = new UnityEngine.Vector2(blockSize, blockSize);
				//获得每块单元格的脚本数据,并赋值
                //BlockData bd = plane.AddComponent<BlockData>();
                //bd.mapX = j;
                //bd.mapY = i;
                //bd.isGo = 0;
                pos.x += cellSize;
            }
            startPos.y += cellSize;
        }

清除

先判断父节点是否为空,直接删除父节点.

DestroyImmediate()这个系统函数可以直接清理内存

    private void ClearMap()
    {
        if (ground != null)
            DestroyImmediate(ground);
    }

取得地图左下角位置

这个函数要求实例必须有"SpriteRenderer"组件.

SpriteRenderer.bounds.size 可以返回图片的大小.然后取地图一半的负数.

    UnityEngine.Vector2 GetStartPos(GameObject img)
    {
        SpriteRenderer sr = img.GetComponent<SpriteRenderer>();
        if (sr)
        {
            UnityEngine.Vector2 pos = sr.bounds.size;
            return -pos / 2;
        }
        return UnityEngine.Vector2.zero;
    }

根据以上函数,可以给地图设置单元格,方便控制行走,A星寻路.

如果是3D场景,用Cube平铺地图可能更合适.
本人新手.如果有错误,请指正.

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

langliali

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值