game: added additional walkpoints
This commit is contained in:
parent
442fae7644
commit
d580f52362
1 changed files with 96 additions and 7 deletions
|
@ -14,7 +14,9 @@ public class NPCMovement : MonoBehaviour
|
|||
/// <summary>
|
||||
/// References and Variables
|
||||
/// </summary>
|
||||
public Transform[] walkPoints;
|
||||
public Transform[] walkPoints1;
|
||||
public Transform[] walkPoints2;
|
||||
public Transform[] walkPoints3;
|
||||
public float movementSpeed = 10.0f;
|
||||
public float turnSpeed = 5.0f;
|
||||
private int currentPtIndex = 0;
|
||||
|
@ -24,23 +26,36 @@ public class NPCMovement : MonoBehaviour
|
|||
/// </summary>
|
||||
void Start()
|
||||
{
|
||||
StartCoroutine(Walking());
|
||||
StartCoroutine(WalkingToPlayer());
|
||||
}
|
||||
|
||||
///<summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void WalkToPlayerLeft()
|
||||
{
|
||||
StartCoroutine(WalkingToPlayerLeft());
|
||||
}
|
||||
|
||||
public void WalkToPlayerRight()
|
||||
{
|
||||
StartCoroutine(WalkingToPlayerRight());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Coroutine for NPC to walk to each point
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IEnumerator Walking()
|
||||
IEnumerator WalkingToPlayer()
|
||||
{
|
||||
while (currentPtIndex < walkPoints.Length)
|
||||
while (currentPtIndex < walkPoints1.Length)
|
||||
{
|
||||
if (walkPoints.Length == 0)
|
||||
if (walkPoints1.Length == 0)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
Transform targetPt = walkPoints[currentPtIndex];
|
||||
Transform targetPt = walkPoints1[currentPtIndex];
|
||||
|
||||
Vector3 direction = targetPt.position - transform.position;
|
||||
Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x,0,direction.z));
|
||||
|
@ -53,7 +68,81 @@ public class NPCMovement : MonoBehaviour
|
|||
/*Debug.Log($"Reached {currentPtIndex}");*/
|
||||
currentPtIndex++;
|
||||
|
||||
if (currentPtIndex >= walkPoints.Length)
|
||||
if (currentPtIndex >= walkPoints1.Length)
|
||||
{
|
||||
StopAllCoroutines();
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Coroutine for NPC to walk to each point
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IEnumerator WalkingToPlayerLeft()
|
||||
{
|
||||
while (currentPtIndex < walkPoints2.Length)
|
||||
{
|
||||
if (walkPoints2.Length == 0)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
Transform targetPt = walkPoints2[currentPtIndex];
|
||||
|
||||
Vector3 direction = targetPt.position - transform.position;
|
||||
Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x,0,direction.z));
|
||||
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, turnSpeed * Time.deltaTime);
|
||||
transform.position = Vector3.MoveTowards(transform.position, targetPt.position, movementSpeed * Time.deltaTime);
|
||||
|
||||
if (Vector3.Distance(transform.position, targetPt.position) < 0.1f)
|
||||
{
|
||||
/*Debug.Log($"Reached {currentPtIndex}");*/
|
||||
currentPtIndex++;
|
||||
|
||||
if (currentPtIndex >= walkPoints2.Length)
|
||||
{
|
||||
StopAllCoroutines();
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Coroutine for NPC to walk to each point
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
IEnumerator WalkingToPlayerRight()
|
||||
{
|
||||
while (currentPtIndex < walkPoints3.Length)
|
||||
{
|
||||
if (walkPoints3.Length == 0)
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
Transform targetPt = walkPoints3[currentPtIndex];
|
||||
|
||||
Vector3 direction = targetPt.position - transform.position;
|
||||
Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x,0,direction.z));
|
||||
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, turnSpeed * Time.deltaTime);
|
||||
transform.position = Vector3.MoveTowards(transform.position, targetPt.position, movementSpeed * Time.deltaTime);
|
||||
|
||||
if (Vector3.Distance(transform.position, targetPt.position) < 0.1f)
|
||||
{
|
||||
/*Debug.Log($"Reached {currentPtIndex}");*/
|
||||
currentPtIndex++;
|
||||
|
||||
if (currentPtIndex >= walkPoints3.Length)
|
||||
{
|
||||
StopAllCoroutines();
|
||||
yield break;
|
||||
|
|
Loading…
Add table
Reference in a new issue