この記事はITRC Advent Calendar 2021 17日目の記事です!
こんにちは!saba🐟です!
今回Unity初心者がよく引っかかる移動床の実装について書いていこうと思います!(少し前に流行った某ゲームのようにならないような実装方法をまなんでいきましょう!)
前提知識
本記事はUnityの基本的な操作方法を知っている前提で記事を書いています。
もしUnityの基本的な操作がわからない方は、以下の記事からどうぞ!
脳死で移動床を実装する
まず何も考えずに移動床を実装してみましょう!
何も考えずに移動床を実装すると、移動床がキャラクターを置いていってしまいますよねw
今回はこの現象を改善する方法を紹介したいと思います。
移動床と一緒に移動する方法
移動床と一緒にキャラクターを移動させる方法はいくつかあるのですが、今回は一番簡単な方法を紹介します!
親子関係を変更する
結論から言うと親子関係(階層)を使ってあげることで、一緒に動かすことができます。
試しに、unityのEditor上でキャラクターを移動床の子に設定して確認しましょう!
キャラクターを移動床にドラック&ドロップ
キャラクターが移動床の子になりました!
この状態で実行してみると、、
こんな感じで一緒に動くことができました!!
ですが、このままずっと親子関係にしていると常に移動床の影響を受けてしまうのでプログラムから触れた時と離れた時に動的に親を変更させてあげます!
親子関係を元に戻してあげて以下のプログラムを移動床にアタッチしましょう!
public class MoveGround : MonoBehaviour
{
/// <summary>
/// 移動床のコライダーがobjに触れた時の処理
/// </summary>
/// <param name="other"></param>
private void OnCollisionEnter(Collision other)
{
if (other.gameObject.CompareTag("Player"))
{
// 触れたobjの親を移動床にする
other.transform.SetParent(transform);
}
}
/// <summary>
/// 移動床のコライダーがobjから離れた時の処理
/// </summary>
/// <param name="other"></param>
private void OnCollisionExit(Collision other)
{
if (other.gameObject.CompareTag("Player"))
{
// 触れたobjの親をなくす
other.transform.SetParent(null);
}
}
}
OnCollisionEnter
- コライダー(当たり判定)に何かがぶつかった瞬間にこのメソッドが呼ばれる
OnCollisionStay
- コライダー(当たり判定)に何かがぶつかっている間にこのメソッドが呼ばれ続ける。
OnCollisionExit
- コライダー(当たり判定)に何かが離れた瞬間にこのメソッドが呼ばれる
SetParent
- transformの親を設定することができる。
- 親のtransformにnullを入れてあげると一番上の階層にすることができるので、
今回の場合は、離れた時に親をnullにしています。
アタッチできたら、Characterに”Player”というtagを設定してあげて完成!!
できたものはこちら!
まとめ
今回は移動床と一緒にキャラクターを移動する方法をやりました!
移動床と一緒に移動させるやり方は他にもいろいろあるのですが、個人的に今回紹介したもの簡単で大体の場合事足りると思うので是非使用してみてください!
ちなみに、今回は簡単に実装するためにコライダーを使用しましたが、本来は移動床の上にもう一つトリガー用コライダーをつけてTriggerEnterやTriggerExitを使って親子関係を変更するようにした方がもっと良くなると思いますので是非試してみてください!
ではでは!
コメント