BITFALL/Assets/Plugins/Character Controller Pro/Demo/Scripts/AI/AIWanderBehaviour.cs

102 lines
2.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Lightbug.CharacterControllerPro.Core;
using Lightbug.CharacterControllerPro.Implementation;
using Lightbug.Utilities;
namespace Lightbug.CharacterControllerPro.Demo
{
[AddComponentMenu("Character Controller Pro/Demo/Character/AI/Wander Behaviour")]
public class AIWanderBehaviour : CharacterAIBehaviour
{
[Min(0f)]
[SerializeField]
float minRandomMagnitude = 1f;
[Min(0f)]
[SerializeField]
float maxRandomMagnitude = 1f;
[Min(0f)]
[SerializeField]
float minRandomYawAngle = 100f;
[Min(0f)]
[SerializeField]
float maxRandomYawAngle = 280f;
[Min(0f)]
[SerializeField]
float waitSeconds = 3f;
float timer = 0f;
Vector3 initialPosition = default(Vector3);
Vector3 target = default(Vector3);
void OnValidate()
{
if (minRandomMagnitude > maxRandomMagnitude)
minRandomMagnitude = maxRandomMagnitude;
if (maxRandomMagnitude < minRandomMagnitude)
maxRandomMagnitude = minRandomMagnitude;
if (minRandomYawAngle > maxRandomYawAngle)
minRandomYawAngle = maxRandomYawAngle;
if (maxRandomYawAngle < minRandomYawAngle)
maxRandomYawAngle = minRandomYawAngle;
}
public override void EnterBehaviour(float dt)
{
initialPosition = transform.position;
target = initialPosition + transform.forward * Random.Range(minRandomMagnitude, maxRandomMagnitude);
timer = 0f;
}
public override void UpdateBehaviour(float dt)
{
if (timer >= waitSeconds)
{
timer = 0f;
SetTarget();
}
else
{
timer += dt;
}
float distanceToTarget = (target - CharacterActor.Position).magnitude;
if (distanceToTarget > 0.5f)
SetMovementAction(target - CharacterActor.Position);
else
characterActions.Reset();
}
void SetTarget()
{
Vector3 centerToTargetDir = target - initialPosition;
centerToTargetDir.Normalize();
centerToTargetDir = Quaternion.Euler(0, Random.Range(minRandomYawAngle, maxRandomYawAngle), 0f) * centerToTargetDir;
target = initialPosition + centerToTargetDir * Random.Range(minRandomMagnitude, maxRandomMagnitude);
}
}
}