(発想)
「OnTriggerStay」と「CharacterController」の「Move( )」を使って、床と接触時は、床の移動と同じ速度で、Charaを移動させる。
*CharacterControllerを追加したオブジェクトを移動させるには「Move( )」を使う。
(スクリプト)
<動く床>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveFloor : MonoBehaviour
{
public int num = 1;
private Vector3 pos;
void Update()
{
transform.Translate(Vector3.forward * num * Time.deltaTime);
pos = transform.position;
if(pos.z > 10)
{
num = -1;
}
else if( pos.z < 5)
{
num = 1;
}
}
}
<Bot>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharaBot : MonoBehaviour
{
public CharacterController controller;
public float speed;
private Vector3 moveDirection = Vector3.zero;
private float gravity = 9.8f;
void Update()
{
moveDirection.z = Input.GetAxis("Vertical");
transform.Rotate(0, Input.GetAxis("Horizontal") * 2, 0);
if (moveDirection.magnitude > 0.1f)
{
Vector3 globalDirection = transform.TransformDirection(moveDirection);
controller.Move(globalDirection * speed * Time.deltaTime);
}
moveDirection.y -= gravity * Time.deltaTime;
if (controller.isGrounded)
{
moveDirection.y = 0;
}
}
// 動く床と連動させる。
private void OnTriggerStay(Collider other)
{
if (other.CompareTag("Floor"))
{
int charaNum = other.GetComponent<MoveFloor>().num;
// ★移動速度と移動の方向を「床」と一致させる(ポイント)
controller.Move(Vector3.forward * charaNum * Time.deltaTime);
}
}
}
(実行結果)
<床と一緒に移動できる>
<動く床の上で個別に移動できる>