Browse Source

加入了乌鸦AI,优化逻辑

pull/4/head
软件204张景程 2 years ago
parent
commit
06551bfb51
  1. 7
      ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Bird.asset
  2. 2717
      ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity
  3. 77
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Bird.cs
  4. 32
      ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs
  5. 75
      ColorlessWorld-2024-4-2/Assets/Scripts/Tool/AStar/AStarManager.cs
  6. 43
      ColorlessWorld-2024-4-2/Assets/Scripts/UI/EnemyUIBar.cs
  7. BIN
      ColorlessWorld-2024-4-2/Library/ArtifactDB
  8. BIN
      ColorlessWorld-2024-4-2/Library/Bee/TundraBuildState.state
  9. BIN
      ColorlessWorld-2024-4-2/Library/Bee/TundraBuildState.state.map
  10. 1384
      ColorlessWorld-2024-4-2/Library/Bee/backend1.traceevents
  11. 2961
      ColorlessWorld-2024-4-2/Library/Bee/fullprofile.json
  12. BIN
      ColorlessWorld-2024-4-2/Library/Bee/tundra.digestcache
  13. 10
      ColorlessWorld-2024-4-2/Library/Bee/tundra.log.json
  14. BIN
      ColorlessWorld-2024-4-2/Library/BurstCache/JIT/Hashes/a110ffe6b760e4b56cb86ae44bc7857d.bhc
  15. BIN
      ColorlessWorld-2024-4-2/Library/BurstCache/JIT/Hashes/f890d1fdde3a07f1cb7ddaf50227f1a0.bhc
  16. BIN
      ColorlessWorld-2024-4-2/Library/InspectorExpandedItems.asset
  17. BIN
      ColorlessWorld-2024-4-2/Library/SceneVisibilityState.asset
  18. BIN
      ColorlessWorld-2024-4-2/Library/Search/transactions.db
  19. BIN
      ColorlessWorld-2024-4-2/Library/SourceAssetDB
  20. 2
      ColorlessWorld-2024-4-2/Library/StateCache/SceneView/8c/8cd7c613bf844de3b80696e27a479d5e.json
  21. 2
      ColorlessWorld-2024-4-2/Library/UIElements/EditorWindows/UnityEditor.InspectorWindow.pref
  22. 2
      ColorlessWorld-2024-4-2/Library/ilpp.pid
  23. 2087
      ColorlessWorld-2024-4-2/Logs/AssetImportWorker0-prev.log
  24. 2794
      ColorlessWorld-2024-4-2/Logs/AssetImportWorker0.log
  25. 2894
      ColorlessWorld-2024-4-2/Logs/AssetImportWorker1-prev.log
  26. 2726
      ColorlessWorld-2024-4-2/Logs/AssetImportWorker1.log
  27. 2267
      ColorlessWorld-2024-4-2/Logs/AssetImportWorker2-prev.log
  28. 48
      ColorlessWorld-2024-4-2/UserSettings/Layouts/default-2022.dwlt

7
ColorlessWorld-2024-4-2/Assets/GameDate/Enemy/Bird.asset

@ -13,9 +13,16 @@ MonoBehaviour:
m_Name: Bird
m_EditorClassIdentifier:
stepRange: 1
stepRangeMultiplier: 1
maxMoveCoolDown: 1
currentMoveCoolDown: 1
shieldValue: 0
upShieldValue: 7
maxHP: 100
currentHP: 100
colourType: 0
maxSkillCoolDown: 0
currentSkillCoolDown: 0
damageMultiplier: 1
damage: 7
attackRange: 9

2717
ColorlessWorld-2024-4-2/Assets/Scenes/SampleScene.unity

File diff suppressed because it is too large

77
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/Bird.cs

@ -6,7 +6,8 @@ public class Bird : MonoBehaviour
{
EnemyNode enemyNode;
bool startTurn;//是否是第一回合
public int stayRange =7;//保持一定距离的范围
public List <int> oldTurnSkill =new List<int> ();//上回合使用的技能
public int nextTurnSkill;//下回合使用什么技能,1为啸叫,2为针刺
@ -19,19 +20,7 @@ public class Bird : MonoBehaviour
public void BirdTurn()
{
enemyNode.FindPath();
enemyNode.Move(enemyNode.pasth[0], enemyNode.EnemyState.stepRange);
if (startTurn ==false )
{
//啸叫
Debug.Log("啸叫");
BirdColour();
oldTurnSkill.Add(1);
startTurn = true;
nextTurnSkill = 2;
return;
}
//放技能
if(nextTurnSkill ==1)
@ -48,8 +37,28 @@ public class Bird : MonoBehaviour
oldTurnSkill.Add(2);
}
//判断下回合放啥
if(oldTurnSkill .Count >=3)
//移动
BirdMove();
//下回合意图,先判断行走
enemyNode.SettlementSkill();
if(enemyNode .EnemyState .currentMoveCoolDown >0)
{
enemyNode.canMove = false;
}
else
{
if (enemyNode.pasth.Count == stayRange)
{
enemyNode.canMove = false;
}
else
{
enemyNode.canMove = true;
}
}
//判断下回合放啥技能
if (oldTurnSkill .Count >0)
{
if(oldTurnSkill[oldTurnSkill.Count - 1] ==1)
{
@ -65,10 +74,48 @@ public class Bird : MonoBehaviour
{
int skill = Random.Range(0, 10);
nextTurnSkill = skillWight[skill];
}
}
}
if (nextTurnSkill == 1)
{
enemyNode.planAction = EnemyNode.PlanAction.sheield;
}
else
{
enemyNode.planAction = EnemyNode.PlanAction.shoot;
enemyNode.canLineAppre = true;
}
}
public void BirdMove()
{
if (enemyNode.pasth.Count > 2)
{
if (enemyNode.canMove )
{
if(enemyNode .pasth .Count >stayRange)
{
enemyNode.Move(enemyNode.pasth[0], enemyNode.EnemyState.stepRange);
}
else if(enemyNode.pasth.Count == stayRange)
{
//不动
}
else
{
MapUnity currentNode = enemyNode .pasth [0];
enemyNode. pasth.Clear();
//计算反向目的地
Debug.Log("远离");
enemyNode.pasth = AStarManager.Instance.FindOppositePath(currentNode, GameManager.Instance.playerOn, enemyNode.EnemyState.stepRange);
enemyNode.MoveOpposite(enemyNode.pasth[0], enemyNode.EnemyState.stepRange);
}
}
}
}
public void BirdColour()
{

32
ColorlessWorld-2024-4-2/Assets/Scripts/Enemy/EnemyNode.cs

@ -166,6 +166,38 @@ public class EnemyNode : MonoBehaviour,IEnemyObserver
}
}
}
public void MoveOpposite(MapUnity currentNode, int step)
{
//currentnodeÒÆ¶¯
if (pasth != null)
{
if (pasth.Count > step )
{
currentNode.enemyNode = null;
currentNode.blocked = false;
currentNode = pasth[step];
positionX = currentNode.locationX;
positionY = currentNode.locationY;
currentNode.enemyNode = this;
this.transform.position = pasth[step].transform.position;
}
else if (pasth.Count > 1)
{
currentNode.enemyNode = null;
// currentNode.blocked = false;
currentNode = pasth[pasth.Count - 1];
positionX = currentNode.locationX;
positionY = currentNode.locationY;
currentNode.enemyNode = this;
this.transform.position = pasth[pasth.Count - 1].transform.position;
}
else
{
//²»Òƶ¯
}
}
}
//死亡时
public void OnDeath()

75
ColorlessWorld-2024-4-2/Assets/Scripts/Tool/AStar/AStarManager.cs

@ -74,6 +74,73 @@ public class AStarManager : Singleton<AStarManager>
}
}
}
public List<MapUnity> FindOppositePath(MapUnity starNode, MapUnity endNode ,int step)
{
//判断传入的点是否合法
//1.在地图范围内 2.不是阻挡,不合法返回null不能寻路
if (endNode.blocked == true)
{
return null;
}
if (starNode == endNode)
{
return null;
}
//得到起点和终点对应的格子
//清空上一次列表数据
closeList.Clear();
openList.Clear();
//把起点放到关闭列表中
starNode.aStarNode.fatherNode = null;
starNode.aStarNode.f = 0;
starNode.aStarNode.g = 0;
starNode.aStarNode.h = 0;
closeList.Add(starNode);
while (true)
{
step -= 1;
//从起点开始找周围的点放入开启列表中
//判断这些点是否是边界是否是阻挡,是否在开启列表或者关闭列表中,都不是才能放入
FindNodeToOpenList(starNode, endNode);
//选出开启列表中寻路消耗最高的点
openList.Sort(OppositeSortOpenList);
//死路判断
if (openList.Count == 0)
{
Debug.Log("无法找到路径");
return null;
}
//放入关闭列表中,再从开启列表中移除
closeList.Add(openList[0]);
starNode = openList[0];
openList.RemoveAt(0);
//如果已经是终点,返回路径
//如果不是结果,继续寻路
if (step<=0)
{
//找到路径,回溯路径
List<MapUnity> path = new List<MapUnity>();
path.Add(starNode);
while (starNode.aStarNode.fatherNode != null)
{
path.Add(starNode.aStarNode.fatherNode);
starNode = starNode.aStarNode.fatherNode;
}
//列表反置
path.Reverse();
return path;
}
}
}
private int SortOpenList(MapUnity a,MapUnity b)
{
if (a.aStarNode.f > b.aStarNode.f)
@ -82,6 +149,14 @@ public class AStarManager : Singleton<AStarManager>
return -1;
}
private int OppositeSortOpenList(MapUnity a, MapUnity b)
{
if (a.aStarNode.f > b.aStarNode.f)
return -1;
else
return 1;
}
public void FindNodeToOpenList(MapUnity currentNode,MapUnity endNode)
{
for(int i=0;i<currentNode .unitPool .Count;i++)

43
ColorlessWorld-2024-4-2/Assets/Scripts/UI/EnemyUIBar.cs

@ -68,9 +68,11 @@ public class EnemyUIBar : MonoBehaviour
break;
case EnemyNode.PlanAction.sheield:
planImage.sprite = shieldIcon;
attackDamageText.text = (enemyNode.EnemyState.upShieldValue).ToString();
break;
case EnemyNode.PlanAction.shoot:
planImage.sprite = shootIcon;
attackDamageText.text = (enemyNode.EnemyState.damage * enemyNode.EnemyState.damageMultiplier).ToString();
break;
case EnemyNode.PlanAction.aoe:
planImage.sprite = aoeIcon;
@ -109,6 +111,14 @@ public class EnemyUIBar : MonoBehaviour
private void OnMouseExit()
{
isShow = false;
enemyNode.lineAim.SetActive(false);
//遍历影响池变色
for (int i = 0; i < EnemyManager.Instance.influencePreviewPool.Count; i++)
{
EnemyManager.Instance.influencePreviewPool[i].influenced = false;
}
EnemyManager.Instance.influencePreviewPool.Clear();
}
private void OnGUI()
{
@ -155,6 +165,32 @@ public class EnemyUIBar : MonoBehaviour
}
break;
case EnemyNode.PlanAction.shoot:
//攻击
if (enemyNode.canMove)
{
stateText.text = "这个敌人将会造成" + attackDamageText.text + "点伤害。" + "这个敌人将会移动" + enemyNode.EnemyState.stepRange.ToString() + "个格子。";
EnemyManager.Instance.AttackRangePreviewInfluencedNode(currentMapUnity, enemyNode.EnemyState.attackRange + enemyNode.EnemyState.stepRange);
}
else
{
stateText.text = "这个敌人将会造成" + attackDamageText.text + "点伤害。";
EnemyManager.Instance.AttackRangePreviewInfluencedNode(currentMapUnity, enemyNode.EnemyState.attackRange);
}
break;
case EnemyNode.PlanAction.sheield:
//攻击
if (enemyNode.canMove)
{
stateText.text = "这个敌人将会回复" + attackDamageText.text + "点护盾。" + "这个敌人将会移动" + enemyNode.EnemyState.stepRange.ToString() + "个格子。";
EnemyManager.Instance.AttackRangePreviewInfluencedNode(currentMapUnity, enemyNode.EnemyState.attackRange + enemyNode.EnemyState.stepRange);
}
else
{
stateText.text = "这个敌人将会回复" + attackDamageText.text + "点护盾。";
EnemyManager.Instance.AttackRangePreviewInfluencedNode(currentMapUnity, enemyNode.EnemyState.attackRange);
}
break;
case EnemyNode.PlanAction.random:
stateText.text = "Õâ¸öµÐÈ˽«ÎÞËùÊÂÊÂ";
if (enemyNode.canMove)
@ -168,13 +204,6 @@ public class EnemyUIBar : MonoBehaviour
else
{
statePanel.SetActive(false);
enemyNode.lineAim.SetActive (false );
//±éÀúÓ°Ïì³Ø±äÉ«
for (int i = 0; i < EnemyManager.Instance.influencePreviewPool.Count; i++)
{
EnemyManager.Instance.influencePreviewPool[i].influenced = false;
}
EnemyManager.Instance.influencePreviewPool.Clear();
}
}

BIN
ColorlessWorld-2024-4-2/Library/ArtifactDB

Binary file not shown.

BIN
ColorlessWorld-2024-4-2/Library/Bee/TundraBuildState.state

Binary file not shown.

BIN
ColorlessWorld-2024-4-2/Library/Bee/TundraBuildState.state.map

Binary file not shown.

1384
ColorlessWorld-2024-4-2/Library/Bee/backend1.traceevents

File diff suppressed because it is too large

2961
ColorlessWorld-2024-4-2/Library/Bee/fullprofile.json

File diff suppressed because it is too large

BIN
ColorlessWorld-2024-4-2/Library/Bee/tundra.digestcache

Binary file not shown.

10
ColorlessWorld-2024-4-2/Library/Bee/tundra.log.json

File diff suppressed because one or more lines are too long

BIN
ColorlessWorld-2024-4-2/Library/BurstCache/JIT/Hashes/a110ffe6b760e4b56cb86ae44bc7857d.bhc

Binary file not shown.

BIN
ColorlessWorld-2024-4-2/Library/BurstCache/JIT/Hashes/f890d1fdde3a07f1cb7ddaf50227f1a0.bhc

Binary file not shown.

BIN
ColorlessWorld-2024-4-2/Library/InspectorExpandedItems.asset

Binary file not shown.

BIN
ColorlessWorld-2024-4-2/Library/SceneVisibilityState.asset

Binary file not shown.

BIN
ColorlessWorld-2024-4-2/Library/Search/transactions.db

Binary file not shown.

BIN
ColorlessWorld-2024-4-2/Library/SourceAssetDB

Binary file not shown.

2
ColorlessWorld-2024-4-2/Library/StateCache/SceneView/8c/8cd7c613bf844de3b80696e27a479d5e.json

@ -1 +1 @@
{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"m_AlwaysRefresh":false,"showFog":true,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true,"showVisualEffectGraphs":true,"m_FxEnabled":true},"in2DMode":false,"pivot":{"x":20.715362548828126,"y":0.8657782077789307,"z":5.114433288574219},"rotation":{"x":0.4063754677772522,"y":0.08962298929691315,"z":-0.04034305736422539,"w":0.9085975289344788},"size":0.8575133085250855,"orthographic":false}
{"cameraMode":{"drawMode":0,"name":"Shaded","section":"Shading Mode"},"sceneLighting":true,"audioPlay":false,"sceneViewState":{"m_AlwaysRefresh":false,"showFog":true,"showSkybox":true,"showFlares":true,"showImageEffects":true,"showParticleSystems":true,"showVisualEffectGraphs":true,"m_FxEnabled":true},"in2DMode":false,"pivot":{"x":3.999392509460449,"y":-1.338151454925537,"z":2.8440005779266359},"rotation":{"x":0.5858413577079773,"y":0.0018278908682987095,"z":-0.0016127827111631632,"w":0.8106403350830078},"size":6.8409423828125,"orthographic":false}

2
ColorlessWorld-2024-4-2/Library/UIElements/EditorWindows/UnityEditor.InspectorWindow.pref

@ -228,7 +228,7 @@ MonoBehaviour:
- '{}'
- '{}'
- '{}'
- '{"m_ShowAlternatingRowBackgrounds":0,"serializedVirtualizationData":{"scrollOffset":{"x":0.0,"y":0.0},"firstVisibleIndex":0,"contentPadding":0.0,"contentHeight":64.80000305175781,"anchoredItemIndex":0,"anchorOffset":0.0}}'
- '{"m_ShowAlternatingRowBackgrounds":0,"serializedVirtualizationData":{"scrollOffset":{"x":0.0,"y":0.0},"firstVisibleIndex":0,"contentPadding":0.0,"contentHeight":0.0,"anchoredItemIndex":-1,"anchorOffset":0.0}}'
- '{}'
- '{}'
- '{}'

2
ColorlessWorld-2024-4-2/Library/ilpp.pid

@ -1 +1 @@
18144
14260

2087
ColorlessWorld-2024-4-2/Logs/AssetImportWorker0-prev.log

File diff suppressed because it is too large

2794
ColorlessWorld-2024-4-2/Logs/AssetImportWorker0.log

File diff suppressed because it is too large

2894
ColorlessWorld-2024-4-2/Logs/AssetImportWorker1-prev.log

File diff suppressed because it is too large

2726
ColorlessWorld-2024-4-2/Logs/AssetImportWorker1.log

File diff suppressed because it is too large

2267
ColorlessWorld-2024-4-2/Logs/AssetImportWorker2-prev.log

File diff suppressed because it is too large

48
ColorlessWorld-2024-4-2/UserSettings/Layouts/default-2022.dwlt

@ -19,7 +19,7 @@ MonoBehaviour:
width: 1459.2001
height: 803.2
m_ShowMode: 4
m_Title: "\u68C0\u67E5\u5668"
m_Title: "\u63A7\u5236\u53F0"
m_RootView: {fileID: 2}
m_MinSize: {x: 875, y: 321}
m_MaxSize: {x: 10000, y: 10000}
@ -119,7 +119,7 @@ MonoBehaviour:
m_MinSize: {x: 300, y: 100}
m_MaxSize: {x: 24288, y: 16192}
vertical: 0
controlID: 982
controlID: 96
--- !u!114 &6
MonoBehaviour:
m_ObjectHideFlags: 52
@ -144,7 +144,7 @@ MonoBehaviour:
m_MinSize: {x: 200, y: 100}
m_MaxSize: {x: 16192, y: 16192}
vertical: 1
controlID: 983
controlID: 51
--- !u!114 &7
MonoBehaviour:
m_ObjectHideFlags: 52
@ -169,7 +169,7 @@ MonoBehaviour:
m_MinSize: {x: 200, y: 50}
m_MaxSize: {x: 16192, y: 8096}
vertical: 0
controlID: 984
controlID: 52
--- !u!114 &8
MonoBehaviour:
m_ObjectHideFlags: 52
@ -344,7 +344,7 @@ MonoBehaviour:
m_HSlider: 0
m_VSlider: 0
m_IgnoreScrollWheelUntilClicked: 0
m_EnableMouseInput: 1
m_EnableMouseInput: 0
m_EnableSliderZoomHorizontal: 0
m_EnableSliderZoomVertical: 0
m_UniformScale: 1
@ -413,9 +413,9 @@ MonoBehaviour:
m_SceneHierarchy:
m_TreeViewState:
scrollPos: {x: 0, y: 0}
m_SelectedIDs: b86e0000
m_LastClickedID: 28344
m_ExpandedIDs: 2afbffff666c00008e6d0000566e0000
m_SelectedIDs: 566e0000
m_LastClickedID: 28246
m_ExpandedIDs: a2f8ffffa6f8ffffc2f8ffff2afbffff666c00008e6d0000d46e0000266f0000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -783,9 +783,9 @@ MonoBehaviour:
m_PlayAudio: 0
m_AudioPlay: 0
m_Position:
m_Target: {x: 20.715363, y: 0.8657782, z: 5.1144333}
m_Target: {x: 3.9993925, y: -1.3381515, z: 2.8440006}
speed: 2
m_Value: {x: 20.715363, y: 0.8657782, z: 5.1144333}
m_Value: {x: 3.9993925, y: -1.3381515, z: 2.8440006}
m_RenderMode: 0
m_CameraMode:
drawMode: 0
@ -831,13 +831,13 @@ MonoBehaviour:
m_GridAxis: 1
m_gridOpacity: 0.5
m_Rotation:
m_Target: {x: 0.40637547, y: 0.08962299, z: -0.040343057, w: 0.9085975}
m_Target: {x: 0.58584136, y: 0.0018278909, z: -0.0016127827, w: 0.81064034}
speed: 2
m_Value: {x: 0.40625563, y: 0.09069734, z: -0.040823523, w: 0.90833026}
m_Value: {x: 0.58573776, y: 0.0018275676, z: -0.0016124975, w: 0.8104969}
m_Size:
m_Target: 0.8575133
m_Target: 6.8409424
speed: 2
m_Value: 0.8575133
m_Value: 6.8409424
m_Ortho:
m_Target: 0
speed: 2
@ -908,7 +908,7 @@ MonoBehaviour:
m_SkipHidden: 0
m_SearchArea: 1
m_Folders:
- Assets/Scripts/UI
- Assets/Scripts/Enemy
m_Globs: []
m_OriginalText:
m_ImportLogFlags: 0
@ -916,16 +916,16 @@ MonoBehaviour:
m_ViewMode: 1
m_StartGridSize: 64
m_LastFolders:
- Assets/Scripts/UI
- Assets/Scripts/Enemy
m_LastFoldersGridSize: -1
m_LastProjectPath: D:\GitInventory_0524\test_45\ColorlessWorld-2024-4-2
m_LockTracker:
m_IsLocked: 0
m_FolderTreeState:
scrollPos: {x: 0, y: 82.19998}
m_SelectedIDs: d8720000
m_LastClickedID: 29400
m_ExpandedIDs: 000000000c7100000e710000c472000000ca9a3bffffff7f
scrollPos: {x: 0, y: 194.19998}
m_SelectedIDs: e4720000
m_LastClickedID: 29412
m_ExpandedIDs: 000000000c7100000e710000d8720000da720000ea72000000ca9a3bffffff7f
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -953,7 +953,7 @@ MonoBehaviour:
scrollPos: {x: 0, y: 0}
m_SelectedIDs:
m_LastClickedID: 0
m_ExpandedIDs: 000000000c7100000e71000000ca9a3bffffff7f
m_ExpandedIDs: 000000000c7100000e710000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:
@ -978,10 +978,10 @@ MonoBehaviour:
m_Icon: {fileID: 0}
m_ResourceFile:
m_ListAreaState:
m_SelectedInstanceIDs: 3a1a0000
m_LastClickedInstanceID: 6714
m_SelectedInstanceIDs: 566e0000
m_LastClickedInstanceID: 28246
m_HadKeyboardFocusLastEvent: 1
m_ExpandedInstanceIDs: c6230000f06f00003a7b000058cc00005ecc00006ed400004e6e000000000000e0720000
m_ExpandedInstanceIDs: c6230000f06f00003a7b000058cc00005ecc00006ed400004e6e000000000000e07200000a7000000e70000002810000
m_RenameOverlay:
m_UserAcceptedRename: 0
m_Name:

Loading…
Cancel
Save