原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1007/46.html
- StartCorourine(string methodName)
- StartCorourine(IEnumerator routine)
using UnityEngine;
using System.Collections;
public class WayPoint : MonoBehaviour {
#region
public WayPoint nextWayPoint;
#endregion
void OnDrawGizmosSelected() {
Gizmos.color = Color.green;
Gizmos.DrawLine(transform.position, nextWayPoint.gameObject.transform.position);
}
}
挂载在AI上的脚本:
using UnityEngine;
using System.Collections;
public class AI : MonoBehaviour {
#region variable
[SerializeField] //保护封装性
private float speed = 3f;
[SerializeField]
private WayPoint targetPoint, startPoint;
[SerializeField]
private Hero mage;
#endregion
// Use this for initialization
void Start () {
if (Vector3.Distance(transform.position, startPoint.transform.position) < 1e-2f) {
targetPoint = startPoint.nextWayPoint;
} else {
targetPoint = startPoint;
}
StartCoroutine(AINavMesh());
}
IEnumerator AINavMesh() {
while(true) {
if (Vector3.Distance(transform.position, targetPoint.transform.position) < 1e-2f) {
targetPoint = targetPoint.nextWayPoint;
yield return new WaitForSeconds(2f);
}
if (mage != null && Vector3.Distance(transform.position, mage.gameObject.transform.position) <= 6f) {
Debug.Log("侦测到敌人,开始追击!!!");
yield return StartCoroutine(AIFollowHero());
}
Vector3 dir = targetPoint.transform.position - transform.position;
transform.Translate(dir.normalized * Time.deltaTime * speed);
yield return new WaitForEndOfFrame();
}
}
IEnumerator AIFollowHero() {
while (true) {
if (mage != null && Vector3.Distance(transform.position, mage.gameObject.transform.position) > 6f) {
Debug.Log("敌人已走远,放弃攻击!!!");
yield break;
}
Vector3 dir = mage.transform.position - transform.position;
transform.Translate(dir.normalized * Time.deltaTime * speed * 0.8f);
yield return new WaitForEndOfFrame();
}
}
}
挂载在Mage上的脚本:
using UnityEngine;
using System.Collections;
//在本实例中起到标记的作用
public class Hero : MonoBehaviour {
}
上篇:上一篇:unity动态加载Resources.Load方法
下篇:下一篇:U3D用单例创建并永久化游戏对象