2Dアクションゲームによく出てくる、動く床の作り方について紹介します。
今回紹介する方法を使うと、好きな方向に床を移動させることができるようになりますので、ぜひ試してみましょう。
プレイヤーと床の基本設定
プレイヤーやステージの用意
まずは、操作するプレイヤーとステージを用意します。
今回はこちらのアセットのサンプルシーンを使います。
デモシーンでは、ステージとプレイヤーや敵が配置されています。
キャラクターは左右の方向キーで動かせるようになっており、スペースキーでジャンプもできるので、便利なアセットとなっています。
床を動かす方法
サンプルシーンでは、宙に浮いた床は止まったままなので、動かしてみます。
床が動く目的地の設定
床を動かすために、目的地を設定します。ヒエラルキーから、空のオブジェクトを作成して、適当な名前をつけます。
空のオブジェクトは、そのままではどこにあるのか見えないので、インスペクターの左上からアイコン表示をしておきましょう。シーンビューでは見えますが、実際のゲーム画面では見えません。
プレイヤーの右にある床を左右に動かしたいので、先ほど作成したオブジェクトを左右に配置します。
床を目的地へ向かわせるスクリプトの作成
スクリプトを作成します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MovingPlatform : MonoBehaviour
{
[SerializeField] private GameObject[] waypoints;
private int currentWaypointIndex = 0;
[SerializeField] private float speed = 2f;
private void Update()
{
// 現在の床の位置が目的地に非常に近い場合
if(Vector2.Distance(waypoints[currentWaypointIndex].transform.position, transform.position) < .1f)
{
// 目的地を次のポイントにセットする
currentWaypointIndex++;
// 最後まで行ったら、一番最初のポイントを目的地とする
if(currentWaypointIndex >= waypoints.Length)
{
currentWaypointIndex = 0;
}
}
// 現在の床の位置から、目的地の位置まで移動する
transform.position = Vector2.MoveTowards(transform.position, waypoints[currentWaypointIndex].transform.position, Time.deltaTime * speed);
}
}
作成できたら、スクリプトは動かす床に設定して、Waypointsのところに目的地のオブジェクトを設定します。
実行してみると、床が動きました! ただし、プレイヤーが乗っても、プレイヤーも一緒に追従してくれません。
このスクリプトの良いところは、目的地が複数設定できることです。お好みの方向に動かしましょう。
参考動画
動く床も含め、2Dアクションゲームが簡単に作れるアセットはこちらです。