iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
生成式 AI

生成式AI輔助電子遊戲製作系列 第 29

D29 /暗影刺客技能實做

  • 分享至 

  • xImage
  •  

在昨天的文章中我們有設定了幾個不同的敵人的角色形象跟技能,今天我想聽挑一個角色時做出來,這裡一樣先問ChatGPT給我一個範例。

幫我用之前的技能架構時做暗影刺客(Shadow Assassin)的技能

根據你之前的技能架構,下面將會為「暗影刺客(Shadow Assassin)」設計對應的技能實現。首先,我們會使用之前的 ISkill 介面,然後實現該角色的三個技能:致命一擊(Fatal Strike)暗影隱身(Shadow Cloak)毒刃(Poisoned Blade)

技能介面 (ISkill)

這是之前設計的 ISkill 介面,用來定義所有技能的基本操作:

public interface ISkill
{
    void UseSkill(Character user, Character target);
}

暗影刺客的技能實現

  1. 致命一擊(Fatal Strike)
    • 這個技能對單個敵人造成巨大的物理傷害,如果敵人的血量低於20%,還有可能直接擊倒對方。
public class FatalStrike : ISkill
{
    public void UseSkill(Character user, Character target)
    {
        float damage = user.AttackPower * 2.0f; // 200%攻擊力傷害
        target.TakeDamage(damage);

        // 如果目標生命值低於20%,則有可能直接擊倒
        if (target.Health < target.MaxHealth * 0.2f)
        {
            Debug.Log("Fatal Strike: Direct kill chance activated!");
            target.Health = 0; // 直接擊殺
        }

        Debug.Log($"{user.Name} 使用了 致命一擊 對 {target.Name} 造成 {damage} 點傷害");
    }
}
  1. 暗影隱身(Shadow Cloak)
    • 這個技能讓角色進入隱身狀態,隱身後的攻擊力增加。
public class ShadowCloak : ISkill
{
    public void UseSkill(Character user, Character target)
    {
        user.IsInvisible = true; // 設置隱身狀態
        user.AttackPower *= 1.5f; // 攻擊力提升50%

        Debug.Log($"{user.Name} 使用了 暗影隱身,攻擊力提升!");
    }
}
  1. 毒刃(Poisoned Blade)
    • 給武器塗上劇毒,對敵人造成持續毒性傷害,毒性會在幾回合內生效。
public class PoisonedBlade : ISkill
{
    private int poisonDuration = 4; // 持續4回合
    private float poisonDamagePerTurn = 30.0f; // 每回合30點毒性傷害

    public void UseSkill(Character user, Character target)
    {
        target.ApplyPoison(poisonDuration, poisonDamagePerTurn);
        Debug.Log($"{user.Name} 使用了 毒刃,對 {target.Name} 造成持續毒性傷害!");
    }
}

Character 類的擴展

為了支援這些技能,你需要在 Character 類中擴展一些屬性,比如 IsInvisibleApplyPoison 方法等:

public class Character
{
    public string Name { get; private set; }
    public float Health { get; set; }
    public float MaxHealth { get; private set; }
    public float AttackPower { get; set; }
    public bool IsInvisible { get; set; }

    // 基本構造函數
    public Character(string name, float maxHealth, float attackPower)
    {
        Name = name;
        MaxHealth = maxHealth;
        Health = maxHealth;
        AttackPower = attackPower;
        IsInvisible = false;
    }

    // 承受傷害
    public void TakeDamage(float damage)
    {
        Health -= damage;
        if (Health < 0) Health = 0;
        Debug.Log($"{Name} 受到了 {damage} 點傷害,剩餘血量: {Health}");
    }

    // 毒性傷害的應用
    public void ApplyPoison(int duration, float damagePerTurn)
    {
        StartCoroutine(ApplyPoisonCoroutine(duration, damagePerTurn));
    }

    private IEnumerator ApplyPoisonCoroutine(int duration, float damagePerTurn)
    {
        for (int i = 0; i < duration; i++)
        {
            TakeDamage(damagePerTurn);
            yield return new WaitForSeconds(1.0f); // 模擬每回合的延遲
        }
    }
}

使用技能的邏輯

在你的 PlayerControllerAIController 中,你可以讓角色使用技能。比如,當玩家或AI控制的暗影刺客進行攻擊時,會根據情況選擇使用不同的技能。

public class PlayerController : MonoBehaviour
{
    public Character player;
    public Character enemy;

    private ISkill fatalStrike;
    private ISkill shadowCloak;
    private ISkill poisonedBlade;

    void Start()
    {
        player = new Character("Shadow Assassin", 100, 20);
        enemy = new Character("Enemy", 120, 15);

        fatalStrike = new FatalStrike();
        shadowCloak = new ShadowCloak();
        poisonedBlade = new PoisonedBlade();
    }

    void Update()
    {
        // 例如:當玩家按下某個按鍵時,使用相應技能
        if (Input.GetKeyDown(KeyCode.Alpha1))
        {
            fatalStrike.UseSkill(player, enemy);
        }
        else if (Input.GetKeyDown(KeyCode.Alpha2))
        {
            shadowCloak.UseSkill(player, enemy);
        }
        else if (Input.GetKeyDown(KeyCode.Alpha3))
        {
            poisonedBlade.UseSkill(player, enemy);
        }
    }
}

小結

通過這種方式,你可以實現不同敵人角色的技能,並且通過接口和多態性的設計,讓技能系統靈活可擴展。同時,你也可以為每個角色設計專屬的技能並輕鬆調整屬性。這些技能有相應的持續效果、狀態變化和邏輯,非常適合奇幻背景的遊戲設計。


上一篇
D28 /敵人角色及技能設計
下一篇
D30 /修昨天的技能bug
系列文
生成式AI輔助電子遊戲製作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言