【ハルシオンブログ】抽象クラスの簡単な使い方。抽象クラスとはなんぞや?
おはようございます。坂内です。
全国雨のようで、じめじめした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]
ここでは、Attackのメソッドがabstractになっており、処理が書かれていません。
これが抽象メソッドです。
「Enemyを継承して作るクラスには、Attackという名前の処理が書かれているメソッドが必要だよ」という感じになっています。
では、Enemyを継承したクラスを見てみましょう。
[Slime.cs]
Enemyを継承したSlimeというクラスを作成しました。
先ほどの抽象メソッド「Attack」をoverrideで処理を書いてますが、Attackを書かないとエラーになります。
「親クラスでabstractのメソッドは子のクラスで処理を書いてね」ってことですね。
overrideで処理を書きましょ。
では、実際にSlimeクラスのオブジェクトを作って、AttackやShowStatusをやってみます。
[Blog20210517.cs]

こんな感じになります。
もちろん別の敵を作成もEnemyクラスを継承して作ります。
Enemyを継承にして敵のクラスを作る場合は、絶対にAttackの処理を書かないといけないという制約が作れます。
これが抽象クラスの基本的な使い方になります。
ということで、今日はここまで!あでゅ~ノシ
全国雨のようで、じめじめした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)
« 【ハルシオンブログ】SuperTextMeshの文字送りアニメーションを途中で止めたかった | 【ハルシオンブログ】UnityのProject内の検索 »
コメント
| h o m e |