// add a group list public void AddGroupList(List <GroupBehaviourNode> pList, GroupDissolve pDissolve, GroupStrategyRT pStrategy, GroupAllocation pAllocation, GroupStrategyEnter pEnter, GroupStrategyExit pExit) { mGroupLists.Add(pList); int index = mGroupLists.IndexOf(pList); Dictionaryforid2Allocation.Add(index, pAllocation); Dictionaryforid2Dissolve.Add(index, pDissolve); Dictionaryforid2Strategy.Add(index, pStrategy); Dictionaryforid2StrategyEnter.Add(index, pEnter); Dictionaryforid2StrategyExit.Add(index, pExit); }
public override void Update(UEntity uEntity) { base.Update(uEntity); // clear responsor data for (int i = 0; i < uEntity.GetComponent <GroupManager> ().mResponseCount; i++) { if (!uEntity.GetComponent <GroupManager> ().mResponses [i].mSucceedTeam) { uEntity.GetComponent <GroupManager> ().mResponses [i].mLeader = null; } } for (int i = 0; i < uEntity.GetComponent <GroupManager> ().mSponsorCount; i++) { // sponsor having grouping if (uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.isGrouping) { if (uEntity.GetComponent <GroupManager> ().mSponsors [i].mDissloveTimer < 1.0f) { uEntity.GetComponent <GroupManager> ().mSponsors [i].mDissloveTimer += Time.deltaTime; } else { //Debug.Log (uEntity.GetComponent<GroupManager> ().mSponsors [i].tempGroupID+" "+i); // check dissolve GroupDissolve tDissolve = uEntity.GetComponent <GroupManager> ().Dictionaryforid2Dissolve [uEntity.GetComponent <GroupManager> ().mSponsors [i].tempGroupID]; AIEntity[] pEntitys = new AIEntity[uEntity.GetComponent <GroupManager> ().mSponsors[i].memebercount]; for (int j = 0; j < uEntity.GetComponent <GroupManager> ().mSponsors [i].memebercount; j++) { pEntitys [j] = uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse; } float rate = tDissolve(uEntity.GetComponent <GroupManager>().mSponsors[i].mSponsor, pEntitys); GroupStrategyExit tExit = uEntity.GetComponent <GroupManager> ().Dictionaryforid2StrategyExit [uEntity.GetComponent <GroupManager> ().mSponsors [i].tempGroupID]; if (Random.Range(0.0f, 1.0f) < rate) { // dissolve for (int j = 0; j < uEntity.GetComponent <GroupManager> ().mSponsors [i].memebercount; j++) { uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse.isGrouping = false; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mSucceedTeam = false; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mLeader = null; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mGroupID = -1; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse.mDissloveTimer = 10.0f; } uEntity.GetComponent <GroupManager> ().mSponsors [i].memebercount = 0; uEntity.GetComponent <GroupManager> ().mSponsors [i].mDissloveTimer = 0.0f; uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.isGrouping = false; uEntity.GetComponent <GroupManager> ().mSponsors [i].tempGroupID = -1; tExit(uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor, pEntitys); } uEntity.GetComponent <GroupManager> ().mSponsors [i].mDissloveTimer = 0.0f; } } else { uEntity.GetComponent <GroupManager> ().mSponsors [i].memebercount = 0; #if DEBUG AIEntity[] mEntity = AIEntity.getAllEntityWithSphere(uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor, uEntity.GetComponent <GroupManager> ().mCheckDistance); #else AIEntity[] mEntity = AIEntity.getAllEntityWithSphere(uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor, 10.0f); #endif List <ResponseNode> mResponseList = new List <ResponseNode> (); // get real responsor neighbor sponsor for (int j = 0; j < mEntity.Length; j++) { if (mEntity [j].mDissloveTimer > 0.0f) { continue; } for (int k = 0; k < uEntity.GetComponent <GroupManager>().mResponseCount; k++) { ResponseNode rn = uEntity.GetComponent <GroupManager> ().mResponses [k]; if (rn.mResponse == mEntity [j] && rn.mLeader == null) { mResponseList.Add(rn); break; } } } // responsor count int count = Mathf.Min(mResponseList.Count, uEntity.GetComponent <GroupManager>().mSponsors[i].members.Length); // Debug.Log (count); // init for (int j = 0; j < count; j++) { uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j] = mResponseList [j]; //uEntity.GetComponent<GroupManager> ().mSponsors [i].members [j].mLeader = uEntity.GetComponent<GroupManager> ().mSponsors [i].mSponsor; } uEntity.GetComponent <GroupManager> ().mSponsors [i].memebercount = count; // check Group if (uEntity.GetComponent <GroupManager> ().mSponsors [i].checkGroup()) { /* * for (int j = 0; j < count; j++) * { * uEntity.GetComponent<GroupManager> ().mSponsors [i].members [j].mLeader = uEntity.GetComponent<GroupManager> ().mSponsors [i].mSponsor; * } */ // enter group GroupStrategyEnter tEnter = uEntity.GetComponent <GroupManager> ().Dictionaryforid2StrategyEnter [uEntity.GetComponent <GroupManager> ().mSponsors [i].tempGroupID]; GroupAllocation tAlloc = uEntity.GetComponent <GroupManager> ().Dictionaryforid2Allocation [uEntity.GetComponent <GroupManager> ().mSponsors [i].tempGroupID]; AIEntity[] pEntitys = new AIEntity[uEntity.GetComponent <GroupManager> ().mSponsors [i].memebercount]; for (int j = 0; j < uEntity.GetComponent <GroupManager> ().mSponsors [i].memebercount; j++) { pEntitys [j] = uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse; } // enter function tEnter(uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor, pEntitys); // alloc function int[] ids = tAlloc(uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor, pEntitys); // init sponsor uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.isGrouping = true; uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.GetComponent <AIGroupState> ().tempGroupID = 0; EntityStrategyNode esn = new EntityStrategyNode(); esn.id = uEntity.GetComponent <GroupManager> ().mSponsors [i].tempGroupID; esn.tagName = uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.tag; // AIGroupState temp AIGroupState mStateRT = uEntity.GetComponent <GroupManager> ().DictionaryforGroupState [esn]; uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.GetComponent <AIGroupState> ().pLeader = uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor; uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.GetComponent <AIGroupState> ().pMembers = pEntitys; uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.GetComponent <AIGroupState> ().SimpleClone(mStateRT); for (int j = 0; j < uEntity.GetComponent <GroupManager> ().mSponsors [i].memebercount; j++) { // init Responsor uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mGroupID = ids [j]; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse.isGrouping = true; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse.GetComponent <AIGroupState> ().tempGroupID = ids [j]; EntityStrategyNode esn1 = new EntityStrategyNode(); esn1.id = uEntity.GetComponent <GroupManager> ().mSponsors [i].tempGroupID; esn1.tagName = uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor.tag; AIGroupState mStateRT1 = uEntity.GetComponent <GroupManager> ().DictionaryforGroupState [esn1]; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse.GetComponent <AIGroupState> ().pLeader = uEntity.GetComponent <GroupManager> ().mSponsors [i].mSponsor; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse.GetComponent <AIGroupState> ().pMembers = pEntitys; uEntity.GetComponent <GroupManager> ().mSponsors [i].members [j].mResponse.GetComponent <AIGroupState> ().SimpleClone(mStateRT1); } } } } }
void Start() { group_return = TestGroup.Test_Group_Return; group_round = TestGroup.Test_Group_Round; return2round = TestGroup.Test_Group_Return2Round; groupStrategy = TestGroup.Test_Group_Strategy; GStrategyEnter = TestGroup.Test_Group_Enter; GDissolve = TestGroup.Test_Group_Disslove; GAlloc = TestGroup.Test_Group_Alloc; Round = TestGroup.Test_Round; RoundExit = TestGroup.Test_Round_Exit; Idle = TestGroup.Test_Idle; IdleExit = TestGroup.Test_Idle_Exit; Idle2Round = TestGroup.Test_Idle2Round; Round2Idle = TestGroup.Test_Round2Idle; walkPlay = TestFSM.FSM_Walk_Anim; IdlePlay = TestFSM.FSM_Idle_Anim; group_cube_strategy = TestGroup.Test_Group_CubeStrategy; group_return_cube = TestGroup.Test_Group_Return_Cube; GroupBehaviourNode gbn = new GroupBehaviourNode(); gbn.mCount = 4; gbn.mRoleName = "Test"; List <GroupBehaviourNode> gbnList = new List <GroupBehaviourNode> (); gbnList.Add(gbn); GroupManager.getInstance().AddGroupList(gbnList, GDissolve, groupStrategy, GAlloc, GStrategyEnter, EmptyGroupFunc.StrategyExit); AIGroupState aiGroupState = new AIGroupState(); int id_group_return = aiGroupState.AddGroupState(group_return, TestGroup.Test_Group_Return_Enter, EmptyGroupFunc.StateExit); int id_group_round = aiGroupState.AddGroupState(group_round, EmptyGroupFunc.StateEnter, EmptyGroupFunc.StateExit); aiGroupState.AddAnim(id_group_return, TestGroup.Test_Group_Return_Anim); aiGroupState.AddAnim(id_group_round, TestGroup.Test_Group_Round_Anim); aiGroupState.AddTransfer(id_group_return, id_group_round, return2round); aiGroupState.tempID = id_group_return; GroupManager.getInstance().AddStrategy("Test", 0, aiGroupState); GroupBehaviourNode gbn_cube1 = new GroupBehaviourNode(); gbn_cube1.mCount = 2; gbn_cube1.mRoleName = "Test"; GroupBehaviourNode gbn_cube2 = new GroupBehaviourNode(); gbn_cube2.mCount = 3; gbn_cube2.mRoleName = "Test1"; List <GroupBehaviourNode> gbncubeList = new List <GroupBehaviourNode> (); gbncubeList.Add(gbn_cube1); gbncubeList.Add(gbn_cube2); GroupManager.getInstance().AddGroupList(gbncubeList, GDissolve, group_cube_strategy, GAlloc, GStrategyEnter, EmptyGroupFunc.StrategyExit); AIGroupState aiGroupState1 = new AIGroupState(); int id_cube_group = aiGroupState1.AddGroupState(group_return_cube, TestGroup.Test_Group_Return_Enter, EmptyGroupFunc.StateExit); aiGroupState1.AddAnim(id_group_return, TestGroup.Test_Group_Return_Anim); aiGroupState1.AddAnim(id_group_round, TestGroup.Test_Group_Round_Anim); aiGroupState1.tempID = id_cube_group; GroupManager.getInstance().AddStrategy("Test1", 1, aiGroupState1); List <int> key1 = new List <int>(); key1.Add(1); GroupManager.getInstance().AddKey("Test1", key1); List <int> key = new List <int>(); key.Add(0); GroupManager.getInstance().AddKey("Test", key); GroupManager.getInstance().mCheckDistance = 20.0f; for (int i = 0; i < count; i++) { AIEntity pEntity = new AIEntity(); pEntity.tag = "Test"; UEntity mPlayer = new UEntity(); UEntity mPlayerLast = new UEntity(); pEntity.mAI = groupAIDemo; pEntity.mPlayer = position; pEntity.AIPos = position.transform.position + new Vector3(Random.Range(-20, 20), 0, Random.Range(-20, 20)); ECSWorld.MainWorld.registerEntityAfterInit(pEntity); pEntity.Init(); pEntity.AddComponent <myAI> (new myAI()); pEntity.AddComponent <myGroupAI> (new myGroupAI()); pEntity.GetComponent <BaseAIComponent> ().mAIRT.SetActive(true); pEntity.PlayerEntity = mPlayer; animator = pEntity.GetComponent <BaseAIComponent> ().mAIRT.GetComponent <Animator> (); pEntity.GetComponent <AIAnimation> ().mAnimator = animator; pEntity.GetComponent <AIAnimation> ().Add("Idle", IdlePlay); pEntity.GetComponent <AIAnimation> ().Add("Walk", walkPlay); pEntity.GetComponent <AIAnimation>().mtempAnim = "Walk"; int id_round = pEntity.GetComponent <AIState> ().AddExecuter(Round, RoundExit, EmptyExitAndEnter.EmptyEnter); //int id_idle = pEntity.GetComponent<AIState> ().AddExecuter (Idle,IdleExit,EmptyExitAndEnter.EmptyEnter); //pEntity.GetComponent<AIState> ().AddEdge (Round2Idle,EmptyFeedbacker.Run,id_round,id_idle); //pEntity.GetComponent<AIState> ().AddEdge (Idle2Round,EmptyFeedbacker.Run,id_idle,id_round); pEntity.GetComponent <AIState> ().AddAnimation(Round, "Walk"); pEntity.GetComponent <AIState> ().AddAnimation(Idle, "Idle"); pEntity.GetComponent <AIState> ().tempID = id_round; pEntity.GetComponent <AIState> ().mStateRecorder = EmptyExitAndEnter.EmptyEnter; if (i == 0) { GroupManager.getInstance().AddSponsor(pEntity); } else { GroupManager.getInstance().AddResponse(pEntity); } } for (int i = 0; i < count1; i++) { AIEntity pEntity = new AIEntity(); pEntity.tag = "Test1"; UEntity mPlayer = new UEntity(); UEntity mPlayerLast = new UEntity(); pEntity.mAI = groupAICube; pEntity.mPlayer = position; pEntity.AIPos = position.transform.position + new Vector3(Random.Range(-20, 20), 0, Random.Range(-20, 20)); ECSWorld.MainWorld.registerEntityAfterInit(pEntity); pEntity.Init(); pEntity.AddComponent <myAI> (new myAI()); pEntity.AddComponent <myGroupAI> (new myGroupAI()); pEntity.GetComponent <BaseAIComponent> ().mAIRT.SetActive(true); pEntity.PlayerEntity = mPlayer; pEntity.GetComponent <AIAnimation>().mtempAnim = "Walk"; int id_round = pEntity.GetComponent <AIState> ().AddExecuter(Round, RoundExit, EmptyExitAndEnter.EmptyEnter); pEntity.GetComponent <AIState> ().tempID = id_round; pEntity.GetComponent <AIState> ().mStateRecorder = EmptyExitAndEnter.EmptyEnter; if (i == 0) { GroupManager.getInstance().AddSponsor(pEntity); } else { GroupManager.getInstance().AddResponse(pEntity); } } }
// 群体行为中没有反馈函数 // Use this for initialization void Start() { enterGroup = GroupSM4.Enter; strategyGroup = GroupSM4.Strategy; allocationGroup = GroupSM4.Allocation; dissolveGroup = GroupSM4.Disslove; exitGroup = GroupSM4.Exit; returnEnter = GroupSM4.Return_Enter; returnState = GroupSM4.Return; returnExit = GroupSM4.Return_Exit; roundEnter = GroupSM4.Round_Enter; roundState = GroupSM4.Round; roundExit = GroupSM4.Round_Exit; restEnter = GroupSM4.Rest_Enter; restState = GroupSM4.Rest; restExit = GroupSM4.Rest_Exit; vigilanceEnter = GroupSM4.Vigilance_Enter; vigilanceState = GroupSM4.Vigilance; vigilanceExit = GroupSM4.Vigilance_Exit; searchEnter = GroupSM4.Search_Enter; searchState = GroupSM4.Search; searchExit = GroupSM4.Search_Exit; chaseEnter = GroupSM4.Chase_Enter; chaseState = GroupSM4.Chase; chaseExit = GroupSM4.Chase_Exit; shieldFEnter = GroupSM4.ShieldF_Enter; shieldFState = GroupSM4.ShieldF; shieldFExit = GroupSM4.ShieldF_Exit; return2round = GroupSM4.Return2Round; round2rest = GroupSM4.Round2Rest; rest2round = GroupSM4.Rest2Round; round2vigilance = GroupSM4.Round2Vigilance; vigilance2round = GroupSM4.Vigilance2Round; rest2vigilance = GroupSM4.Rest2Vigilance; vigilance2search = GroupSM4.Vigilance2Search; search2round = GroupSM4.Serach2Round; search2chase = GroupSM4.Search2Chase; chase2round = GroupSM4.Chase2Round; chase2shieldF = GroupSM4.Chase2ShieldF; shieldF2chase = GroupSM4.ShieldF2Chase; GroupBehaviourNode gbnSM4 = new GroupBehaviourNode(); gbnSM4.mCount = 4; gbnSM4.mRoleName = "ShieldMan"; List <GroupBehaviourNode> gbnList0 = new List <GroupBehaviourNode> (); gbnList0.Add(gbnSM4); GroupManager.getInstance().AddGroupList(gbnList0, dissolveGroup, strategyGroup, allocationGroup, enterGroup, exitGroup); AIGroupState aiGroupState0 = new AIGroupState(); int id0_return = aiGroupState0.AddGroupState(returnState, returnEnter, returnExit); int id0_round = aiGroupState0.AddGroupState(roundState, roundEnter, roundExit); int id0_rest = aiGroupState0.AddGroupState(restState, restEnter, restExit); int id0_vigilance = aiGroupState0.AddGroupState(vigilanceState, vigilanceEnter, vigilanceExit); int id0_search = aiGroupState0.AddGroupState(searchState, searchEnter, searchExit); int id0_chase = aiGroupState0.AddGroupState(chaseState, chaseEnter, chaseExit); int id0_shieldF = aiGroupState0.AddGroupState(shieldFState, shieldFEnter, shieldFExit); aiGroupState0.AddAnim(id0_return, GroupSM4.Return_Anim); aiGroupState0.AddAnim(id0_round, GroupSM4.Round_Anim); aiGroupState0.AddAnim(id0_rest, GroupSM4.Rest_Anim); aiGroupState0.AddAnim(id0_vigilance, GroupSM4.Vigilance_Anim); aiGroupState0.AddAnim(id0_search, GroupSM4.Search_Anim); aiGroupState0.AddAnim(id0_chase, GroupSM4.Chase_Anim); aiGroupState0.AddAnim(id0_shieldF, GroupSM4.ShieldF_Anim); aiGroupState0.AddTransfer(id0_return, id0_round, return2round); aiGroupState0.AddTransfer(id0_round, id0_rest, round2rest); aiGroupState0.AddTransfer(id0_rest, id0_round, rest2round); aiGroupState0.AddTransfer(id0_round, id0_vigilance, round2vigilance); aiGroupState0.AddTransfer(id0_vigilance, id0_round, vigilance2round); aiGroupState0.AddTransfer(id0_rest, id0_vigilance, rest2vigilance); aiGroupState0.AddTransfer(id0_vigilance, id0_search, vigilance2search); aiGroupState0.AddTransfer(id0_search, id0_round, search2round); aiGroupState0.AddTransfer(id0_search, id0_chase, search2chase); aiGroupState0.AddTransfer(id0_chase, id0_round, chase2round); aiGroupState0.AddTransfer(id0_chase, id0_shieldF, chase2shieldF); aiGroupState0.AddTransfer(id0_shieldF, id0_chase, shieldF2chase); aiGroupState0.tempID = id0_return; GroupManager.getInstance().AddStrategy("ShieldMan", 0, aiGroupState0); // 二号队伍的绑定 enterGroup = GYTGroupSM3TM1.Enter; strategyGroup = GYTGroupSM3TM1.Strategy; allocationGroup = GYTGroupSM3TM1.Allocation; dissolveGroup = GYTGroupSM3TM1.Disslove; exitGroup = GYTGroupSM3TM1.Exit; returnEnter = GYTGroupSM3TM1.Return_Enter; returnState = GYTGroupSM3TM1.Return; returnExit = GYTGroupSM3TM1.Return_Exit; roundEnter = GYTGroupSM3TM1.Round_Enter; roundState = GYTGroupSM3TM1.Round; roundExit = GYTGroupSM3TM1.Round_Exit; restEnter = GYTGroupSM3TM1.Rest_Enter; restState = GYTGroupSM3TM1.Rest; restExit = GYTGroupSM3TM1.Rest_Exit; vigilanceEnter = GYTGroupSM3TM1.Vigilance_Enter; vigilanceState = GYTGroupSM3TM1.Vigilance; vigilanceExit = GYTGroupSM3TM1.Vigilance_Exit; searchEnter = GYTGroupSM3TM1.Search_Enter; searchState = GYTGroupSM3TM1.Search; searchExit = GYTGroupSM3TM1.Search_Exit; engageEnter = GYTGroupSM3TM1.Engage_Enter; engageState = GYTGroupSM3TM1.Engage; engageExit = GYTGroupSM3TM1.Engage_Exit; return2round = GYTGroupSM3TM1.Return2Round; round2rest = GYTGroupSM3TM1.Round2Rest; rest2round = GYTGroupSM3TM1.Rest2Round; round2vigilance = GYTGroupSM3TM1.Round2Vigilance; vigilance2round = GYTGroupSM3TM1.Vigilance2Round; rest2vigilance = GYTGroupSM3TM1.Rest2Vigilance; vigilance2search = GYTGroupSM3TM1.Vigilance2Search; search2round = GYTGroupSM3TM1.Serach2Round; search2engage = GYTGroupSM3TM1.Search2Engage; engage2return = GYTGroupSM3TM1.Engage2Return; GroupBehaviourNode gbnSM3 = new GroupBehaviourNode(); gbnSM3.mCount = 3; gbnSM3.mRoleName = "ShieldMan"; GroupBehaviourNode gbnTM1 = new GroupBehaviourNode(); gbnTM1.mCount = 1; gbnTM1.mRoleName = "TrapMan"; List <GroupBehaviourNode> gbnList1 = new List <GroupBehaviourNode> (); gbnList1.Add(gbnSM3); gbnList1.Add(gbnTM1); GroupManager.getInstance().AddGroupList(gbnList1, dissolveGroup, strategyGroup, allocationGroup, enterGroup, exitGroup); AIGroupState aiGroupState1 = new AIGroupState(); int id1_return = aiGroupState1.AddGroupState(returnState, returnEnter, returnExit); int id1_round = aiGroupState1.AddGroupState(roundState, roundEnter, roundExit); int id1_rest = aiGroupState1.AddGroupState(restState, restEnter, restExit); int id1_vigilance = aiGroupState1.AddGroupState(vigilanceState, vigilanceEnter, vigilanceExit); int id1_search = aiGroupState1.AddGroupState(searchState, searchEnter, searchExit); int id1_engage = aiGroupState1.AddGroupState(engageState, engageEnter, engageExit); aiGroupState1.AddAnim(id1_return, GYTGroupSM3TM1.Return_Anim); aiGroupState1.AddAnim(id1_round, GYTGroupSM3TM1.Round_Anim); aiGroupState1.AddAnim(id1_rest, GYTGroupSM3TM1.Rest_Anim); aiGroupState1.AddAnim(id1_vigilance, GYTGroupSM3TM1.Vigilance_Anim); aiGroupState1.AddAnim(id1_search, GYTGroupSM3TM1.Search_Anim); aiGroupState1.AddAnim(id1_engage, GYTGroupSM3TM1.Engage_Anim); aiGroupState1.AddTransfer(id1_return, id1_round, return2round); aiGroupState1.AddTransfer(id1_round, id1_rest, round2rest); aiGroupState1.AddTransfer(id1_rest, id1_round, rest2round); aiGroupState1.AddTransfer(id1_round, id1_vigilance, round2vigilance); aiGroupState1.AddTransfer(id1_vigilance, id1_round, vigilance2round); aiGroupState1.AddTransfer(id1_rest, id1_vigilance, rest2vigilance); aiGroupState1.AddTransfer(id1_vigilance, id1_search, vigilance2search); aiGroupState1.AddTransfer(id1_search, id1_round, search2round); aiGroupState1.AddTransfer(id1_search, id1_engage, search2engage); aiGroupState1.AddTransfer(id1_engage, id1_return, engage2return); aiGroupState1.tempID = id1_return; GroupManager.getInstance().AddStrategy("TrapMan", 1, aiGroupState1); List <int> key0 = new List <int> (); key0.Add(0); GroupManager.getInstance().AddKey("ShieldMan", key0); List <int> key1 = new List <int> (); key1.Add(1); GroupManager.getInstance().AddKey("TrapMan", key1); // 用于设置判定球的半径 GroupManager.getInstance().mCheckDistance = 20.0f; }