unity 休闲华容道 NGUI写法和纯算法写法

 

NGUI碰撞来做华容道

1、四周边框加碰撞体,内部滑条可以随意按格摆放位子,做成预设

2、点击到滑条可以拖拽滑条,超出半格的距离并在对应方向45°差值以内松开可以直接往对应的方向移动

3、当红色滑条横移出去时,检测到出口点位发生碰撞即获得胜利。

4、复原即恢复最初点位

5、回退即返回上次的移动位置(每移动一次,增加一次步数,记录对应位置,可以用数组存储,二维数组,每个元素存储着对应滑条的对应位置,回退时删除当前下标最大的这个元素)

逻辑:

1、拖拽物体,点击发射射线,点击到滑条可以拖拽滑条,射线点击的位置生成点位,鼠标松开生成一条直线,直线超出半格的距离并在对应方向45°差值以内松开可以直接往对应的方向移动

2、2D碰撞,检测到发碰撞即停止物体的移动

3、由于界面缩放过于严重,实际碰撞体之间相撞显示未碰撞却输出碰撞,并差距较大,暂时放弃这个方法,实际上可以用这个方法,不过要把界面缩放比例调整大写

格子计算法做华容道

1、可调背景格子正方形的边长,对应滑条也发生相应变化,对应格子的单位长度直接计算出(即滑条每格移动的距离),滑条的种类三种,两格和三格的普通滑条,以及一个的红色滑条,只要红色滑条顶端进入3行6列的格子,游戏即胜利。

2、所有格子做成二维数组

3、木条占据的格子显示已填充

4、滑条做一个数组,存放每个元素即存放对应滑条所占据的格子

5、滑条移动的方向来查找滑条在该方向上占据的最前格子(eg:左右横向滑条,左就是draw[0],右就是draw[draw.length-1]),然后往前查找遍历,空几个就移几格单位的距离,如果不空则返回

Drag Move //

1、按下鼠标左键

2、摄像机发出射线

3、碰撞获取滑条

4、往需要移动的方向拖拽,鼠标的屏幕坐标从按下和抬起的两次的坐标根据对应滑条类型的来判定对应坐标轴的差距

距离达到一定标准则往对应方向移动

若是移动方向上占据的格子已经是6,则返回

否则调用UIPuzzle的单例方法来获取移动步数

步数不为空则,传入滑条自身脚本移动进行移动

WoodRig    //滑条自身脚本,负责移动,存储占据点位

UIPuzzle     //加载滑条,遍历所有格子二维数组为空:0,将滑条对应的数组置为已占据:1.   

方法:传入参数:滑条类型,移动的初始点位,移动的方向

         从初始点位和方向来判定行或者列的格子数组,从对应的点开始遍历,若为空则移动格数+1,不为空则返回,然后根据格数类型,把传入的初始点位移动对应格数,把原本占据的格子置空,再根据类型将现占据的格子置为已占据,返回移动步数

获取滑条的位置信息

根据方向判定存储点位和方向(轴和正负想)

再获取格子数组

开始根据点位  方向 

判定在移动方向的轴上是否为顶点,是则返回

开始遍历

下面三个脚本代码分别DragMove挂相机想检测鼠标事件,UIPuzzle挂父节点上用来克隆和计算滑条的,WoodRig挂滑条上用来存储滑条位置

链接:https://pan.baidu.com/s/1A6nNawizms0M805thWusXw?pwd=l3rw 
提取码:l3rw 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值