public void Init(AiClipHitData hitData,AIUnit owner) { mHitData = hitData; mOwner = owner; if (mHitData.autoFaceTarget) { mOwner.FaceToAttackTarget(); } pos = mOwner.transform.TransformPoint(mHitData.startPosition); eulerAngleY = mOwner.transform.eulerAngles.y; moveDirection = mOwner.transform.TransformDirection(mHitData.startDirection).normalized; mMoveSpeed = mHitData.moveSpeed; if (string.IsNullOrEmpty(mHitData.entityResName) == false) { GameObject prefab = Resources.Load(hitData.entityResName) as GameObject; if (prefab) { mHitEntity = Object.Instantiate(prefab) as GameObject; mHitEntity.transform.forward = moveDirection; mHitEntity.transform.position = pos; } else { Debug.LogError("加载资源"+hitData.entityResName+" 失败"); } } }
public void Init(AiClipHitData hitData, AIUnit owner) { mHitData = hitData; mOwner = owner; if (mHitData.autoFaceTarget) { mOwner.FaceToAttackTarget(); } pos = mOwner.transform.TransformPoint(mHitData.startPosition); eulerAngleY = mOwner.transform.eulerAngles.y; moveDirection = mOwner.transform.TransformDirection(mHitData.startDirection).normalized; mMoveSpeed = mHitData.moveSpeed; if (string.IsNullOrEmpty(mHitData.entityResName) == false) { GameObject prefab = Resources.Load(hitData.entityResName) as GameObject; if (prefab) { mHitEntity = Object.Instantiate(prefab) as GameObject; mHitEntity.transform.forward = moveDirection; mHitEntity.transform.position = pos; } else { Debug.LogError("加载资源" + hitData.entityResName + " 失败"); } } }
/// <summary> /// 绘制攻击定义列表 /// </summary> /// <param name="clip"></param> public static void DrawHitDefinitionList(AIClip clip) { GUILayout.BeginHorizontal(); GUILayout.Label("攻击定义列表:", GUILayout.Width(80)); #region copy and paste icons if (GUILayout.Button(AIFGUISKin.IconCopy, GUILayout.Width(30), GUILayout.Height(30))) { if (AIDataSelection.selectedHitData != null) { CustomClipBoard.CopyData(AIDataSelection.selectedHitData); } } if (GUILayout.Button(AIFGUISKin.IconPaste, GUILayout.Width(30), GUILayout.Height(30))) { object clipBoardObj; CustomClipBoard.GetCopyObject(out clipBoardObj); if (clipBoardObj == null) { Debug.LogError("剪切板没有内容可以粘贴"); } else { clipBoardObj = Utility.XmlDeepCloneObject(clipBoardObj); if (clipBoardObj is AiClipHitData) { clip.hitCheckList.Add(clipBoardObj as AiClipHitData); } } } #endregion if (GUILayout.Button(AIFGUISKin.IconNewItem, GUILayout.Width(30), GUILayout.Height(30))) { clip.hitCheckList.Add(new AiClipHitData()); } GUILayout.EndHorizontal(); for (int i = 0; i < clip.hitCheckList.Count; i++) { AiClipHitData hitCheck = clip.hitCheckList[i]; GUILayout.BeginHorizontal(); Color col = hitCheck == AIDataSelection.selectedHitData?Color.green:GUI.color; if (AIFUIUtility.LayoutButtonWithColor(hitCheck.name, col, 150)) { AIDataSelection.SelectedHitData(hitCheck); HitDataEditWnd.Open(hitCheck); } if (GUILayout.Button("X", GUILayout.Width(40))) { if (EditorUtility.DisplayDialog("tips", "确定删除攻击定义?", "OK")) { clip.hitCheckList.Remove(hitCheck); break; } } GUILayout.EndHorizontal(); } }
public static void SelectAIClip(AIClip aiClip) { if (selectedAiClip != aiClip) { selectedAiClip = aiClip; //要保证选择AI片断后自动选择这个片断所在的AI组 selecteClipGroup = FindOwnerClipGroup(aiClip); mSelectedLink = null; selectedHitData = null; aiEvent = null; } }
public void CheckHitList() { float mCurClipTime = mOwner.CurClipTime; for (int i = 0; i < hitList.Count; i++) { AiClipHitData hitData = hitList[i]; //只计算在攻击时间内的 if (mCurClipTime >= hitData.startTime && mCurClipTime <= hitData.startTime + hitData.lastTime) { AIHitUnit hitUnit = new AIHitUnit(); hitUnit.Init(hitData, mOwner); hitUnits.Add(hitUnit); hitList.Remove(hitData); } } }
public bool CheckHit(AIUnit attacker, AIHitUnit hitUnit) { if (AIMgr.IsAntiCamp(attacker, this) == false) { return(false); } bool isHit = false; AiClipHitData hitData = hitUnit.mHitData; HitCheckBase hitCheck = hitData.hitCheckData; switch (hitData.hitCheckData.shapeType) { case EHitCheckShape.Capsule: case EHitCheckShape.Cylinder: { if (MathTool.CheckCylinderHit(hitUnit.pos, hitData.hitCheckData.height, hitData.hitCheckData.radius, Controller)) { isHit = true; } break; } case EHitCheckShape.Fan: { if (MathTool.CheckFanHit(hitUnit.pos, hitCheck.height, hitCheck.radius, hitCheck.angle, hitUnit.forwardDir, Controller)) { isHit = true; } break; } } if (isHit) { OnGetHit(); } return(isHit); }
public static void SelectedHitData(AiClipHitData hitData) { selectedHitData = hitData; }
public static void Open(AiClipHitData hitData) { HitDataEditWnd wnd = EditorWindow.GetWindow <HitDataEditWnd>(); wnd.SetData(hitData); }
public void SetData(AiClipHitData hitData) { mHitData = hitData; }
public static void Open(AiClipHitData hitData) { HitDataEditWnd wnd = EditorWindow.GetWindow<HitDataEditWnd>(); wnd.SetData(hitData); }