Unity3D 回合制 网上源码 目前还在研究构思
2016-03-30 10:19
465 查看
我们已将回合制的战斗模式讲解得很清楚了。那么,如果在Unity3D游戏中实现一个回合制游戏呢?我们从最简单的一对一模式来设计回合制游戏的原型。我们可以游戏的状态划分为下面三种状态:
1、我方角色生命值为0,则游戏结束,角色输。
2、敌方角色生命值为0,则游戏结束,角色赢。
3、如果双方角色生命值均不为0,则反复执行下面的过程:
当当前操作状态为AI时,敌人根据AI算法逻辑行动
当当前操作状态为玩家时,根据玩家操作执行行动
这就是我们今天实现回合制游戏的算法原型。我们下面将根据这一原型来实现一个回合制游戏的示例。首先我们创建一个简单的游戏场景
我们已将回合制的战斗模式讲解得很清楚了。那么,如果在Unity3D游戏中实现一个回合制游戏呢?我们从最简单的一对一模式来设计回合制游戏的原型。我们可以游戏的状态划分为下面三种状态:
1、我方角色生命值为0,则游戏结束,角色输。
2、敌方角色生命值为0,则游戏结束,角色赢。
3、如果双方角色生命值均不为0,则反复执行下面的过程:
当当前操作状态为AI时,敌人根据AI算法逻辑行动
当当前操作状态为玩家时,根据玩家操作执行行动
这就是我们今天实现回合制游戏的算法原型。我们下面将根据这一原型来实现一个回合制游戏的示例。首先我们创建一个简单的游戏场景
接下里我们来讲解敌人AI的脚本,敌人需要在玩家执行结束后随机进行一个操作,所以这里需要用到概率,我们一起来看脚本:
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour {
//定义敌人最大生命值为100
public int HP=100;
public bool isWaitPlayer=true;
//当前回合数
private int index=1;
//动画组件
private Animation mAnimation;
void Start()
{
mAnimation=GetComponentInChildren<Animation>();
}
void OnDamage(int mValue)
{
HP-=mValue;
}
/// <summary>
/// 执行敌人的AI算法
/// </summary>
public void StartAI()
{
if(!isWaitPlayer)
{
if(HP>20)
{
//80%的攻击招式一
if(Random.Range(1,5)%5!=1)
{
Debug.Log("在第"+index+"回合:敌人使用了攻击招式一");
mAnimation.Play("Howl");
//在这里加上特效和伤害
index+=1;
isWaitPlayer=true;
}
//20%的攻击招式二
else
{
Debug.Log("在第"+index+"回合:敌人使用了攻击招式二");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
}
}else
{
switch(Random.Range(1,5)%5)
{
case 0:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式三");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
case 1:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式四");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
case 2:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式五");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
}
}
}
}
}
类似地,我们在这里使用一个bool类型的变量isWaitPlayer来表示敌人是否处于等待玩家执行操作的状态,如果该值为false,则表明玩家已经执行完操作,此时敌人应该按照AI算法来实现随机的攻击,其中概率部分的代码如下:
Random.Range(1,5)%5!=1 这一句代码表示80%的概率,因为只有Random.Range(1,5)返回值为5时结果才会为1。如果我们以后希望在游戏中为敌人增加概率,我们都可以使用这种方法。游戏中使用概率的地方还是比较多的,比如在仙剑奇侠传游戏中的逃跑率、暴击率、避让率都是通过这种方式来实现的。大家可能注意到了我在这两个脚本中所有技能或者招式都是使用了一个动画,这当然是为了简化程序,让我们专注于游戏的核心实现,这一点希望大家谅解啊,而在两个脚本中的回合数index主要是为了调试程序的方便,具体应用中可以不用这个变量。好了,在介绍完玩家和敌人的脚本后,我们一起来看今天的核心脚本——TurnGame脚本:
using UnityEngine;
using System.Collections;
public class TurnGame : MonoBehaviour {
/// <summary>
/// 回合制游戏战斗模式原型
/// 说明:本程序以最简单一对一回合制游戏为例,基于Unity3D游戏实现回合制游戏算法
/// 如果需要实现多人对多人的回合制游戏算法,需要设计行动条算法
/// 基本的思路是将游戏状态划分为三种状态:
/// 1、我方角色生命值为0,游戏结束,玩家输
/// 2、敌方角色生命值为0,游戏结束,玩家赢
/// 3、双方生命值均不为0,则循环执行下列过程:
/// 当当前操作状态为AI时,敌人根据AI算法逻辑行动
/// 当当前操作状态为玩家时,根据玩家操作执行行动
/// </summary>
//定义玩家及敌人
public Transform mPlayer;
public Transform mEnemy;
//定义玩家及敌人脚本类
private Player playerScript;
private EnemyAI
http://www.yxkfw.com/thread-3384-1-1.html
1、我方角色生命值为0,则游戏结束,角色输。
2、敌方角色生命值为0,则游戏结束,角色赢。
3、如果双方角色生命值均不为0,则反复执行下面的过程:
当当前操作状态为AI时,敌人根据AI算法逻辑行动
当当前操作状态为玩家时,根据玩家操作执行行动
这就是我们今天实现回合制游戏的算法原型。我们下面将根据这一原型来实现一个回合制游戏的示例。首先我们创建一个简单的游戏场景
我们已将回合制的战斗模式讲解得很清楚了。那么,如果在Unity3D游戏中实现一个回合制游戏呢?我们从最简单的一对一模式来设计回合制游戏的原型。我们可以游戏的状态划分为下面三种状态:
1、我方角色生命值为0,则游戏结束,角色输。
2、敌方角色生命值为0,则游戏结束,角色赢。
3、如果双方角色生命值均不为0,则反复执行下面的过程:
当当前操作状态为AI时,敌人根据AI算法逻辑行动
当当前操作状态为玩家时,根据玩家操作执行行动
这就是我们今天实现回合制游戏的算法原型。我们下面将根据这一原型来实现一个回合制游戏的示例。首先我们创建一个简单的游戏场景
接下里我们来讲解敌人AI的脚本,敌人需要在玩家执行结束后随机进行一个操作,所以这里需要用到概率,我们一起来看脚本:
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour {
//定义敌人最大生命值为100
public int HP=100;
public bool isWaitPlayer=true;
//当前回合数
private int index=1;
//动画组件
private Animation mAnimation;
void Start()
{
mAnimation=GetComponentInChildren<Animation>();
}
void OnDamage(int mValue)
{
HP-=mValue;
}
/// <summary>
/// 执行敌人的AI算法
/// </summary>
public void StartAI()
{
if(!isWaitPlayer)
{
if(HP>20)
{
//80%的攻击招式一
if(Random.Range(1,5)%5!=1)
{
Debug.Log("在第"+index+"回合:敌人使用了攻击招式一");
mAnimation.Play("Howl");
//在这里加上特效和伤害
index+=1;
isWaitPlayer=true;
}
//20%的攻击招式二
else
{
Debug.Log("在第"+index+"回合:敌人使用了攻击招式二");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
}
}else
{
switch(Random.Range(1,5)%5)
{
case 0:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式三");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
case 1:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式四");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
case 2:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式五");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
}
}
}
}
}
类似地,我们在这里使用一个bool类型的变量isWaitPlayer来表示敌人是否处于等待玩家执行操作的状态,如果该值为false,则表明玩家已经执行完操作,此时敌人应该按照AI算法来实现随机的攻击,其中概率部分的代码如下:
Random.Range(1,5)%5!=1 这一句代码表示80%的概率,因为只有Random.Range(1,5)返回值为5时结果才会为1。如果我们以后希望在游戏中为敌人增加概率,我们都可以使用这种方法。游戏中使用概率的地方还是比较多的,比如在仙剑奇侠传游戏中的逃跑率、暴击率、避让率都是通过这种方式来实现的。大家可能注意到了我在这两个脚本中所有技能或者招式都是使用了一个动画,这当然是为了简化程序,让我们专注于游戏的核心实现,这一点希望大家谅解啊,而在两个脚本中的回合数index主要是为了调试程序的方便,具体应用中可以不用这个变量。好了,在介绍完玩家和敌人的脚本后,我们一起来看今天的核心脚本——TurnGame脚本:
using UnityEngine;
using System.Collections;
public class TurnGame : MonoBehaviour {
/// <summary>
/// 回合制游戏战斗模式原型
/// 说明:本程序以最简单一对一回合制游戏为例,基于Unity3D游戏实现回合制游戏算法
/// 如果需要实现多人对多人的回合制游戏算法,需要设计行动条算法
/// 基本的思路是将游戏状态划分为三种状态:
/// 1、我方角色生命值为0,游戏结束,玩家输
/// 2、敌方角色生命值为0,游戏结束,玩家赢
/// 3、双方生命值均不为0,则循环执行下列过程:
/// 当当前操作状态为AI时,敌人根据AI算法逻辑行动
/// 当当前操作状态为玩家时,根据玩家操作执行行动
/// </summary>
//定义玩家及敌人
public Transform mPlayer;
public Transform mEnemy;
//定义玩家及敌人脚本类
private Player playerScript;
private EnemyAI
http://www.yxkfw.com/thread-3384-1-1.html
相关文章推荐
- Unity5.3新Memory Profiler
- 【Unity】2.11 了解游戏有哪些分类对你开阔思路有好处
- 【Unity】2.10 利用VS2015编辑Unity的C#脚本
- 【Unity】2.9 光源(Lights)
- 【Unity】2.8 相机(Camera)
- 【Unity】2.7 检视器(Inspector)
- Unity的二进制热更新 (二)unity的运行原理
- 《Unity 游戏设计与实现 南梦宫一线程序员的开发实例》学习笔记01
- Unity ios、android、pc一键打包(三)
- Unity中简单使用Opengl
- Unity中简单使用Opengl
- Unity Shaders and Effects Cookbook (2-7)实现 Photoshop 色阶效果
- 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)
- 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)
- Unity3D编辑器插件编写
- 给unity设置字体
- unity3d 更换sprite renderer中sprite的图片
- Unity3D手游开发日记(7) - 适合移动平台的天气效果
- 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)
- 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)