FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】抽象クラスの簡単な使い方。抽象クラスとはなんぞや? 

    おはようございます。坂内です。

    全国雨のようで、じめじめした1日になりそうですね!
    そういえば、今年もBitsummitを実施するようです。

    https://bitsummit.org/ja/%e3%82%a4%e3%83%b3%e3%83%87%e3%82%a3%e3%83%bc%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%ae%e7%a5%ad%e5%85%b8%e3%80%8cbitsummit-the-8th-bit%e3%80%8d-%e3%83%87%e3%83%99%e3%83%ad%e3%83%83%e3%83%91%e3%83%bc/

    デベロッパー、パブリッシャー、メディア限定らしいですけどね。
    これ、一応俺もいけるのかな?
    行くかわかりませんが・・・・

    さて、本日は抽象クラスを簡単に紹介します。

    抽象クラスとはなんぞや?

    「抽象メソッドを1つ以上もっているクラス」のことです。

    では、抽象メソッドとは??

    「実装はしないが、メソッドの規約だけを定義したメソッド」のことです。

    はい、何を言っているのか分からない人いますね。


    実際にコードをみてみましょう。

    [Enemy.cs]

    using UnityEngine;

    public abstract class Enemy : MonoBehaviour
    {
    protected string _name;
    protected int _exp;
    protected int _money;

    public Enemy(string name, int exp, int money) {
    _name = name;
    _exp = exp;
    _money = money;
    }

    public abstract void Attack();

    public void ShowStatus() {
    Debug.Log("なまえ:" + _name);
    Debug.Log("経験値:" + _exp);
    Debug.Log("所持金:" + _money);
    }
    }



    ここでは、Attackのメソッドがabstractになっており、処理が書かれていません。
    これが抽象メソッドです。
    「Enemyを継承して作るクラスには、Attackという名前の処理が書かれているメソッドが必要だよ」という感じになっています。

    では、Enemyを継承したクラスを見てみましょう。

    [Slime.cs]

    using UnityEngine;

    public class Slime : Enemy
    {
    public Slime(string name, int exp, int money) : base(name, exp, money) {
    // コンストラクタ
    }

    public override void Attack() {
    Debug.Log("スライムの攻撃");
    }
    }



    Enemyを継承したSlimeというクラスを作成しました。
    先ほどの抽象メソッド「Attack」をoverrideで処理を書いてますが、Attackを書かないとエラーになります。
    「親クラスでabstractのメソッドは子のクラスで処理を書いてね」ってことですね。
    overrideで処理を書きましょ。

    では、実際にSlimeクラスのオブジェクトを作って、AttackやShowStatusをやってみます。

    [Blog20210517.cs]

    using UnityEngine;

    public class Blog20210517 : MonoBehaviour
    {
    void Start()
    {
    Slime slime = new Slime("スライム", 100, 50);
    slime.Attack();
    slime.ShowStatus();
    }
    }





    こんな感じになります。

    もちろん別の敵を作成もEnemyクラスを継承して作ります。

    Enemyを継承にして敵のクラスを作る場合は、絶対にAttackの処理を書かないといけないという制約が作れます。

    これが抽象クラスの基本的な使い方になります。

    ということで、今日はここまで!あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/794-56a624ae
    この記事にトラックバックする(FC2ブログユーザー)