Unityで「簡単な3Dコイン落としゲーム」を作成するPart3を進めていきます。今回は「コインの発射位置の変更」、「落としたコインの数をカウント」を実装していきます。
はじめに
前回の続きのPart3を作成していきます。Part2は下記から。
Part1ではコインの生成を作成、Part2ではコインを押す土台の作成を行いました。
作成開始
Part3では「コインの発射位置の変更」と「落としたコインの数をカウント」を実装していきます。
コインの発射位置変更
まずはコインの落とす位置を変更します。Hierarchyで「3DObject」→「Sphere」を選択、コインを落とすオブジェクトになります。名前をDropに変更して、位置と色を変更しておきます。


GameManagerスクリプトを下記に変更します。コインを落とすオブジェクトを移動するのを追加しています。
using UnityEngine;
public class GameManager : MonoBehaviour
{
[SerializeField] private GameObject CoinPrefab;
[SerializeField] private GameObject Pusher;
[SerializeField] private float moveSpeed;
[SerializeField] private GameObject Drop;
[SerializeField] private float dropSpeed;
private int Pushdirection = 1;
private int Dropdirection = 1;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Instantiate(CoinPrefab, Drop.transform.position, transform.rotation);
}
}
private void FixedUpdate()
{
Pusher.transform.position = new Vector3(0,1,
Pusher.transform.position.z + moveSpeed * Time.fixedDeltaTime * Pushdirection);
if (Pusher.transform.position.z >= 3)
Pushdirection = -1;
if (Pusher.transform.position.z <= 0)
Pushdirection = 1;
Drop.transform.position = new Vector3(
Drop.transform.position.x + dropSpeed * Time.fixedDeltaTime * Dropdirection, 5, -2.5f);
if (Drop.transform.position.x >= 3)
Dropdirection = -1;
if (Drop.transform.position.x <= -3)
Dropdirection = 1;
}
}
スクリプトのパラメータをセットします。

実行して下記のような感じに動けばOKです。

コインを縦向きで落としたい場合は、スクリプトの生成部分を下記のように変更します。
Instantiate(CoinPrefab, Drop.transform.position, transform.rotation * Quaternion.Euler(90f, 0f, 0f));
コインのカウント
次に台から落ちたコインの数をカウントしていきます。Groundをコピーして名前を「CoinCheck」に変更、位置とスケールを変更します。

MeshRendererをオフにして見えなくします。また、BoxColliderのisTriggerにチェックを入れます。

新規スクリプトを作成します。通過したときにカウントします。
using UnityEngine;
public class CoinCount : MonoBehaviour
{
public int CoinNum;
private void OnTriggerEnter(Collider other)
{
CoinNum++;
}
}
スクリプトを追加して、コインが落ちたときにカウントアップされたらOKです。

ここから「機能を追加」、「見た目を変更」、「バグ・動作の修正」などを行い、実際のゲームを作成していきます。とりあえず、コイン落としのベースとなる部分は作成はここまでとなります。
