(サンプルコード)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BotTurnSlow : MonoBehaviour
{
private float moveSpeed = 3f;
private float rotateSpeed = 0.1f; // 旋回速度 (小さいほどゆっくり)
//public float rotationAngleLimit = 90f; // 旋回する最大角度 (左右に何度まで向きを変えるか)
private bool isRotating = false; // 旋回中かどうか
private Quaternion targetRotation; // 目標とする回転
void Update()
{
if (!isRotating)
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
}
// 境界線に触れたときの処理
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Wall") && !isRotating)
{
StartCoroutine(RotateRandomly());
}
}
IEnumerator RotateRandomly()
{
isRotating = true; // 旋回開始フラグを立てる
// ランダムな旋回角度の決定
float randomAngle = Random.Range(135, 225);
// 現在の向きから指定された角度だけY軸周りに回転させる目標の回転を計算
targetRotation = transform.rotation * Quaternion.Euler(0, randomAngle, 0);
// ゆっくりと目標の回転まで補間する
float t = 0;
while (t < 1)
{
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, t);
t += Time.deltaTime * rotateSpeed; // rotateSpeed が小さいほどゆっくり
yield return null; // 次のフレームまで待つ
}
isRotating = false; // 旋回終了フラグを下ろす
}
}