init
This commit is contained in:
commit
341a877b4a
2338 changed files with 1346408 additions and 0 deletions
79
Assets/NavMesh/Examples/Scripts/AgentLinkMover.cs
Normal file
79
Assets/NavMesh/Examples/Scripts/AgentLinkMover.cs
Normal file
|
@ -0,0 +1,79 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.AI;
|
||||
using System.Collections;
|
||||
|
||||
public enum OffMeshLinkMoveMethod
|
||||
{
|
||||
Teleport,
|
||||
NormalSpeed,
|
||||
Parabola,
|
||||
Curve
|
||||
}
|
||||
|
||||
[RequireComponent(typeof(NavMeshAgent))]
|
||||
public class AgentLinkMover : MonoBehaviour
|
||||
{
|
||||
public OffMeshLinkMoveMethod m_Method = OffMeshLinkMoveMethod.Parabola;
|
||||
public AnimationCurve m_Curve = new AnimationCurve();
|
||||
|
||||
IEnumerator Start()
|
||||
{
|
||||
NavMeshAgent agent = GetComponent<NavMeshAgent>();
|
||||
agent.autoTraverseOffMeshLink = false;
|
||||
while (true)
|
||||
{
|
||||
if (agent.isOnOffMeshLink)
|
||||
{
|
||||
if (m_Method == OffMeshLinkMoveMethod.NormalSpeed)
|
||||
yield return StartCoroutine(NormalSpeed(agent));
|
||||
else if (m_Method == OffMeshLinkMoveMethod.Parabola)
|
||||
yield return StartCoroutine(Parabola(agent, 2.0f, 0.5f));
|
||||
else if (m_Method == OffMeshLinkMoveMethod.Curve)
|
||||
yield return StartCoroutine(Curve(agent, 0.5f));
|
||||
agent.CompleteOffMeshLink();
|
||||
}
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator NormalSpeed(NavMeshAgent agent)
|
||||
{
|
||||
OffMeshLinkData data = agent.currentOffMeshLinkData;
|
||||
Vector3 endPos = data.endPos + Vector3.up * agent.baseOffset;
|
||||
while (agent.transform.position != endPos)
|
||||
{
|
||||
agent.transform.position = Vector3.MoveTowards(agent.transform.position, endPos, agent.speed * Time.deltaTime);
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator Parabola(NavMeshAgent agent, float height, float duration)
|
||||
{
|
||||
OffMeshLinkData data = agent.currentOffMeshLinkData;
|
||||
Vector3 startPos = agent.transform.position;
|
||||
Vector3 endPos = data.endPos + Vector3.up * agent.baseOffset;
|
||||
float normalizedTime = 0.0f;
|
||||
while (normalizedTime < 1.0f)
|
||||
{
|
||||
float yOffset = height * 4.0f * (normalizedTime - normalizedTime * normalizedTime);
|
||||
agent.transform.position = Vector3.Lerp(startPos, endPos, normalizedTime) + yOffset * Vector3.up;
|
||||
normalizedTime += Time.deltaTime / duration;
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
IEnumerator Curve(NavMeshAgent agent, float duration)
|
||||
{
|
||||
OffMeshLinkData data = agent.currentOffMeshLinkData;
|
||||
Vector3 startPos = agent.transform.position;
|
||||
Vector3 endPos = data.endPos + Vector3.up * agent.baseOffset;
|
||||
float normalizedTime = 0.0f;
|
||||
while (normalizedTime < 1.0f)
|
||||
{
|
||||
float yOffset = m_Curve.Evaluate(normalizedTime);
|
||||
agent.transform.position = Vector3.Lerp(startPos, endPos, normalizedTime) + yOffset * Vector3.up;
|
||||
normalizedTime += Time.deltaTime / duration;
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue