おはようございやす。
現在、Unityで2D横スクロールアクションを開発しています。
そこで、ギミックとして横に移動する台を作成しました。
その時にプレイヤーがその台に乗り、台が移動すると、なんとプレイヤーは一緒に移動せず、その場で硬直状態ではありませんか。
そこで、移動する台にプレイヤーが乗った時に、プレイヤーも一緒に運びたい。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 動く床
///
/// 横移動と縦移動の2種類
/// </summary>
[RequireComponent(typeof(Rigidbody2D))]
public class MoveFloor : MonoBehaviour
{
[Header("縦方向に移動させる")] public bool isVertical; // 縦方向に移動するかどうか
[Header("横方向に移動させる")] public bool isHorizontal; // 横方向に移動するかどうか
[Header("縦方向の移動速度")] public float moveSpeedY; // 縦方向の移動速度
[Header("横方向の移動速度")] public float moveSpeedX; // 横方向の移動速度
[Header("左端の座標")] public float leftPos; // 左端の座標
[Header("右端の座標")] public float rightPos; // 右端の座標
[Header("上端の座標")] public float upPos; // 上端の座標
[Header("下端の座標")] public float downPos; // 下端の座標
private bool movingPositive = true; // 正の方向に移動しているかどうか
private Rigidbody2D rb;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
rb.isKinematic = true; // 物理挙動の影響を受けないようにする
}
private void FixedUpdate()
{
// 現在地を取得する
Vector2 currentPos = rb.position;
// 横方向の移動処理
if (isHorizontal)
{
// 正の方向に移動しているなら、
if (movingPositive)
{
// 右方向に移動
currentPos.x += moveSpeedX * Time.fixedDeltaTime;
// 右端まで行った時は、
if (currentPos.x >= rightPos)
{
// 移動方向を反転させる
currentPos.x = rightPos;
movingPositive = false;
}
}
// 負の方向に移動しているなら、
else
{
// 左方向に移動
currentPos.x -= moveSpeedX * Time.fixedDeltaTime;
// 左端まで行った時は、
if (currentPos.x <= leftPos)
{
// 移動方向を反転させる
currentPos.x = leftPos;
movingPositive = true;
}
}
}
// 縦方向の移動処理
if (isVertical)
{
// 正の方向に移動しているなら、
if (movingPositive)
{
// 上方向に移動
currentPos.y += moveSpeedY * Time.fixedDeltaTime;
// 上端まで行った時は、
if (currentPos.y >= upPos)
{
// 移動方向を反転させる
currentPos.y = upPos;
movingPositive = false;
}
}
// 負の方向に移動しているなら、
else
{
// 下方向に移動
currentPos.y -= moveSpeedY * Time.fixedDeltaTime;
// 下端まで行った時は、
if (currentPos.y <= downPos)
{
// 移動方向を反転させる
currentPos.y = downPos;
movingPositive = true;
}
}
}
// 新しい位置を適用する
rb.MovePosition(currentPos);
}
}
このように書いたら、プレイヤーも一緒に台と移動してくれるようになった。
汚いし、参考になるかわからないコードだが、よかったらぜひ。
コメント