Ejemplo n.º 1
0
    public void OnGUI()
    {
        if (mHitData != null)
        {
            mHitData.name           = AIFUIUtility.DrawTextField(mHitData.name, "名称", 100);
            mHitData.startTime      = EditorGUILayout.FloatField("开始触发时间", mHitData.startTime);
            mHitData.lastTime       = EditorGUILayout.FloatField("持续时间", mHitData.lastTime);
            mHitData.hitInterval    = EditorGUILayout.FloatField("攻击间隔", mHitData.hitInterval);
            mHitData.entityResName  = EditorGUILayout.TextField("显示实体资源", mHitData.entityResName);
            mHitData.startPosition  = EditorGUILayout.Vector3Field("初始位置", mHitData.startPosition);
            mHitData.startDirection = EditorGUILayout.Vector3Field("初始角度", mHitData.startDirection);
            mHitData.moveSpeed      = EditorGUILayout.FloatField("移动速度", mHitData.moveSpeed);
            mHitData.autoFaceTarget = EditorGUILayout.Toggle("自动朝向攻击目标", mHitData.autoFaceTarget);

            EditorGUILayout.Separator();
            GUILayout.Label("击中判定:");
            HitCheckBase hitCheck = mHitData.hitCheckData;
            hitCheck.shapeType = (EHitCheckShape)AIFUIUtility.DrawCustomEnum("击中框类型", hitCheck.shapeType, 100);
            hitCheck.posOffset = EditorGUILayout.Vector3Field("位置偏移", hitCheck.posOffset);
            hitCheck.radius    = EditorGUILayout.FloatField("半径", hitCheck.radius);
            if (hitCheck.shapeType == EHitCheckShape.LaserBeam)
            {
                hitCheck.height = EditorGUILayout.FloatField("激光束长度", hitCheck.height);
            }
            else
            {
                hitCheck.height = EditorGUILayout.FloatField("高度", hitCheck.height);
            }

            hitCheck.angle = EditorGUILayout.FloatField("攻击角度", hitCheck.angle);
        }
    }
Ejemplo n.º 2
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();
        }
    }
Ejemplo n.º 3
0
 public static void DrawCommanAnimation(AICommonAnimation comAnim, AIClipGroup clipGroup)
 {
     GUILayout.Label("AI通用片断");
     comAnim.die  = AIFUIUtility.DrawAiLinkPopup(clipGroup, comAnim.die, "  默认连接", 150);
     comAnim.hit  = AIFUIUtility.DrawAiLinkPopup(clipGroup, comAnim.hit, "  受击", 150);
     comAnim.idle = AIFUIUtility.DrawAiLinkPopup(clipGroup, comAnim.idle, "  默认待机", 150);
     comAnim.run  = AIFUIUtility.DrawAiLinkPopup(clipGroup, comAnim.run, "  跑步", 150);
     comAnim.walk = AIFUIUtility.DrawAiLinkPopup(clipGroup, comAnim.walk, "  走路", 150);
 }
Ejemplo n.º 4
0
 public static void DrawAIShape(AIShape shape)
 {
     GUILayout.Label("AI形态定义");
     shape.scaleRatio     = EditorGUILayout.FloatField("缩放比例:", shape.scaleRatio, GUILayout.Width(300));
     shape.colliderHeight = EditorGUILayout.FloatField("碰撞高度:", shape.colliderHeight, GUILayout.Width(300));
     shape.colliderRadius = EditorGUILayout.FloatField("碰撞半径:", shape.colliderRadius, GUILayout.Width(300));
     AIFUIUtility.DrawVector3("碰撞偏移", ref shape.colliderOffset);
     EditorGUILayout.Separator();
     shape.hitDetectScale  = EditorGUILayout.FloatField("攻击框比例:", shape.scaleRatio, GUILayout.Width(300));
     shape.hitDetectHeight = EditorGUILayout.FloatField("攻击框高度:", shape.colliderHeight, GUILayout.Width(300));
     shape.hitRadius       = EditorGUILayout.FloatField("攻击框半径:", shape.colliderRadius, GUILayout.Width(300));
 }
Ejemplo n.º 5
0
 public static void DrawAIClip(AIClip clip, AIClipGroup paretGroup)
 {
     clip.clipKey       = EditorGUILayout.TextField("动画片断键值", clip.clipKey, GUILayout.Width(300));
     clip.name          = EditorGUILayout.TextField("片断名称", clip.name, GUILayout.Width(300));
     clip.animationName = EditorGUILayout.TextField("动画名称", clip.animationName, GUILayout.Width(300));
     if (paretGroup != null)
     {
         clip.defaultLinkClip = AIFUIUtility.DrawAiLinkPopup(paretGroup, clip.defaultLinkClip, "  默认连接", 150, 150);
     }
     clip.animationTime       = EditorGUILayout.FloatField("动画时长", clip.animationTime, GUILayout.Width(300));
     clip.attackRange         = EditorGUILayout.FloatField("攻击范围", clip.attackRange, GUILayout.Width(300));
     clip.CheckDirectionInput = GUILayout.Toggle(clip.CheckDirectionInput, "方向输入(检测到方向输入切换到跑步片断)", GUILayout.Width(250));
     clip.runToTarget         = GUILayout.Toggle(clip.runToTarget, "跑向目标(找到目标的情况向目标移动)", GUILayout.Width(200));
     clip.applyRootMotion     = GUILayout.Toggle(clip.applyRootMotion, "使用动画运动", GUILayout.Width(90));
 }
Ejemplo n.º 6
0
    void OnGUI()
    {
        if (aiLink != null)
        {
            aiLink.linkToClip = AIFUIUtility.DrawAiLinkPopup(srcGroup, aiLink.linkToClip, "目标片断", 150);

            aiLink.checkAllCondition = GUILayout.Toggle(aiLink.checkAllCondition, "检查所有条件");
            aiLink.crossFadeTime     = EditorGUILayout.FloatField("动画过度时间", aiLink.crossFadeTime);

            GUILayout.BeginHorizontal();
            GUILayout.Label("连接条件:", GUILayout.Width(150));

            if (GUILayout.Button("添加条件", GUILayout.Width(100)))
            {
                AILinkCondictionSelectWnd.SelectNewCondition(delegate(AILinkCondiction con)
                {
                    aiLink.linkConditionList.Add(con);
                });
            }
            GUILayout.EndHorizontal();


            for (int i = 0; i < aiLink.linkConditionList.Count; i++)
            {
                AILinkCondiction con = aiLink.linkConditionList[i];
                EditorGUILayout.Separator();
                GUILayout.BeginHorizontal();
                if (GUILayout.Button("X", GUILayout.Width(30)))
                {
                    if (EditorUtility.DisplayDialog("提示", "删除条件?", "OK"))
                    {
                        aiLink.linkConditionList.Remove(con);
                    }
                }
                GUILayout.Label(con.ToString());

                GUILayout.EndHorizontal();
                GUILayout.BeginVertical();

                con.OnEditorUI();
                GUILayout.EndVertical();
            }
        }

        //GUILayout.Button("确定");
    }
Ejemplo n.º 7
0
 void OnGUI()
 {
     if (mDataUnit != null)
     {
         if (mMode == EditMode.Create)
         {
             if (GUILayout.Button("Save", GUILayout.Width(80)))
             {
                 if (AIDataEditor.CheckCreateNew(mClipGroup, mDataUnit))
                 {
                     if (onCreateNew != null)
                     {
                         onCreateNew(mDataUnit);
                         Close();
                     }
                 }
             }
         }
         AIFUIUtility.DrawAIClip(mDataUnit, mClipGroup);
     }
 }
Ejemplo n.º 8
0
    void OnGUI()
    {
        if (mDataUnit != null)
        {
            if (mMode == EditMode.Create)
            {
                if (GUILayout.Button("Save", GUILayout.Width(80)))
                {
                    if (AIDataEditor.CheckCreateNew(mDataUnit))
                    {
                        if (onCreateNew != null)
                        {
                            onCreateNew(mDataUnit);
                            Close();
                        }
                    }
                }
            }

            mDataUnit.Id     = EditorGUILayout.IntField("Id", mDataUnit.Id);
            mDataUnit.AiName = AIFUIUtility.DrawTextField(mDataUnit.AiName, "AiName", 100);
        }
    }
Ejemplo n.º 9
0
    void DrawSelectedAiClipOrGroup()
    {
        GUILayout.BeginArea(new Rect(410, 0, position.width * 0.6f, position.height * 0.9f));
        //selectionScrollPos = GUILayout.BeginScrollView(selectionScrollPos, true, true, GUILayout.Width(400), GUILayout.Height(position.height * 0.9f));

        GUILayout.Label("当前选中");
        AIClip      selectedClip  = AIDataSelection.selectedAiClip;
        AIClipGroup selectedGroup = AIDataSelection.selecteClipGroup;

        if (selectedClip != null)
        {
            AIFUIUtility.DrawAIClip(selectedClip, selectedGroup);
            GUILayout.BeginHorizontal();
            GUILayout.Label("连接片断列表:", GUILayout.Width(100));
            if (GUILayout.Button("添加连接", GUILayout.Width(100)))
            {
                AILink link = new AILink();
                selectedClip.linkAIClipList.Add(link);
                AILinkEditWnd wnd = EditorWindow.GetWindow <AILinkEditWnd>();
                wnd.SetData(AIDataSelection.selecteClipGroup, link);
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginArea(new Rect(250, 150, 500, 700));
            AIFUIUtility.DrawAiEvetList(selectedClip);
            GUILayout.EndArea();

            GUILayout.BeginArea(new Rect(450, 150, 500, 700));
            AIFUIUtility.DrawHitDefinitionList(selectedClip);
            GUILayout.EndArea();

            #region Links
            if (selectedClip.linkAIClipList.Count == 0)
            {
                GUILayout.Label("空列表", GUILayout.Width(300));
            }
            else
            {
                for (int i = 0; i < selectedClip.linkAIClipList.Count; i++)
                {
                    AILink ai = selectedClip.linkAIClipList[i];
                    GUILayout.BeginHorizontal();
                    //string fullClipName=
                    if (AIFUIUtility.LayoutButtonWithColor(ai.linkToClip, AIDataSelection.IsSelectedLinkClip(ai) ? Color.cyan : Color.magenta, 150))
                    {
                        AIDataSelection.SelectLinkClip(ai);
                        AILinkEditWnd.EditAILink(selectedGroup, ai);
                    }
                    if (GUILayout.Button("X", GUILayout.Width(20)))
                    {
                        if (EditorUtility.DisplayDialog("提示", "确定要删除连接吗", "确定"))
                        {
                            selectedClip.linkAIClipList.Remove(ai);
                            return;
                        }
                    }
                    GUILayout.EndHorizontal();
                }



                #region 绘制选择连接
                //AILink link = curSelection.SelectedLink;
                //if (link != null)
                //{
                //    GUILayout.BeginArea(new Rect(300, 50, 500, 700));
                //    link.linkToClip = AIFUIUtility.DrawTextField(link.linkToClip, "连接目标");
                //    conditionListPos = GUILayout.BeginScrollView(conditionListPos, true, true, GUILayout.Width(300), GUILayout.Height(position.height * 0.6f));
                //    AIFUIUtility.DrawAiLinkConditions(link);
                //    GUILayout.EndScrollView();
                //    GUILayout.EndArea();
                //}
                #endregion
            }
            #endregion
        }
        else  //没选中AI片断就检测时候在编辑AI组
        {
            if (AIDataSelection.selecteClipGroup != null)
            {
                AIClipGroup clipGroup = AIDataSelection.selecteClipGroup;
                clipGroup.name       = EditorGUILayout.TextField("Ai组名称", clipGroup.name, GUILayout.Width(300));
                clipGroup.moveSpeed  = EditorGUILayout.FloatField("移动速度", clipGroup.moveSpeed, GUILayout.Width(300));
                clipGroup.targetType = (ETargetType)EditorGUILayout.EnumPopup("目标类型", clipGroup.targetType, GUILayout.Width(300));
                AIFUIUtility.DrawAIShape(AIDataSelection.selecteClipGroup.shape);
                AIFUIUtility.DrawCommanAnimation(AIDataSelection.selecteClipGroup.commonAnimation, AIDataSelection.selecteClipGroup);
            }
            else if (AIDataSelection.selectedUnit != null)
            {
                AIDataSelection.selectedUnit.aiData.AiName = EditorGUILayout.TextField("AI单位名称", AIDataSelection.selectedUnit.aiData.AiName,
                                                                                       GUILayout.Width(400));
                //
            }
        }


        //GUILayout.EndScrollView();
        GUILayout.EndArea();
    }
Ejemplo n.º 10
0
    void DrawAIUnit(UIAIDataUnit groupUnit)
    {
        AIDataUnit aiData = groupUnit.aiData;

        for (int groupIndex = 0; groupIndex < aiData.aiGroups.Count; groupIndex++)
        {
            AIClipGroup clipGroup = aiData.aiGroups[groupIndex];
            GUILayout.BeginHorizontal();
            GUILayout.Space(20);
            bool expandGroup = groupUnit.GetChildExpand(groupIndex);
            if (GUILayout.Button(expandGroup?"-":"+", GUILayout.Width(25)))
            {
                groupUnit.SetChildExpand(groupIndex, !expandGroup);
            }

            if (AIFUIUtility.LayoutButtonWithColor(clipGroup.GroupName, clipGroup == AIDataSelection.selecteClipGroup?Color.magenta:GUI.color, 170))
            {
                AIDataSelection.SelectAIGroup(clipGroup);
            }

            if (GUILayout.Button("Add", GUILayout.Width(45)))
            {
                AIClip        aiClip = new AIClip();
                AIClipEditWnd wnd    = EditorWindow.GetWindow <AIClipEditWnd>();
                wnd.SetData(AIClipEditWnd.EditMode.Create, clipGroup, aiClip, delegate
                {
                    clipGroup.aiClipList.Add(aiClip);
                });
            }
            if (GUILayout.Button("X", GUILayout.Width(45)))
            {
                if (EditorUtility.DisplayDialog("警告", "确定删除动作组?", "确定"))
                {
                    aiData.aiGroups.Remove(clipGroup);
                    Repaint();
                    return;
                }
            }

            GUILayout.EndHorizontal();

            if (expandGroup)
            {
                const int indentSpace = 40;
                #region 绘制展开的AI组片断
                if (clipGroup.aiClipList.Count == 0)
                {
                    GUILayout.BeginHorizontal();
                    GUILayout.Space(indentSpace);
                    GUILayout.Label("空");
                    GUILayout.EndHorizontal();
                }
                else
                {
                    for (int i = 0; i < clipGroup.aiClipList.Count; i++)
                    {
                        AIClip clip = clipGroup.aiClipList[i];
                        GUILayout.BeginHorizontal();
                        GUILayout.Space(indentSpace);
                        Color col = AIDataSelection.selectedAiClip == clip ? Color.green : GUI.color;
                        if (AIFUIUtility.LayoutButtonWithColor(clip.NameOnUI, col, AIFGUISKin.GetStyle("button"), GUILayout.Width(150)))
                        {
                            AIDataSelection.SelectAIDataUnit(groupUnit);
                            AIDataSelection.SelectAIClip(clip);
                        }
                        if (clip == AIDataSelection.selectedAiClip)
                        {
                        }
                        if (GUILayout.Button("X", GUILayout.Width(30)))
                        {
                            if (EditorUtility.DisplayDialog("删除AI片断", "确定要删除?", "Yes"))
                            {
                                DeleteAiClipFromAiGroup(clip, clipGroup);
                                clipGroup.aiClipList.Remove(clip);
                                return;
                            }
                        }
                        GUILayout.EndHorizontal();
                    }
                }
                #endregion
            }
        }
    }
Ejemplo n.º 11
0
    void OnGUI()
    {
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Load File New"))
        {
            AIDataMgr.instance.LoadNewData();
        }
        if (GUILayout.Button("重新加载AI配置表"))
        {
            LoadAiTable();
        }
        if (GUILayout.Button("ClearAllAI", GUILayout.Width(100)))
        {
            AIMgr.instance.DestroyAllAIs();
        }
        if (GUILayout.Button("DebugWindow", GUILayout.Width(100)))
        {
            AIDebugWindow.Open();
        }

        GUILayout.EndHorizontal();

        AIMgr.DisableAiAttack = EditorGUILayout.Toggle("关闭AI攻击", AIMgr.DisableAiAttack);
        createCamp            = (EAiCamp)EditorGUILayout.EnumPopup("创建阵营", createCamp);
        createAsAI            = EditorGUILayout.Toggle("asAi", createAsAI);
        GUILayout.BeginHorizontal();
        aiModelName = AIFUIUtility.DrawTextField(aiModelName, "AI资源名");
        aiDataId    = EditorGUILayout.IntField("AI数据ID", aiDataId);
        GUILayout.EndHorizontal();
        GUILayout.BeginHorizontal();
        if (GUILayout.Button("Create"))
        {
            CreateAI(aiModelName, aiDataId, createCamp, createAsAI);
        }

        if (GUILayout.Button("CreateEnemy"))
        {
            CreateAI(aiModelName, aiDataId, EAiCamp.Enemy, true);
        }
        GUILayout.EndHorizontal();
        GUILayout.Label("创建列表");
        GUILayout.BeginScrollView(scrollPos);
        for (int i = 0; i < roleInfoTableManager.instance.Size(); i++)
        {
            roleInfo info = roleInfoTableManager.instance.GetByIndex(i);
            GUILayout.BeginHorizontal();
            GUILayout.Label(info.ID + "/" + info.AiDataId + "/" + info.name, GUILayout.Width(200));
            if (GUILayout.Button("创建为主角"))
            {
                CreateAI(info.resModel, info.AiDataId, EAiCamp.MainPlayer, false);
            }
            if (GUILayout.Button("创建为友方"))
            {
                CreateAI(info.resModel, info.AiDataId, EAiCamp.Friend, true);
            }
            if (GUILayout.Button("创建为敌方"))
            {
                CreateAI(info.resModel, info.AiDataId, EAiCamp.Enemy, true);
            }
            GUILayout.EndHorizontal();
        }
        GUILayout.EndScrollView();
    }
Ejemplo n.º 12
0
    /// <summary>
    /// 绘制片断时间列表
    /// </summary>
    /// <param name="clip"></param>
    public static void DrawAiEvetList(AIClip clip)
    {
        GUILayout.BeginHorizontal();
        GUILayout.Label("事件列表", GUILayout.Width(60));
        #region copy and paste icons
        if (GUILayout.Button(AIFGUISKin.IconCopy, GUILayout.Width(30), GUILayout.Height(30)))
        {
            if (AIDataSelection.aiEvent != null)
            {
                CustomClipBoard.CopyData(AIDataSelection.aiEvent);
            }
        }
        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 AIClipEvent)
                {
                    clip.AiClipEvents.Add(clipBoardObj as AIClipEvent);
                }
            }
        }
        #endregion
        if (GUILayout.Button(AIFGUISKin.IconNewItem, GUILayout.Width(30), GUILayout.Height(30)))
        {
            AIEventEditWnd.OpenCreateEditor(delegate(AIClipEvent e)
            {
                clip.AiClipEvents.Add(e);
            });
        }
        GUILayout.EndHorizontal();
        if (clip.AiClipEvents.Count == 0)
        {
            GUILayout.Label("事件列表为空");
        }
        else
        {
            for (int i = 0; i < clip.AiClipEvents.Count; i++)
            {
                AIClipEvent evet = clip.AiClipEvents[i];
                GUILayout.BeginHorizontal();
                Color col = AIDataSelection.aiEvent == evet ? Color.green : GUI.color;
                if (AIFUIUtility.LayoutButtonWithColor(evet.eventName, col, 150))
                {
                    AIDataSelection.SelectedAIEvent(evet);
                    AIEventEditWnd.OpenAsEditMode(evet);
                }
                if (GUILayout.Button("X", GUILayout.Width(30)))
                {
                    if (EditorUtility.DisplayDialog("警告", "确定删除事件吗", "确定", "取消"))
                    {
                        clip.AiClipEvents.Remove(evet);
                        return;
                    }
                }
                GUILayout.EndHorizontal();
            }
        }
    }