Unityを使用したコインプッシャーの作り方のメモです。ゲーム制作の参考にしていただければ嬉しいです。トグルボタンをクリックすると記事が表示されます。小さくて見ずらい画像はクリックで拡大できます。
土台の作成
作成したCubeをコピーしてpositionYを1positionZを-2.5にしてみました。
上の部分がコインを押し出す部分になります。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_153709-1024x481.png)
次に横の壁を作成します。横の壁は必要なければ作らなくても大丈夫です。
土台のCubeをコピーしてサイズ調整しました。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_154229-1024x475.png)
後ろの壁を作成します。
土台の部分をコピーして縦に配置しました。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_154532-1024x483.png)
それぞれ名前変更して空のオブジェクトを作成して土台のオブジェクトを全て空のオブジェクトの子オブジェクトにしてまとめておきます。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_154737.png)
メインカメラと土台の位置を調整してゲーム画面に土台が映るようにします。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_155348-1024x474.png)
コインの作成
Hierarchウィンドウを右クリック→3dObject→cylinderを作成します。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_160121-1024x614.png)
inspector画面を見るとCapsuleColliderが初めからついているので消去してaddcomponentからMeshColliderを追加します。Convexにチェックを入れます。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_155723.png)
cylinderのサイズ調整をします。ScaleYを0.05くらいにしてみました。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_160433-1024x453.png)
Materialsを作成してコインに色を付けておきます。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_160923-1024x477.png)
コインを土台より少し高い位置に配置してプレイしてコインが落ちるかチェックします。
コインを飛ばす
コインを飛ばすためのC#スクリプトを作成します。ファイル名はCoinControllerにしました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoinController : MonoBehaviour
{
public GameObject Coin;
public Transform CreatePoint;
public float Power;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
var create_coin = Instantiate(Coin,CreatePoint.position,Quaternion.identity);
var rb = create_coin.GetComponent<Rigidbody>();
rb.AddForce(CreatePoint.forward * Power, ForceMode.Impulse);
}
}
}
コインをprefab化します。画面上のコインは消去して問題ありません。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_162138.png)
空のオブジェクトを作成します名前はCreatePointにしました。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_162403.png)
CreatePointの位置からコインが発射されるので位置を調整します。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_162853.png)
CreatePointにCoinControllerスクリプトをアタッチします。
Coinの項目にprefab化したコインをアタッチCreatePointの項目にCreatePointオブジェクトをアタッチします。powerは10にしてみました。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-03_162706.png)
プレイしてクリックするとコインが生成されて前に飛んでいきます。
移動の実装
CreatePointを横移動できるようにしていきます。
CreatePointが見えるようにCreatePointの子オブジェクトに3dObjectを作ります。
私はCubeを作成しました。サイズを調整してBoxColiderを消去します。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_150518-1024x490.png)
//移動速度を決める変数
public float Speed;
//Update関数に書く
var _speed = Vector3.zero;
_speed.x = Speed;
if (Input.GetKey(KeyCode.D))
{
this.transform.position += _speed;
}
if (Input.GetKey(KeyCode.A))
{
this.transform.position -= _speed;
}
ポインターの作成
狙いを付けれるようにポインターを作成します。
Cubeの子オブジェクトに新しくCubeを作成します。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_153237.png)
名前はpointerにしました。BoxColiderを消去してサイズを調整します。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_153519-1024x579.png)
台を動かす
プッシャーを選択してWindowメニューからanimationを選択します。
animation画面が出てくるのでCreateをクリックします。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_154412-1024x242.png)
名前を付けてanimファイルを保存して赤い録画マークをクリックします。
![](https://cbagames.jp/wp-content/uploads/2023/07/5ba897d6d697425ab4b38f14e988b482.png)
0秒の位置をクリックしてpusherのアニメの開始位置を入力します。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_155150.png)
5秒くらいかけて台を引いて5秒かけて戻すように設定したいので、5秒のところをクリックしてTransformを入力します。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_155654.png)
10秒のところをクリックしてTransformを入力したら録画マークをもう一度クリックします。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_155856.png)
animationウィンドウの再生マークをクリックすると動きをチェックできます。
コインが乗るようにする
このままだとコインを台の上にのせても一緒に動いてくれないので動くようにしていきます。
まずはコインprefabにタグをつけていきます。inspector画面のタグの項目をクリックしてadd tagをクリックします。
![](https://cbagames.jp/wp-content/uploads/2023/07/5ba897d6d697425ab4b38f14e988b482-1.png)
+ボタンをクリックしてCoinというタグを作成します。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_214709.png)
新しくC#スクリプトを作成します。名前はMoveManagerにしました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveManager : MonoBehaviour
{
private void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.tag=="Coin")
{
collider.gameObject.transform.parent = this.transform;
}
}
private void OnTriggerExit(Collider collider)
{
if (collider.gameObject.tag == "Coin")
{
collider.gameObject.transform.parent = null;
}
}
}
プッシャーの上に薄い板のようなものを作成します。
プッシャーをコピーして子オブジェクトにします。名前はmovemanagerにしました。animatorは消去しておきます。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_220112.png)
サイズを薄くしてプッシャーの上にのせるようにします。わかりにくいので黒にしました。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_220154-1024x571.png)
BoxColiderのCenterとSizeをTransformのScaleとpositionと同じにしてTransformはリセットしておきます。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_222053.png)
BoxColiderのisTriggerにチェックを入れてMeshrendererのチェックを外します。
![](https://cbagames.jp/wp-content/uploads/2023/07/5ba897d6d697425ab4b38f14e988b482-2.png)
movemanagerにMoveManagerスクリプトをアタッチします。
新しく空のオブジェクトを作成して以下のように配置します
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_222633.png)
プッシャーのanimatorをコピーして空のオブジェクトに貼り付けます。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_222409.png)
コピーしたらプッシャーのanimetorは消去しておきます。
空のオブジェクトのTransformpositionをプッシャー位置と同じにします。
![](https://cbagames.jp/wp-content/uploads/2023/07/2023-07-04_223352.png)
プッシャーとmovemanagermのTransformpositionはすべて0にします。