名古屋でアプリ・VR開発を行っています
ワクワクできるゲームをガンガン開発リリース中!

Unityで的あてゲームを作る時のお役立ち情報!

皆さん、こんにちは!SAT-BOXのツバメです。

今回は的あてゲームの的が当てた場所によって得点が違う時の得点を取得する簡単な方法についてご紹介しようと思います。

的はこのようなものです(適当に作ったやつです)
f:id:sat-box:20210810081556p:plain

1.どうやって加算するのか?

的に弾が当たったかどうかを判定する場合は単純にOnCollisionEnterで判定すれば問題ありません。ですが、弾が的のどこに当たったかを判定しなければいけません。

BoxColliderなどで判定する部分を細かく分ける方法も良いですが、今回の的は丸形です。
丸型に沿ってBoxColliderで分けるのは大変です。

2.Colliderを使わずに判定する方法

今回は弾が当たった時に弾の位置が的の中心からどのくらい離れているかを距離で判定しようと思います。

的のエリアごとにそれぞれ距離を予め決めておけば、どのエリアに弾が当たったかを判定する事が可能です。

以下、判定用のコードです。

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

public class Test : MonoBehaviour
{
	/// <summary>
	/// 的の中心点
	/// </summary>
	public Transform targetCenter;

	/// <summary>
	/// 的の各エリアの中心からの距離(中心に近い方から設定)
	/// </summary>
	private float[] targetDist = new float[5]
	{
		0.6f, 1.25f, 1.87f, 2.51f, 3.2f
	};

	/// <summary>
	/// 的の各エリアの得点(中心に近い方から設定)
	/// </summary>
	private int[] targetPoint = new int[5]
	{
		10, 5, 3, 2, 1
	};

        private void OnCollisionEnter(Collision collision)
        {
                 // 的の中心点から的に当たった場所までの距離を求める
		float dist = Vector3.Distance(collision.transform.position, targetCenter.position);

		for (int i = 0; i < targetDist.Length; i++)
		{
			if (dist <= targetDist[i])
			{
				Debug.Log(targetPoint[i] + "ポイント獲得!");
			}
		}
	}
}

f:id:sat-box:20210810173748p:plain
的の中心点からの距離は画像のように実際の座標で問題ありません。画像ではXが0.6になっていましたので、10のエリアは中心からの距離は0.6ということになります。

これで的の当たった場所ごとの得点が取れるようになりました!簡単ですね!
距離でやっているので、10ポイントのエリアが狭く1ポイントのエリアは広いといった的でも対応可能です!

以上、ツバメでした!