アイテムを拾う処理を実装してみた-経験ゼロのド素人が触るUnity日記

Unity:サムネイル画像8 ゲーム制作

前回でOnTriggerに関する不具合が直ったのでアイテムを拾う処理を実装します。

とはいえ前回までで大体が実装できているのでやることは少ないです。

設計

現状だと以下のことしかできません。

  • アイテムを拾える位置まで近づいたら検知
  • アイテムを拾えない位置まで離れたら検知

検知した後の処理が無いので考えます。

アイテムを拾える位置まで近づいた場合

この場合は2通りに場合分けします。

  • Aボタンを押した → アイテムを拾う
  • Aボタンを押してない → 何もしない

アイテムを拾えない位置まで離れた場合

この場合は何もしません。

それ以外の処理も必要ありません。

実装

以下のプログラムを使用しました。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

/* 周囲にアイテムがあるか判定するクラス */
public class SearchItem : MonoBehaviour {
	
//	UnityChan!のスクリプト「IsDestroy.cs」を参照
	public GameObject UnityChan;
	
	
//	アイテムを拾える位置まで近づいたときに起動
	void OnTriggerEnter(Collider col)
	{
//		離れたオブジェクトのタグが"Item"のとき
		if(col.tag == "Item")
		{
			UnityChan.GetComponent<IsDestroy>().SetItem(col.gameObject.transform.parent.gameObject);
			UnityChan.GetComponent<IsDestroy>().ChangeFlag(1);
		}
	}
	
//	アイテムを拾えない位置まで離れたときに起動
	void OnTriggerExit(Collider col)
	{
//		離れたオブジェクトのタグが"Item"のとき
        	if(col.tag == "Item")
            		UnityChan.GetComponent<IsDestroy>().ChangeFlag(0);
    	}
 
}
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

/* アイテムを破壊するクラス */
public class IsDestroy : MonoBehaviour {
	
//	メインカメラのスクリプト「ItemManager.cs」を参照
	public GameObject MainCamera;
	
//	アイテムプレハブ
	public GameObject Prefab;

//	アイテムを拾う判定
	public int flag = 0;
	
//	破壊対象のアイテム名
	private string i_name;
	
	
	void Update()
	{
		ItemDestroy();
	}
	
	
//	アイテムを拾ったか判定
	public void ItemDestroy()
	{
//		「a」が押された場合
		if(Input.GetKeyDown ("a"))
		{
//			OnTriggerEnter が起動している場合
			if(flag == 1)
			{
				MainCamera.GetComponent<ItemManager>().ItemPick(i_name);
				Destroy(Prefab);
				ChangeFlag(0);
			}
		}
	}
	
	
//	破壊対象のアイテムを設定
	public void SetItem(GameObject obj)
	{
		Prefab = obj;
		i_name = obj.name;
		i_name = i_name.Substring(0, i_name.IndexOf('('));
	}
	
	
//	アクション「アイテムを拾う」が有効か判定
	public void ChangeFlag(int _flag)
	{
//		OnTriggerEnter なら 1, OnTriggerExit なら 0 を設定
		flag = _flag;
	}
	
}

SearchItem.csはメインカメラのコンポーネントを使用するのでゲームオブジェクトにメインカメラを設定。

プレイヤーキャラクター(UnityChan!)の子要素のオブジェクトにも設定してます。

Unity:SearchItem.csにカメラを設定
SearchItem.csにカメラを設定

IsDestroy.csもメインカメラのコンポーネントを使用するのでゲームオブジェクトにメインカメラを設定。

IsDestroy.csはUnityChan!自体に取り付けます。

動作確認

仕様どおりに動作しました。

アイテムを拾う処理の動作確認

アイテムポーチは空でアイテムも無いので 空白 : 0 になっています。

ココナッツを拾ったところでアイテムポーチにココナッツが追加され、Coconut : 1 になります。

アイテムポーチを開いている状態でココナッツの画像を押すとアイテムを使用します。

アイテム関連の開発が終了したので、Unity日記はこれで終わりにしようと思います。

全体を通して、Webアプリ開発とは全然違ったから割と難しかったですが、C#に慣れることができたのは結構よかったです。

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