Unity3D 回合制 网上源码 目前还在研究构思
我們已將回合制的戰斗模式講解得很清楚了。那么,如果在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
轉載于:https://www.cnblogs.com/pengde/p/5336092.html
總結
以上是生活随笔為你收集整理的Unity3D 回合制 网上源码 目前还在研究构思的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FPGA DVB-S2 FEC 信道译码
- 下一篇: 小程序支持主体迁移了