Unity|カードゲームの作成(ローグライク)。Part3.カードを使用(攻撃)

当ページのリンクには広告が含まれています。

Unity2Dでカードゲーム(ローグライク)を作成のPart3です。

はじめに

前回の続きのPart3を作成していきます。Part2は下記から。

前回まで「スクリプトでカードを生成」、「カードを管理するスクリプトの作成」をしました。Part3ではカードを使用して攻撃します。

利用する画像

下記画像を攻撃対象として利用します。Inkscapeで簡単に作成したブドウです。分かりやすいように敵キャラクターと位置づけます。

ゲーム作成開始

カードの使用先となるフルーツ(敵キャラ)を作成していきます。

攻撃対象(敵キャラ)の作成

空オブジェクトを追加して名前を「Enemy」に変更、名前は分かりやすければ「Fruit」でもOKです。

カードの時と同様に配下に「UI(Canvas)」→「Image」と「Text-TextMeshPro」を追加します。

カードの時と同様、サイズを変更して画像を指定します。

テキスト位置も変更して画像下に表示されるようにします。

カードスクリプトの変更

次にカードスクリプトを下記に変更して、カードをマウスで掴んで動かせるようにします(ドラッグアンドドロップ)。マウスを離したら元の位置に戻るように、コスト、ダメージを変数にしています。

using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;

public class Card : MonoBehaviour
{

    [SerializeField] private TMP_Text cost_Text;
    [SerializeField] private TMP_Text damage_Text;

    private int cost;
    private int damage;

    private Camera cam;
    private Vector2 initPos;

    private void Start()
    {
        // TEST
        cost = 1;
        damage = 3;
        cost_Text.text = cost.ToString();
        damage_Text.text = damage.ToString();

        cam = Camera.main;
    }
    private void OnMouseDown()
    {
        initPos = transform.position;
    }
    private void OnMouseDrag()
    {
        transform.position = (Vector2)cam.ScreenToWorldPoint(Mouse.current.position.ReadValue());
    }

    private void OnMouseUp()
    {
        transform.position = initPos;
    }
}

カードプレハブにBoxCollider2Dをアタッチ、コストとダメージの初期テキストを変更します。

試しに動かして、下記の様にマウスでカードを動かすことが出来ればOK。

カードを使用

次に新規スクリプトを作成「Enemy」とします。ライフ設定、ダメージを食らった時にライフ表示を変更しています。

using TMPro;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    [SerializeField] private TMP_Text health_Text;

    private int health;

    private void Start()
    {
        health = 7;
        HealthUpdate();
    }
    public void TakeDamage(int amount)
    {
        health -= amount;
        if (health < 0)
            health = 0;

        if (health == 0)
            Destroy(gameObject);

        HealthUpdate();

    }

    private void HealthUpdate()
    {
        health_Text.text = health.ToString();
    }
}

スクリプトをアタッチして、「BoxCollider2D」と「Rigidbody2D」をアタッチします。BoxCollider2Dは「isTrigger」にチェック、Rigidbody2DはBodyTypeを「Kinematic」にします。

Cardスクリプトに下記関数を追加します。カードを離した時、敵に接触していたら攻撃しています。

    private void OnMouseUp()
    {
        if (enemy != null)
        {
            enemy.TakeDamage(damage);
            Destroy(gameObject);
        }
        else
        {
            transform.position = initPos;
        }
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        image.color = new Color(image.color.r, image.color.g, image.color.b, 0.2f);
        enemy = collision.GetComponent<Enemy>();
    }
    private void OnTriggerExit2D(Collider2D collision)
    {
        image.color = new Color(image.color.r, image.color.g, image.color.b, 1f);
        enemy = null;
    }
}

実行して、カードをブドウに重ねて離した時に攻撃出来ればOK。

タイトルとURLをコピーしました