Unityに関連する記事です

Unityでアイテムを拾う機能を実装しよう

 
 初心者の方でも理解できるように、「アイテムを拾う」という機能を実装するための手順を説明します。
この記事では以下の順序で進めていきます。


 1.設計とアルゴリズム
 2.ゲームオブジェクトをアイテムとして振る舞わせるためのクラスの考え方
 3.サンプルのソースコードを作成
 4.ゲームオブジェクトにクラスを使って役割を与えるという考え方


1.設計とアルゴリズム


 アイテムを拾う機能を実装するには、以下のアルゴリズムを考えます。


 1.アイテムを表すゲームオブジェクトを作成します。
 2.プレイヤーがアイテムに触れると、アイテムが消える(拾われる)ようにします。
 3.アイテムが消えたときに、プレイヤーがアイテムを所持していることを示す処理を追加します。


 このように日本語で作りたい機能を考えていくことが大切です。最初のうちはノートやスクリプトなどにコメントとして書くとよいでしょう。
どういったものを作りたいのかという明確なイメージが作れないと、そもそも、プログラムを書くという次のフェーズに移れないためです。


2.ゲームオブジェクトをアイテムとして振る舞わせるためのクラスの考え方


 アイテムとして振る舞わせるためには、新しいクラスを作成してゲームオブジェクトにアタッチすることで実現できます。
これにより、ゲームオブジェクトにアイテムとしての性質や振る舞いを追加することができます。


3.サンプルのソースコードを作成


 ここでは、アイテムを拾う機能を実現するためのサンプルコードを示します。
このコードは、アイテムクラスとプレイヤークラスの2つのクラスで構成されています。


1.アイテムクラス


 まず、アイテムクラスを作成します。


 このコードは、Unityエンジンで動作する簡単なアイテム収集システムを実装するものです。

 まず、必要な名前空間をインポートします。

using UnityEngine;



 次に、Itemという名前のクラスを定義し、MonoBehaviourを継承しています。MonoBehaviourは、Unityエンジンでゲームオブジェクトに機能を追加するための基本クラスです。

public class Item : MonoBehaviour



 OnTriggerEnterメソッドは、コライダー同士が接触した瞬間に呼び出されるメソッドです。
この場合、他のオブジェクトのコライダーがアイテムのコライダーに触れると、このメソッドが実行されます。

private void OnTriggerEnter(Collider other)



 次に、other.CompareTag("Player")という条件分岐を使用して、接触したオブジェクトがプレイヤーであるかどうかを判定しています。
もしプレイヤーであれば、次の処理が実行されます。

 条件分岐は大切です。
この処理がなければ、アイテムに接触したオブジェクトがプレイヤー以外であっても、アイテムを拾うことができてしまうためです。

if (other.CompareTag("Player"))



 プレイヤーがアイテムに触れた場合、other.GetComponent<Player>().PickUpItem();で、
プレイヤーのPlayerコンポーネントのPickUpItemメソッドを呼び出します。これにより、プレイヤーはアイテムを拾う処理を実行します。

other.GetComponent<Player>().PickUpItem();



 最後に、Destroy(gameObject);でアイテムを破壊(削除)します。これにより、アイテムがプレイヤーによって拾われた後、シーンから消えることになります。

Destroy(gameObject);


2.プレイヤークラス


 次に、プレイヤークラスを作成します。


 まず、必要な名前空間をインポートします。

using UnityEngine;



 Playerという名前のクラスを定義し、MonoBehaviourを継承しています。
これにより、このクラスをゲームオブジェクトにアタッチできるようになります。

public class Player : MonoBehaviour



 itemCountという名前のプライベート整数型変数を定義し、0で初期化しています。
これは、プレイヤーが拾ったアイテムの数を保持するための変数です。

private int itemCount = 0;



 PickUpItemメソッドは、プレイヤーがアイテムを拾った際に呼び出されるパブリックメソッドです。
自作しているメソッドであるため、いずれかのクラスから実行命令を受けるまでは動作しません。

public void PickUpItem()



 このメソッドでは、まずitemCount変数の値をインクリメント(1増加)させています。
これにより、アイテムを拾ったことが記録されます。

itemCount++;



 最後に、Debug.Logを使って、拾ったアイテムの情報をUnityのコンソールに出力しています。
これにより、アイテムを拾ったときに現在のアイテム数が表示されるようになります。

Debug.Log("アイテムを拾いました!現在のアイテム数:" + itemCount);

 このPlayerクラスをプレイヤーのゲームオブジェクトにアタッチすることで、アイテムを拾った際の処理が実行されます。
また、先程のItemクラスのPickUpItemメソッド呼び出しによって、プレイヤーがアイテムを拾う処理が連動して動作することになります。

 1つのクラスですべて完結させるのではなく、それぞれのクラスには役割があり、それを活用するという手法でロジックを考えていきます。


4.ゲームオブジェクトにクラスを使って役割を与えるという考え方


 作成したアイテムクラスとプレイヤークラスをそれぞれのゲームオブジェクトにアタッチすることで、役割を与えることができます。

 具体的な手順は以下の通りです。

 1.Unityエディタ上でアイテムオブジェクトを作成し、アイテムクラス(Item.cs)をアタッチします。
 2.アイテムオブジェクトにコライダー(例: BoxCollider)を追加し、IsTriggerを有効にします。また、タグを"Item"に設定します。
 3.プレイヤーオブジェクトにプレイヤークラス(Player.cs)をアタッチします。プレイヤーにもコライダーを追加し、タグを"Player"に設定します。

 これで、プレイヤーがアイテムに触れるとアイテムが消え、プレイヤーがアイテムを拾ったことが示されるようになります。

 このように、ゲームオブジェクトにクラスをアタッチすることで役割を与えることができます。


ゲームオブジェクトに名前をつけるだけでは役割が与えられない


 初心者の方は、ゲームオブジェクトに名前をつけるだけで、それが自動的にゲーム内で役割を持つと考えがちですが、
実際にはそうではありません。Unityでゲームオブジェクトに役割を与えるためには、名前だけでなく、
オブジェクトにコンポーネントやスクリプトを追加して、振る舞いを定義する必要があります。

 この部分をしっかりと理解してください。


名前だけではなく、内容が伴ったゲームオブジェクトにする方法


 名前だけでなく、内容が伴ったゲームオブジェクトを作成するためには、以下の手順を踏みます。

 1.ゲームオブジェクトに名前をつける。
 2.ゲームオブジェクトに必要なコンポーネント(例:コライダー、リジッドボディ)を追加する。
 3.ゲームオブジェクトにアタッチするためのスクリプトを作成し、そのスクリプト内で振る舞いを定義する。
 4.作成したスクリプトをゲームオブジェクトにアタッチする。

 例えば、先ほどの「アイテムを拾う」機能を実装する場合、以下のような手順でゲームオブジェクトに名前と役割を与えます。

 1.アイテムオブジェクトに「Item」という名前をつける。
 2.アイテムオブジェクトにコライダー(例:BoxCollider)を追加し、IsTriggerを有効にする。また、タグを"Item"に設定する。
 3.アイテムオブジェクトがプレイヤーに触れたときに消えるような振る舞いを定義したアイテムクラス(Item.cs)を作成する。
 4.アイテムクラス(Item.cs)をアイテムオブジェクトにアタッチする。

 このように、ゲームオブジェクトに名前をつけるだけではなく、コンポーネントやスクリプトを追加して振る舞いを定義することで、
内容が伴ったゲームオブジェクトを作成することができます。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます