unity之二维数组实现正六边形地图

简介: unity实现正六边形地图

image.png
左右上下相邻正六边形的位置坐标如下:
image.png
分析:
一行中,两个响铃六边形相差80,假设第一个x坐标为0,则下一个相邻六边形的x值为:

(x-1)*80

上下相邻两个六边形的X值相差-40,两两一循环,因此,可以用y值来确定X的偏移量:

local offX = y%2 == 0 and -40 or 0

最终x的坐标为:

local offX = y%2 == 0 and -40 or 0
(x-1)*80+offX

X的坐标确定啦,Y坐标就更简单了,上下两个相邻的y差值为70,假设第一个y坐标为0,则,对应的其他y坐标为:

(y-1)*70

最终,每个正六边形的坐标也就确定了,为:

local offX = y%2 == 0 and -40 or 0
go.transform.localPosition = Vector3.New((x-1)*80+offX,(y-1)*70,0)

完整代码如下:

ui.list = base:findobj("list")
ui.item = base:findobj("item")

local function RefreshUI()
    local length = 8--长
    local width = 4--宽
    local itemList = {}
    for y=1,width do
        itemList[y] = {}
        for x=1,length do
            local obj = utils.addchild(ui.list,ui.item)
            utils.findtext(obj,"Text").text = string.format("%s_%s",x,y)
            itemList[y][x] = obj
            local offX = y%2 == 0 and -40 or 0
            itemList[y][x].transform.localPosition = Vector3.New((x-1)*80+offX,(y-1)*70,0)
            SetActive(obj,true)
        end
    end
end
相关文章
|
5月前
|
算法 定位技术 图形学
unity2d实现一个全方位的无限随机地图
unity2d实现一个全方位的无限随机地图
346 0
|
定位技术 图形学
Unity3D——射击游戏(多地图,多人物,枪支切换,驾车,扔手雷等功能,堪比小型和平精英)
Unity3D——射击游戏(多地图,多人物,枪支切换,驾车,扔手雷等功能,堪比小型和平精英)
Unity3D——射击游戏(多地图,多人物,枪支切换,驾车,扔手雷等功能,堪比小型和平精英)
|
存储 定位技术 图形学
【猿创征文|Unity开发实战】—— 2D项目1 - Ruby‘s Adventure 游戏地图绘制(2-1)
【猿创征文|Unity开发实战】—— 2D项目1 - Ruby‘s Adventure 游戏地图绘制(2-1)
281 0
【猿创征文|Unity开发实战】—— 2D项目1 - Ruby‘s Adventure 游戏地图绘制(2-1)
|
前端开发 机器人 定位技术
在Unity中实现小地图(Minimap)
小地图的基本概念众所周知,小地图(或雷达)是用于显示周围环境信息的。首先,小地图是以主角为中心的。其次,小地图上应该用图标来代替真实的人物模型,因为小地图通常很小,玩家可能无法看清真实的模型。大多数小地图都是圆形的,所以本文也将创建圆形小地图。
3438 0
|
机器学习/深度学习 定位技术
unity2018使用tileMap生成地图 类似泰拉瑞亚创建和销毁地图块
using System.Collections; using System.Collections.Generic;using UnityEngine;using UnityEngine.Tilemaps; public class CreateTileMap : MonoBehaviour {...
2977 0