Exemple #1
0
    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+" 失败");
            }
        }
    }
Exemple #2
0
    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 + " 失败");
            }
        }
    }
Exemple #3
0
    /// <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();
        }
    }
Exemple #4
0
 public static void SelectAIClip(AIClip aiClip)
 {
     if (selectedAiClip != aiClip)
     {
         selectedAiClip = aiClip;
         //要保证选择AI片断后自动选择这个片断所在的AI组
         selecteClipGroup = FindOwnerClipGroup(aiClip);
         mSelectedLink    = null;
         selectedHitData  = null;
         aiEvent          = null;
     }
 }
Exemple #5
0
    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);
            }
        }
    }
Exemple #6
0
    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);
    }
Exemple #7
0
 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;
 }
Exemple #10
0
 public static void SelectedHitData(AiClipHitData hitData)
 {
     selectedHitData = hitData;
 }
Exemple #11
0
 public static void SelectAIClip(AIClip aiClip)
 {
     if (selectedAiClip != aiClip)
     {
         selectedAiClip = aiClip;
         //要保证选择AI片断后自动选择这个片断所在的AI组
         selecteClipGroup = FindOwnerClipGroup(aiClip);
         mSelectedLink = null;
         selectedHitData = null;
         aiEvent = null;
     }
 }
 public void SetData(AiClipHitData hitData)
 {
     mHitData = hitData;
 }
    public static void Open(AiClipHitData hitData)
    {
        HitDataEditWnd wnd = EditorWindow.GetWindow<HitDataEditWnd>();

        wnd.SetData(hitData);
    }