对少时步步高RPG回合制游戏的甚是怀念,但是现在找一些当时的游戏来玩发现画面已经完全吸引不了我了,特别是最原始的黑白版伏魔记、侠客行之类的,剧情甚是不错但是却没有了要玩的激情,所以就想在自己业余的时间来尝试研究研究,如果有时间或许能做一个3D版的自己娱乐娱乐。

 
       3D的游戏,控制移动还是鼠标点击人物朝向移动比较靠谱,本月的训练营有实现奥,不会的可以问我,不多说,本文研究的内容是回合制的简单实现。在网上搜集了一些资料,看了一些代码,发现秦元培博客写的比较简单,但是逻辑稍带有点小bug,我稍加修改了一下,也改了动画的播放方式,不过秦大神的方法简洁易懂,省了我很多功夫,下面就让我来大体介绍一下我这个小Demo。

       为了方便,直接把本月训练营赵信的模型动画取过来用了,首先添加动画组件animator,配置一下状态机,给人物添加一个动画,例如下图这样:
   
       需要不断重复播放的动画,就是闲置状态,如果可以随时中断的动画则取消勾选Exit Time,还有添加一些状态的参数,animator和animation属性,需要的话自己好好研究一下,我了解的也不是很深刻。
       那现在只剩下代码部分了,player部分(放到主角上的脚本):
usingUnityEngine;
usingSystem.Collections;publicclassPlayer : MonoBehaviour {publicintHP = 100;//等待玩家操作publicboolisWaitPlayer = true;publicboolifUIshow = true;//动画组件privateAnimator mAnim;// Use this for initializationvoidStart () {mAnim = GetComponent<Animator>();mAnim.SetBool ("idle",true);}//伤害voidOnDamage(intmValue){HP -= mValue;}voidOnGUI(){//如果处于等待状态,则显示操作窗口if(isWaitPlayer && ifUIshow) {GUI.Window (0, newRect (Screen.width / 2 + 150, Screen.height / 2 + 150, 200, 200), InitWindow, "请选择技能");mAnim.SetBool ("skill",false);mAnim.SetBool ("idle",true);}}voidInitWindow(intID){if(GUI.Button (newRect (0, 20, 200, 30), "飞剑斩")) {mAnim.SetBool("idle",false);mAnim.SetBool ("skill",true);//交换操作权isWaitPlayer = false;ifUIshow = false;}if(GUI.Button (newRect (0, 50, 200, 30), "降魔伏法")) {mAnim.SetBool("idle",false);mAnim.SetBool ("skill",true);//交换操作权isWaitPlayer = false;ifUIshow = false;}}// Update is called once per framevoidUpdate () {}
}
Monster(放到怪物上的脚本):
usingUnityEngine;
usingSystem.Collections;publicclassMonsterAttackAI : MonoBehaviour {publicintHP = 100;publicboolisWaitPlayer = true;//动画组件//private Animation mAnimation;privateAnimator mAnim;// Use this for initializationvoidStart () {mAnim = GetComponent<Animator>();mAnim.SetBool ("enemyIdle",true);}voidOnDamage(intmValue){HP -= mValue;}//敌人AI算法publicvoidStartAI(){if(!isWaitPlayer) {if(HP > 20) {//80%if(Random.Range (1, 5) % 5 != 1) {mAnim.SetBool("enemyIdle",false);mAnim.SetBool("enemyAttack",true);//ondamageisWaitPlayer = true;}//20%else{mAnim.SetBool("enemyIdle",false);mAnim.SetBool("enemyAttack",true);isWaitPlayer = true;}}else{switch(Random.Range (1, 5) % 5) {case0:mAnim.SetBool("enemyIdle",false);mAnim.SetBool("enemyAttack",true);isWaitPlayer = true;break;}}}}// Update is called once per framevoidUpdate () {if(isWaitPlayer) {mAnim.SetBool("enemyIdle",true);mAnim.SetBool("enemyAttack",false);}}
}

剩下的就是综合控制的脚本:

usingUnityEngine;
usingSystem.Collections;publicclassControl : MonoBehaviour {//动画组件privateAnimator mAnim;//定义玩家及敌人publicTransform mPlayer;publicTransform mEnemy;//定义玩家及敌人脚本类privatePlayer playerScript;privateMonsterAttackAI enemyScript;//默认操作状态为玩家操作privateOperatorState mState = OperatorState.Player;//定义操作状态枚举publicenumOperatorState{Quit,EnemyAI,Player}// Use this for initializationvoidStart () {mAnim = mPlayer.GetComponent<Animator> ();//获取玩家及敌人脚本类playerScript = mPlayer.GetComponent<Player>();enemyScript = mEnemy.GetComponent<MonsterAttackAI> ();}//UI延迟4.5秒调出IEnumerator WaitUI(){yieldreturnnewWaitForSeconds (4.5F);enemyScript.isWaitPlayer = true;playerScript.ifUIshow = true;}//IEnumerator WaitAI(){yieldreturnnewWaitForSeconds (2.0F);enemyScript.isWaitPlayer = false;}//为怪物AI延迟3秒IEnumerator UpdateLater(){yieldreturnnewWaitForSeconds(3.0F);//敌人停止等待enemyScript.isWaitPlayer = false;//敌人执行AIenemyScript.StartAI();}// Update is called once per framevoidUpdate () {//如果敌我双方有一方生命值为0,则游戏结束if(playerScript.HP == 0) {mState = OperatorState.Quit;Debug.Log ("游戏失败");}elseif(enemyScript.HP == 0) {mState = OperatorState.Quit;Debug.Log ("游戏胜利");}else{switch(mState) {caseOperatorState.Player:if(!playerScript.isWaitPlayer) {StartCoroutine ("UpdateLater");StartCoroutine ("WaitUI");mState = OperatorState.EnemyAI;}break;caseOperatorState.EnemyAI:if(enemyScript.isWaitPlayer) {StartCoroutine ("WaitAI");playerScript.isWaitPlayer = true;mState = OperatorState.Player;mAnim.SetBool ("skill",false);mAnim.SetBool ("idle",true);}break;}}}
}

总结:本demo只是为了理一下回合制游戏实现方式的思路,以便以后快速解决这方面的问题,希望小伙伴们多多支持!!!

Unity快速实现回合制游戏相关推荐

  1. 基于cocos2d-x的快速的游戏开发--回合制游戏

    2019独角兽企业重金招聘Python工程师标准>>> #基于cocos2d-x的快速的游戏开发--回合制游戏 开发时间:3天 开发工具:cocos2d-x和cocostudio 开 ...

  2. Unity回合制游戏集合

    Unity回合制游戏集合 Order of Battle: World War II Order of Battle: World War II is a breath of fresh air fo ...

  3. php 开发回合游戏,Unity回合制游戏战斗模块的制作

    回合制游戏相信大家没玩过也见过,了解它的玩法.回合制,那就是你来我回的,你一回合我一回合,直到把对方打败.市面上的回合制游戏比较经典的有梦幻西游,问道,神武,完美世界.这几个都还是很不错的.回到正题, ...

  4. html回合战斗源码,unity回合制游戏战斗demo源码

    压缩包内容概览: unity回合制游戏战斗demo src ; 汇编-C夏普编辑器 ; C夏普组件 ; 资产 ; 图书馆 ; 项目设置 ; 测试回合.C Sharp ; 测试回合.C Sharp.编辑 ...

  5. 对回合制游戏的探讨以及想法

    回合制作为游戏的一大类型最早火于<勇者斗恶龙>,该游戏作为经典的回合制拥         有着庞大的故事观和职业系统,玩家通过回合制的方式进行体验游戏,获取并推动者剧     情,在某个层 ...

  6. 回合制游戏网络通信协议及心跳机制调研

    回合制策略游戏 游戏后台网络通讯 游戏通信协议 网络同步 TCP UDP 心跳机制 原理 心跳检测步骤 应用层发送心跳包的技术 要关闭掉线的TCP连接 UDP与心跳 心跳包和轮询的区别 客户端如何快速 ...

  7. 天池 在线编程 回合制游戏(前缀和)

    文章目录 1. 题目 2. 解题 1. 题目 QW 是一个回合制游戏的玩家,今天他决定去打怪. QW 在一场战斗中会碰到 n 个怪物,每个怪物有攻击力 atk[i],每回合结束时如果第 i 个怪物还活 ...

  8. 今天开始做战斗,回合制战斗代码实现第一篇补充,从头开始,简单的2d回合制游戏一些文档方面的知识

    上一篇代码贴完了,总是感觉缺少些东西,因为光看代码用时候不是很直观,我们还是需要些文档来辅助理解.好了,所以补充些内容. 2009 年 8 月,<梦幻西游>同时最高在线人数达到 256 万 ...

  9. C语言模拟回合制游戏 源码

    源码下载地址: http://download.csdn.net/detail/monkey_uan/5115921 刚学C的作品,略带稚气,仅供参考学习,版权所有. #include<stdi ...

最新文章

  1. html 自动弹出框
  2. Linq 集合处理(Union)
  3. 2020年全国硕士研究生招生考试考生进入复试的初试成绩基本要求(学术学位类)
  4. gvim 编辑器初学
  5. ASP.NET与ASP.NET Core用户验证Cookie并存解决方案
  6. python实现数字时钟_Python 写的全屏数字时钟软件,看看还有什么改进的地方
  7. java获取mysql时间格式化_Java与mysql的时间格式化问题,获取时间的上下午
  8. 渗透测试攻击(一)Arp中间人攻击 伪装网关 截获 上网信息用户名密码
  9. PipedInputStream/PipedOutputStream
  10. 根据不同条件查询_好用的大数据即席查询工具——秒级响应
  11. 从零开始搭建我的网上商城 - Pika商城
  12. -stdcall详解
  13. 用计算机计算教学反思,计算器教学反思
  14. hyperv怎么复制文件到linux,Hyper-V快速复制虚拟机
  15. 快排优化代码__2018.07.26
  16. HSV色彩空间筛选 2021-10-06
  17. 【时间序列聚类】KMedoids聚类+DTW算法
  18. 框架(Framework)
  19. SOLIDWOKS文件高版本转低版本,导入ADAMS的注意事项
  20. 犀牛插件-获取曲面表面点-Python-坐标点数组-rhino插件

热门文章

  1. kernel printk的打印等级
  2. 如何正确构思治具夹具的结构
  3. ionic自动生成icon和splash
  4. 三维激光扫描系统基本原理及分类
  5. 键盘修改改器绿化版免安装
  6. 2019前端开发面试问题及答案整理
  7. Android动态底部导航
  8. Vue实现markdown编辑器
  9. SpringSecurityOauth2授权模式与使用RSA非对称加密方式生成公钥私钥
  10. 阿里云大数据组件选型