protected override void onUpdate() { //当前目标不存在 bool isHave = EntityMgr.isHaveEntity(data.goalUID); if (!isHave) { onFinish(); return; } CEntity goal = EntityMgr.getEntity(data.goalUID); disVec = goal.CacheTrans.position + Vector3.up - CacheTrans.position; dir = disVec.normalized; CacheTrans.LookAt(goal.CacheTrans.position + Vector3.up); Debug.DrawRay(CacheTrans.position, dir, Color.red, 0.5f); if (Physics.Raycast(CacheTrans.position, dir, out info, speed)) { //碰撞到目标 CEntity hitEntity = info.collider.GetComponent <CEntity>(); if (hitEntity != null) { if (hitEntity.UID == goal.UID) { CacheTrans.position = goal.CacheTrans.position; if (data.callBack != null) { data.callBack.Invoke(data.cfgId, data.goalUID, CacheTrans.position); } onFinish(); } } } else { CacheTrans.position += dir * speed; } }
protected override void onUpdate() { //当前目标不存在 bool isHave = EntityMgr.isHaveEntity(data.goalUID); if (!isHave) { onFinish(); return; } //当前目标存在 每帧计算距离 /* * CEntity goal = EntityMgr.getEntity(data.goalUID); * disVec = goal.CacheTrans.position - CacheTrans.position; * dir = disVec.normalized; * dis = disVec.magnitude; * CacheTrans.LookAt(goal.CacheTrans); * Debug.DrawRay(CacheTrans.position, dir, Color.red, 0.5f); * if (dis <= reachDis) * { * if (data.callBack != null) * { * data.callBack.Invoke(data.cfgId, data.goalUID, CacheTrans.position); * } * onFinish(); * } * CacheTrans.position += dir* speed; */ //每帧射线检测 有效率问题吗? /* * CEntity goal = EntityMgr.getEntity(data.goalUID); * disVec = goal.CacheTrans.position+Vector3.up - CacheTrans.position; * dir = disVec.normalized; * CacheTrans.LookAt(goal.CacheTrans.position + Vector3.up); * Debug.DrawRay(CacheTrans.position, dir, Color.red, 0.5f); * if (Physics.Raycast(CacheTrans.position, dir, out info,speed)) * { * //碰撞到目标 * CEntity hitEntity = info.collider.GetComponent<CEntity>(); * if (hitEntity != null) { * if (hitEntity.UID == goal.UID) * { * CacheTrans.position = goal.CacheTrans.position; * if (data.callBack != null) * { * data.callBack.Invoke(data.cfgId, data.goalUID, CacheTrans.position); * } * onFinish(); * } * else { * onFinish(); * } * } * } * else { * CacheTrans.position += dir * speed; * } */ CEntity goal = EntityMgr.getEntity(data.goalUID); disVec = goal.CacheTrans.position + Vector3.up - CacheTrans.position + Vector3.up; dir = disVec.normalized; CacheTrans.LookAt(goal.CacheTrans.position + Vector3.up); Debug.DrawRay(CacheTrans.position, dir, Color.red, 0.5f); if (Physics.Raycast(CacheTrans.position, dir, out info, speed)) { //碰撞到目标 CEntity hitEntity = info.collider.GetComponent <CEntity>(); if (hitEntity != null) { if (hitEntity.UID == goal.UID) { CacheTrans.position = goal.CacheTrans.position; if (data.callBack != null) { data.callBack.Invoke(data.cfgId, data.goalUID, CacheTrans.position); } onFinish(); } else { onFinish(); } } } else { CacheTrans.position += dir * speed; } }