Unity快速实现回合制游戏
3D的游戏,控制移动还是鼠标点击人物朝向移动比较靠谱,本月的训练营有实现奥,不会的可以问我,不多说,本文研究的内容是回合制的简单实现。在网上搜集了一些资料,看了一些代码,发现秦元培博客写的比较简单,但是逻辑稍带有点小bug,我稍加修改了一下,也改了动画的播放方式,不过秦大神的方法简洁易懂,省了我很多功夫,下面就让我来大体介绍一下我这个小Demo。
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 () {}
}
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快速实现回合制游戏相关推荐
- 基于cocos2d-x的快速的游戏开发--回合制游戏
2019独角兽企业重金招聘Python工程师标准>>> #基于cocos2d-x的快速的游戏开发--回合制游戏 开发时间:3天 开发工具:cocos2d-x和cocostudio 开 ...
- Unity回合制游戏集合
Unity回合制游戏集合 Order of Battle: World War II Order of Battle: World War II is a breath of fresh air fo ...
- php 开发回合游戏,Unity回合制游戏战斗模块的制作
回合制游戏相信大家没玩过也见过,了解它的玩法.回合制,那就是你来我回的,你一回合我一回合,直到把对方打败.市面上的回合制游戏比较经典的有梦幻西游,问道,神武,完美世界.这几个都还是很不错的.回到正题, ...
- html回合战斗源码,unity回合制游戏战斗demo源码
压缩包内容概览: unity回合制游戏战斗demo src ; 汇编-C夏普编辑器 ; C夏普组件 ; 资产 ; 图书馆 ; 项目设置 ; 测试回合.C Sharp ; 测试回合.C Sharp.编辑 ...
- 对回合制游戏的探讨以及想法
回合制作为游戏的一大类型最早火于<勇者斗恶龙>,该游戏作为经典的回合制拥 有着庞大的故事观和职业系统,玩家通过回合制的方式进行体验游戏,获取并推动者剧 情,在某个层 ...
- 回合制游戏网络通信协议及心跳机制调研
回合制策略游戏 游戏后台网络通讯 游戏通信协议 网络同步 TCP UDP 心跳机制 原理 心跳检测步骤 应用层发送心跳包的技术 要关闭掉线的TCP连接 UDP与心跳 心跳包和轮询的区别 客户端如何快速 ...
- 天池 在线编程 回合制游戏(前缀和)
文章目录 1. 题目 2. 解题 1. 题目 QW 是一个回合制游戏的玩家,今天他决定去打怪. QW 在一场战斗中会碰到 n 个怪物,每个怪物有攻击力 atk[i],每回合结束时如果第 i 个怪物还活 ...
- 今天开始做战斗,回合制战斗代码实现第一篇补充,从头开始,简单的2d回合制游戏一些文档方面的知识
上一篇代码贴完了,总是感觉缺少些东西,因为光看代码用时候不是很直观,我们还是需要些文档来辅助理解.好了,所以补充些内容. 2009 年 8 月,<梦幻西游>同时最高在线人数达到 256 万 ...
- C语言模拟回合制游戏 源码
源码下载地址: http://download.csdn.net/detail/monkey_uan/5115921 刚学C的作品,略带稚气,仅供参考学习,版权所有. #include<stdi ...
最新文章
- html 自动弹出框
- Linq 集合处理(Union)
- 2020年全国硕士研究生招生考试考生进入复试的初试成绩基本要求(学术学位类)
- gvim 编辑器初学
- ASP.NET与ASP.NET Core用户验证Cookie并存解决方案
- python实现数字时钟_Python 写的全屏数字时钟软件,看看还有什么改进的地方
- java获取mysql时间格式化_Java与mysql的时间格式化问题,获取时间的上下午
- 渗透测试攻击(一)Arp中间人攻击 伪装网关 截获 上网信息用户名密码
- PipedInputStream/PipedOutputStream
- 根据不同条件查询_好用的大数据即席查询工具——秒级响应
- 从零开始搭建我的网上商城 - Pika商城
- -stdcall详解
- 用计算机计算教学反思,计算器教学反思
- hyperv怎么复制文件到linux,Hyper-V快速复制虚拟机
- 快排优化代码__2018.07.26
- HSV色彩空间筛选 2021-10-06
- 【时间序列聚类】KMedoids聚类+DTW算法
- 框架(Framework)
- SOLIDWOKS文件高版本转低版本,导入ADAMS的注意事项
- 犀牛插件-获取曲面表面点-Python-坐标点数组-rhino插件