using UnityEngine;
using System.Collections;
public class PlayerMovement : MonoBehaviour {
Transform endPosition;
GameObject Enemy;
GameObject Target;
NavMeshAgent nav;
bool EnemyInRange;
public GameObject bostacle;
GameObject obs;
enum PlayerState{
Free,
TriggerEnter,
TriggerStand,
TriggerExit,
}
PlayerState state;
bool detectExit;
const float delayMoveTime = 0.5f;
// Use this for initialization
void Start () {
nav = GetComponent<NavMeshAgent> ();
endPosition = GameObject.FindGameObjectWithTag ("Target").transform;
Target = GameObject.FindGameObjectWithTag ("Target");
EnemyInRange = false;
obs = Instantiate (bostacle, this.transform.position, bostacle.transform.rotation) as GameObject;
obs.SetActive (false);
state = PlayerState.Free;
detectExit = false;
}
// Update is called once per frame
void Update () {
if (nav.enabled) {
nav.SetDestination (endPosition.position);
}
}
void OnTriggerEnter (Collider other)
{
}
IEnumerator NavDisable(float t)
{
//等待多少秒执行下面的代码
yield return new WaitForSeconds (t); //Wait for Seconds before start the wave
nav.enabled = false;
}
IEnumerator TriggerEnterDelay(float t)
{
//等待多少秒执行下面的代码
yield return new WaitForSeconds (t); //Wait for Seconds before start the wave
obs.SetActive(true);
obs.transform.position =this.transform.position;
state = PlayerState.TriggerStand;
}
void OnTriggerStay(Collider other)
{
if (state == PlayerState.Free) {
Debug.Log ("OnTriggerEnter");
if(other.gameObject == Target)
{
nav.enabled = false;
state = PlayerState.TriggerEnter;
StartCoroutine (TriggerEnterDelay(0.0f));
}else if(state == PlayerState.TriggerExit){
}
}
}
void OnTriggerExit (Collider other)
{
// If the exiting collider is the player...
if (state == PlayerState.TriggerStand) {
if (other.gameObject == Target) {
state = PlayerState.TriggerExit;
StartCoroutine (obsEnable (delayMoveTime, false));
StartCoroutine (TriggerExitDelay (delayMoveTime+0.05f));
}
} else if(state == PlayerState.TriggerEnter){
state = PlayerState.TriggerExit;
StartCoroutine (obsEnable (0.1f, false));
StartCoroutine (TriggerExitDelay (0.2f));
}
}
IEnumerator obsEnable(float t, bool enable)
{
//等待多少秒执行下面的代码
yield return new WaitForSeconds (t); //Wait for Seconds before start the wave
obs.SetActive (enable);
}
IEnumerator TriggerExitDelay(float t)
{
//等待多少秒执行下面的代码
yield return new WaitForSeconds (t); //Wait for Seconds before start the wave
nav.enabled = true;
state = PlayerState.Free;
}
}
unity3d dota 寻路
最新推荐文章于 2021-04-15 10:26:05 发布