Unityで動く床にキャラクターを乗せて一緒に動かす方法について解説します。いくつかの基本的な手法を紹介します。
親子関係を利用する方法
動く床にキャラクターを子オブジェクトとして設定することで、一緒に動かす方法です。
スクリプト例:
using UnityEngine;
public class StickyPlatform : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.name == "Player")
{
collision.gameObject.transform.SetParent(transform);
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.gameObject.name == "Player")
{
collision.gameObject.transform.SetParent(null);
}
}
}
このスクリプトを動く床にアタッチし、プレイヤーが床に乗った時に親子関係を設定し、離れた時に解除します。
参考記事: 2Dアクションゲームでプレイヤーと一緒に動く床の作り方
Rigidbodyを利用する方法
動く床に乗ったオブジェクトの速度を動く床の速度に合わせて調整する方法です。
スクリプト例:
using UnityEngine;
using System.Collections.Generic;
public class MovingPlatform : MonoBehaviour
{
[SerializeField] Rigidbody rigidBody = null;
[SerializeField] Vector3 speed = Vector3.zero;
List rigidBodies = new List();
void FixedUpdate()
{
MovePlatform();
AddVelocity();
}
void OnTriggerEnter(Collider other)
{
rigidBodies.Add(other.gameObject.GetComponent<Rigidbody>());
}
void OnTriggerExit(Collider other)
{
rigidBodies.Remove(other.gameObject.GetComponent<Rigidbody>());
}
void MovePlatform()
{
rigidBody.MovePosition(transform.position + Time.fixedDeltaTime * speed);
}
void AddVelocity()
{
if (rigidBody.velocity.sqrMagnitude <= 0.01f)
return;
foreach (Rigidbody rb in rigidBodies)
{
rb.AddForce(rigidBody.velocity, ForceMode.VelocityChange);
}
}
}
このスクリプトを動く床に適用し、床に乗ったオブジェクトの速度を床の速度に合わせて調整します。
参考記事: 動く床の作り方
タグを利用する方法
キャラクターが動く床に乗った時にタグを使って親子関係を設定する方法です。
スクリプト例:
using UnityEngine;
public class collision : MonoBehaviour
{
public GameObject floor;
void OnTriggerEnter(Collider col)
{
if (col.tag == "floor")
{
this.gameObject.transform.parent = floor.transform;
}
}
void OnTriggerExit(Collider col)
{
if (col.tag == "floor")
{
this.gameObject.transform.parent = null;
}
}
}
このスクリプトをキャラクターに適用し、床に触れた際に床のタグをチェックして親子関係を設定します。
参考記事: 動く床とキャラクターを一緒に移動する方法
まとめ
- 親子関係を利用する方法
- Rigidbodyを利用する方法
- タグを利用する方法
これらの方法を使うことで、Unityで動く床とキャラクターを一緒に動かすことができます。実際のゲーム開発のシチュエーションに合わせて最適な方法を選んでください。
【参考記事】