衝突時の処理をアイテム側に移行したサンプル
コード
BasketController
using UnityEngine;
public class BasketController : MonoBehaviour
{
// オブジェクトがこのバスケットに触れたらアイテムを取得する
void OnTriggerEnter(Collider other)
{
other.GetComponent<ItemGetter>().TouchBasket();
}
// マウスの左ボタンがクリックされたときに実行される
void Update()
{
// マウスの位置からRayを作成して、オブジェクトがあるかどうかを調べる
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{
// Rayが当たった地点の座標を四捨五入して、バスケットの位置に設定する
float x = Mathf.RoundToInt(hit.point.x);
float z = Mathf.RoundToInt(hit.point.z);
transform.position = new Vector3(x, 0, z);
}
}
}
}
このスクリプトは、BasketControllerという名前のコンポーネントとして、Unityのゲームオブジェクトにアタッチされます。このスクリプトは、バスケットの位置をマウスクリックで変更するためのものです。また、バスケットにアイテムが入った時に、アイテム取得処理を実行するためのコードも含まれています。
ItemGetter
using UnityEngine;
public class ItemGetter : MonoBehaviour
{
public AudioClip appleSE; // 収穫したリンゴの効果音
public AudioClip bombSE; // 収穫した爆弾の効果音
GameObject director; // ゲームディレクターの参照を格納する変数
public AudioSource aud; // アイテム取得時に再生するオーディオソース
private void Start()
{
// ゲームオブジェクト "GameDirector" を検索して、参照を取得する
this.director = GameObject.Find("GameDirector");
}
public void TouchBasket()
{
if (gameObject.CompareTag("Apple")) // アイテムがリンゴの場合
{
// リンゴ収穫時の効果音を再生する
AudioSource.PlayClipAtPoint(appleSE, transform.position);
// ゲームディレクターにリンゴの収穫を通知する
this.director.GetComponent<GameDirector>().GetApple();
}
else // アイテムが爆弾の場合
{
// 爆弾収穫時の効果音を再生する
AudioSource.PlayClipAtPoint(bombSE, transform.position);
// ゲームディレクターに爆弾の収穫を通知する
this.director.GetComponent<GameDirector>().GetBomb();
}
// アイテムを削除する
Destroy(gameObject);
}
}
このコードは、Unityのスクリプトで、果物や爆弾のアイテムを取得するための処理を定義しています。ItemGetter
クラスは、アイテムがバスケットに入ったときに呼び出されるTouchBasket()
メソッドを持ちます。TouchBasket()
メソッドでは、アイテムがリンゴか爆弾かによって、収穫時の効果音を再生したり、ゲームディレクターにアイテムの収穫を通知したりする処理を行います。
ディスカッション
コメント一覧
まだ、コメントがありません