如何用unity3d 入门教程设计一个战棋游戏

游戏蛮牛学习群(纯技术交流,不闲聊):
扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
_____________________________________________________________________________________________________________
问答求助版块规则:
  1、问题尽量描述清楚
& && &2、代码要放在代码块里
& && &3、附件最好放到云盘,然后把链接放到TXT文档里,上传TXT文档。【最好没有附件,你懂得】
& && &4、本版块回复不得无意义,如:顶、呵呵、不错......以及擦边!【真的会扣分的哦】严重者,封IP!
& && &5、问题得到解决,请选择最佳答案。
& && &6、若问题是你自己解决了,可以联系管理员,返还蛮牛币,写下你的答案,另有蛮牛币奖赏。
_____________________________________________________________________________________________________________
查看: 560|回复: 5
Unity开发2D战棋类游戏,占多个格子的大单位A*寻路怎么做
5832/1000排名<font color="#FF昨日变化2主题帖子积分
熟悉之中, 积分 832, 距离下一级还需 168 积分
熟悉之中, 积分 832, 距离下一级还需 168 积分
蛮牛币1927
在线时间295 小时
如题,最近在研究战棋类游戏,单人寻路方式是用A*算法实现的 ,突然想起来有些大的BOSS会占据多个格子,想了下类似于占据2*2共四个格子的单位移动用A*算法怎么实现,几经思考,无果,特寻求大神帮助
每日推荐:
5832/1000排名<font color="#FF昨日变化2主题帖子积分
熟悉之中, 积分 832, 距离下一级还需 168 积分
熟悉之中, 积分 832, 距离下一级还需 168 积分
蛮牛币1927
在线时间295 小时
有没有大佬帮个忙啊
每日推荐:
61124/1500排名<font color="#FF昨日变化主题帖子积分
蛮牛粉丝, 积分 1124, 距离下一级还需 376 积分
蛮牛粉丝, 积分 1124, 距离下一级还需 376 积分
在线时间592 小时
同问 。。。
每日推荐:
5832/1000排名<font color="#FF昨日变化2主题帖子积分
熟悉之中, 积分 832, 距离下一级还需 168 积分
熟悉之中, 积分 832, 距离下一级还需 168 积分
蛮牛币1927
在线时间295 小时
同问 。。。
兄dei,找到了给个信息,谢了
每日推荐:
3210/300排名<font color="#FF昨日变化3主题帖子积分
偶尔光临, 积分 210, 距离下一级还需 90 积分
偶尔光临, 积分 210, 距离下一级还需 90 积分
在线时间72 小时
发表于 6&天前
把2*2当作一个节点,当每个节点中的四个小格中有不能移动的Wall时,这个节点就是不可移动的
[]: 一个袋子砸在了 afandadeyous 头上,afandadeyous 赚了 1
每日推荐:
3210/300排名<font color="#FF昨日变化3主题帖子积分
偶尔光临, 积分 210, 距离下一级还需 90 积分
偶尔光临, 积分 210, 距离下一级还需 90 积分
在线时间72 小时
发表于 6&天前
把2*2当作一个节点,当每个节点中的四个小格中有不能移动的Wall时,这个节点就是不可移动的。
每日推荐:像这种战棋游戏格子怎么实现比较节省资源。。。【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:87,792贴子:
像这种战棋游戏格子怎么实现比较节省资源。。。收藏
这个地面的蓝色格子指示可移动区域,鼠标移到上面会改变颜色 ,我暂时想到的是用quad面片,但场上总共有大约有300个格子,担心效率问题,不知道吧友有什么解决思路吗?
SiKi学院上有大量的项目案例课程,可以让学员随时随地学习!通过案例来从入门到深入的学习Unity!
看我召唤邪恶的吧主
几个格子不会占用什么资源的,你移动范围不会多大的吧,我看你这还不是手游,合并网格就行了
几百个又不多
楼主截图这个是什么游戏啊?最近也在做这种类型的游戏,想参考参考。
这玩意最大的瓶颈在于drawcall,因为这种格子一般都是要做透明的,而unity 的动态batching,对透明支持不是很好,格子一多,dc会很高
看到了空轨
进来水一贴
用gl的drawmesh
我成功的做出了类似的效果
你觉得这样性能怎么样
这样就可以了
一张贴图最省
一个大张画好所有网格贴图 想隐藏加个动态遮照有比这省的吗
楼主光提问,有解决办法不写出来;以后生娃没屁眼!
楼主,我最近在研究战棋类的游戏,能把你这实现的代码或者demo分享给我一下吗,我不商用,只是学习,我是学生
登录百度帐号求助,战棋类游戏制作
想做一款3D类型,画面精致的战棋类游戏打算用unity3D做,脚本语言是C#目的1是问问大家有么有这方面的经验,交流下。目的2是不知道怎么写,求指导。求大神们不吝赐教~~~
要评论请先&或者&
何为战棋类游戏?
战棋游戏的正式名称应为战略角色扮演主要特点是:回合制,在地图上按格移动人物进行作战的游戏。主要特色:侧重于策略,节奏较缓,耗时较长,画面绚丽,角色和技能较多。自己比较钟爱的一款是:阿玛迪斯战记
战旗核心就是A star算法,以这个算法进行扩展的一系列功能
魔喚精靈 &風色幻想 &三國志11
不知道怎么写……汗一个,那还是别考虑“画面精致”什么的,先从最简单的项目开始练吧,比如五子棋什么的,慢慢积累经验一上来就做超出自己能力的大项目,很容易半途遇到问题卡住,然后不了了之(转)【Unity3D游戏开发】—— iTween笔记 一(战棋寻路)
iTween这个动画库非常好用,用 它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等效果。
iTween下载则在Asset Store上搜索iTween并下载iTween Visual Editor然后Import即可。
下面是iTween官网:
这里是仿官网上一个战棋寻路的例子。
鼠标移动的方块上,方块抬起并变成绿色,移走则还原。点击方块后,方块下降并变为红色,然后小球并先延X轴移动,在延Z轴移动到鼠标点击位置。
基本思路步骤
1.9*9方格场景
2.格子上升下降动态效果
3.小球移动效果
下面是准备工作点击 GameObject -& Create Other -& Cube 创建一个正方体, 将其y轴的Scale改为0.2,这样就得到一个扁平的方块。然后添加一个tile标签,将Cube选中这个标签,最后将Cube拖入Project视图中,这样就建立了一个预设。
然后创建一个C#脚本
代码如下,注释很详细
using UnityE
using System.C
public class iTweenTest : MonoBehaviour {
public int size = 9;
public GameObject tileC
public GameO
private GameObject preT
Vector3[] wallPoint = new Vector3[2];
private GameObject shpereT
void Start () {
CreateGird();
void CreateGird()
for(int i = 0; i& i++)
for (int j = 0; j& j++)
GameObject t = (GameObject)Instantiate(tileCube, new Vector3(i, 0, j), Quaternion.identity);
if ((i + j) % 2 == 0)
iTween.ColorTo(t, Color.black, 0.5f);
void MoveToUp(GameObject obj)
if (preTile != obj && preTile != null)
iTween.MoveTo(preTile, new Vector3(preTile.transform.position.x, 0.0f, preTile.transform.position.z), 0.5f);
if ((preTile.transform.position.x +preTile.transform.position.z) % 2 == 0 )
iTween.ColorTo(preTile, Color.black, 0.5f);
iTween.ColorTo(preTile, Color.white, 0.5f);
if (obj.transform.position.y == 0)
iTween.ColorTo(obj, Color.green, 0.5f);
iTween.MoveTo(obj, new Vector3(obj.transform.position.x, 0.5f, obj.transform.position.z), 0.5f);
void MoveToPoint()
if (index & 2)
iTween.MoveTo(shpere, iTween.Hash("position", wallPoint[index], "speed", 10f, "easetype", "linear", "oncomplete", "MoveToPoint", "oncompletetarget",this.gameObject));
void Update () {
Ray ray = camera.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
if (shpereTile != null)
iTween.MoveTo(shpereTile.transform.gameObject, new Vector3(shpereTile.transform.position.x, 0.0f, shpereTile.transform.position.z), 0.5f);
iTween.ColorTo(shpereTile.transform.gameObject, Color.red, 0.5f);
if (hit.transform.tag == "tile")
print(hit.transform.position);
MoveToUp(hit.transform.gameObject);
if (Input.GetMouseButtonDown(0))
if (shpereTile != null)
if ((shpereTile.transform.position.x + shpereTile.transform.position.z) % 2 == 0)
iTween.ColorTo(shpereTile, Color.black, 0.5f);
iTween.ColorTo(shpereTile, Color.white, 0.5f);
shpereTile = hit.transform.gameO
index = 0;
wallPoint[0] = new Vector3(hit.transform.position.x, 0.5f, shpere.transform.position.z);
wallPoint[1] = new Vector3(hit.transform.position.x, 0.5f, hit.transform.position.z);
MoveToPoint();
if (preTile != null)
iTween.MoveTo(preTile, new Vector3(preTile.transform.position.x, 0.0f, preTile.transform.position.z), 0.5f);
if ((preTile.transform.position.x + preTile.transform.position.z) % 2 == 0)
iTween.ColorTo(preTile, Color.black, 0.5f);
iTween.ColorTo(preTile, Color.white, 0.5f);
这个例子运用到的iTween中函数有,MoveTo(), ColorTo(),一个是移动,一个是变色。
函数具体参数以及含义可以查阅iTween官方文档来学习,虽然是英文,也蛮基础的
作者:王大康
没有更多推荐了,recordMyGrowing()
从0开始搭建一个战棋游戏的AI(初级教程)
战棋类游戏一直以高策略性著称,其中不乏经典之作如“三国志英杰传”、“三国曹操传”、“炎龙骑士团”、“金庸群侠传”等等。
今天,我们就如何一步步从0开始实现一个简单的战棋类游戏AI,概述一下此类游戏AI的设计思路和算法。(什么?AI是啥?——人工智能,通俗来说就是电脑的自动策略。)
战棋类游戏的关卡设计思想
经典战棋类游戏一般来说AI都比较简单,丰富高可玩性的关卡和极限挑战难度,还是要靠关卡设计来做:比如什么时候敌方出援军、敌方某个据点什么时候出兵之类的驱动整个战局变化的。
这个由于是关卡设计者(一般是游戏策划)考虑的范畴,我们今天不讨论这个。光讨论一个NPC,每回合在正常情况下应该如何决策。
我们分析几款经典的战棋类游戏
分敌我回合,每回合自由选择角色先后行动顺序。
每回合一个角色可以做两件事——(移动+行为)
其中行为又可以细分为攻击、技能、休息、使用物品(可以给自己或身边的人使用)
2、炎龙骑士团
也分敌我回合,每回合玩家自由选择角色先后行动顺序。
还是一样,决策=移动+行为
行为细分为攻击、休息、魔法、物品(可以给自己或身边的人使用)
和曹操传不一样的地方是移动后不可以使用魔法(必须本回合停留原地才可以使用魔法)
3、金庸群侠传
无敌我回合,每回合按照角色的身法决定先后行动顺序。
决策=移动+行为
行为细分为攻击、用毒、解毒、医疗、物品、等待、休息……
其中等待可以将行动延后
不难发现,大部分战棋类游戏都遵循这个规则:单个回合内角色决策 = 移动 + 行动。
AI框架设计思路
我们本文并不想针对某个特定的游戏模式来做设计,而是想教大家一个简单的通用AI如何搭建——
因为大家构思和想做的游戏系统设定各异,(比如上面几款游戏,就分别有自己的各项特殊规则)
在此种情况下,我们其实可以搭建一个通用的计算模型,来“海纳百川”,实现一个与具体游戏业务逻辑无关的AI框架。
我们不妨先把技术的东东放一边,以一个玩家的角度来重现,每一个回合我们人类是如何思考的呢?
“我走到这里,下回合对方是不是可以走过来打到我?”
“我这一击刚好可以把对方秒杀,这样对方就不能反击我了!”
“我移动速度比对方快,我先跑回去补给完,然后再回来打”
“调整一下阵型!用防御力高的人在这个关卡上卡位,弓箭手在后方射。”
总之,决策基准就是如何行动对自己是最有利的。
我们可以给每一个行为决策,算出一个“得分”来,最后负分是有害、正分是有利。最终AI的结果就是选择得分最高的行为。
初级AI的本质是一个贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
通俗来说,贪心算法就是只看眼前,不看之后的情况。
所以如果我们只看眼前一步,那么问题就变得很简单:我如何下这一步棋获得当前的最高收益?
这样我们只需要将所有的行为结果都有一个评估的分数,然后遍历所有的行为可能,取得分最高的评估结果来决策即可。
1、分数评估体系搭建
如何来做这个分数评估体系?——不同的游戏可以有各自的设定:举个例子,比如如果某次行动击中3个敌人,每个人评估扣血100,那么总共算得300分。比如某次给队友加血,预估恢复技能能加150血,就算得150分……
所以某次行动的得分应该是本次行动所有影响的结果分数之和。(也可以根据具体需要,调整一些加权系数,后文说明)对自己有利则加分,对自己有害则减分(同理,对敌人有利减分,有害加分)
2、如何遍历?
很简单,战棋类游戏无非移动+行动,把所有可能走的点全部走一遍,走到了那儿后把所有可能的行动全部做一遍。如果有些行动设计到施展位置,把所有的施展位置全部算一遍即可。
这里如果效率太低,可以尽情对搜索算法剪枝,此处不赘述。
3、扩展和调优
有了以上两步,AI应该就可以跑起来了。我们接下来可以根据具体咱们游戏的设定来调优,让AI更加聪明。
拿刚才的例子,比如击中的3个敌人里有一个可以导致死亡(HP=0),那么额外再加200分(得分就是500了)。比如加血的队友血越少得分越高(优先给濒死的队友加血),那么当AI可以选择两个队友加血的时候,自然就会选择那个更加濒死的角色。
这里的设计就跟具体每个游戏相关,甚至更加复杂的话,还可以考虑地形、站位、AOE覆盖范围、加BUFF/DEBUFF、使用道具等各种情况。
这里还可以赋予不同的角色不同的使命,也只需要在最终的得分上体现即可(比如一个偏输出的攻击者,比一个偏防御的防御者在“减少敌方HP”的得分上有额外加权)
总之基于这个分数,可以做出一切有想象力的AI来,此处仁者见仁。
我们基于这个思路开发了《金庸群侠传X》和《江湖X》以及即将发布的《江湖X:汉家江湖》,基本AI是可用的(虽然由于游戏属性有点复杂,AI也经常被玩家吐槽)。
很多战斗变成了玩家的拦路虎
也会有一些由于AI给力被津津乐道的情况
最后祝大家开发愉快,有问题可以与我交流。
没有更多推荐了,

我要回帖

更多关于 unity制作战棋游戏 的文章

 

随机推荐