unity3d dota 寻路

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;

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值