オブジェクトとのプレイヤーの相互作用
メニューを表示するにはスワイプしてください
インターフェース
インターフェースは、クラスが実装しなければならないメソッドやプロパティのセットを定義する契約のようなもの。実装の詳細を提供せずに、クラスが持つべき機能を指定することができる。
例
Unityでゲームを作成していて、剣や銃、弓などさまざまな種類の武器を作りたいとする。IWeaponというインターフェースを作成し、すべての武器が実行できるべき基本的なアクション(Attack()やReload()など)を定義することができる。
これで、ゲーム内で武器と見なされるクラスはすべて、このインターフェースを実装する必要がある。たとえば、SwordクラスやGunクラスなどが考えられる。
インターフェースを使用することで、すべての武器に共通の基本機能(Attack() と Reload())を持たせつつ、それぞれ独自の実装を行うことができます。これにより、コードのモジュール性が高まり、ゲームが複雑になるにつれて管理しやすくなります。
これは、敵を攻撃可能なオブジェクトとしてマークするためにゲーム内で使用したインターフェースです。
public interface IGetAttacked
{
public void GetAttacked(int damage);
}
TryGetComponent
if (rayCastHit.transform.TryGetComponent(out IGetAttacked getAttacked))
{
getAttacked.GetAttacked(damage);
attackEffect.transform.position = rayCastHit.point;
attackEffect.Play();
isAttacking = false;
}
主なポイント
raycastHit: Unityでレイキャストを行った際のヒット結果を指す。レイを飛ばすことで、どのオブジェクトに当たったかの情報を取得できる。.TryGetComponent(out IGetAttacked getAttacked): このメソッドは、GameObjectのtransformから特定のコンポーネントを取得しようとする。outキーワードは、取得したコンポーネントを変数getAttackedに代入するために使われる。取得できなかった場合は、if文以下の処理は無視される。IGetAttacked: コードがGameObjectから取得しようとしているインターフェース型。GameObjectにIGetAttackedインターフェースを実装したコンポーネントが必要であることを示す。
レイキャストによってヒットした GameObject に IGetAttacked インターフェースを実装したコンポーネントがある場合、この行の実行後に getAttacked 変数はそのコンポーネントへの参照を保持します。そうでない場合、getAttacked には null が代入されます。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 2. 章 5
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 2. 章 5