V3.1 控制模式完成

完成控制模式中UI,解决所有逻辑问题。控制模式于Unity中正常运行,可正常判断结束。
This commit is contained in:
2023-06-29 15:18:10 +09:00
parent ff094aaba5
commit 64e477d6c2
24 changed files with 1502 additions and 658 deletions
+1 -1
View File
@@ -1 +1 @@
{"count":1,"self":125.68559359999999,"total":127.0390736,"children":{"InitializeActuators":{"count":2,"self":0.0010002,"total":0.0010002,"children":null},"InitializeSensors":{"count":2,"self":0.0005021,"total":0.0005021,"children":null},"AgentSendState":{"count":6113,"self":0.027592799999999997,"total":0.23222669999999998,"children":{"CollectObservations":{"count":6113,"self":0.1815569,"total":0.1815569,"children":null},"WriteActionMask":{"count":6113,"self":0.008039,"total":0.008039,"children":null},"RequestDecision":{"count":6113,"self":0.015038,"total":0.015038,"children":null}}},"DecideAction":{"count":6113,"self":0.028539099999999998,"total":0.028539099999999998,"children":null},"AgentAct":{"count":6113,"self":1.0907158,"total":1.0907158,"children":null}},"gauges":{"AKMAgent.CumulativeReward":{"count":4,"max":-3383.484,"min":-8498.57,"runningAverage":-4832.122,"value":-3835.63672,"weightedAverage":-5697.07031}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1681045338","unity_version":"2021.3.14f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2021.3.14f1\\Editor\\Unity.exe -projectpath C:\\Users\\UCUNI\\OneDrive\\Unity\\ML-Agents\\Aimbot-ParallelEnv -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-UCUNI -hubSessionId fa309b90-d6ce-11ed-9045-4dbcec259de8 -accessToken fwCnFBjbqXUmAHgSbjU61dMBi2ynquSahIP-il_N8Nw00ef","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"Play","end_time_seconds":"1681045465"}}
{"count":1,"self":32.1479424,"total":32.5224426,"children":{"InitializeActuators":{"count":2,"self":0.0015004999999999999,"total":0.0015004999999999999,"children":null},"InitializeSensors":{"count":2,"self":0.0009999,"total":0.0009999,"children":null},"AgentSendState":{"count":1395,"self":0.0098739,"total":0.054415599999999995,"children":{"CollectObservations":{"count":1395,"self":0.040894599999999996,"total":0.040894599999999996,"children":null},"WriteActionMask":{"count":1395,"self":2.5399999999999997E-05,"total":2.5399999999999997E-05,"children":null},"RequestDecision":{"count":1395,"self":0.0036217,"total":0.0036217,"children":null}}},"DecideAction":{"count":1395,"self":0.0059974999999999994,"total":0.0059974999999999994,"children":null},"AgentAct":{"count":1395,"self":0.3105879,"total":0.3105879,"children":null}},"gauges":{"AKMAgent.CumulativeReward":{"count":1,"max":-497.4348,"min":-497.4348,"runningAverage":-497.4348,"value":-497.4348,"weightedAverage":-497.4348}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1688018681","unity_version":"2021.3.14f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2021.3.14f1\\Editor\\Unity.exe -projectpath C:\\Users\\UCUNI\\OneDrive\\Unity\\ML-Agents\\Aimbot-ParallelEnv -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-UCUNI -hubSessionId f0cd9b14-9448-48b8-a171-832b56425f1a -accessToken 4Ih0Fmgn-qcBzV7BmmRSC3-07nfbMRhn-v5RdyzS41800ef","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"Play","end_time_seconds":"1688018713"}}
+349 -524
View File
File diff suppressed because it is too large Load Diff
+14 -4
View File
@@ -81,7 +81,7 @@ public class AgentWithGun : Agent
[System.NonSerialized] public int finishedState;
// start scene datas
// start scene datas 0=train 1=play
private int gamemode;
private void Start()
@@ -96,7 +96,7 @@ public class AgentWithGun : Agent
catch
{
Debug.LogError("Run WithOut StartScreen");
gamemode = 0;
gamemode = 1;
}
// initialize scripts
@@ -452,9 +452,19 @@ public class AgentWithGun : Agent
{
Cursor.lockState = CursorLockMode.Locked; // hide and lock the mouse
}
//thisAgentObj.name = thisAgentObj.GetInstanceID().ToString();
targetCon.rollNewScene();
paramContainer.resetTimeBonusReward();
//thisAgentObj.name = thisAgentObj.GetInstanceID().ToString();
if (gamemode == 0)
{
// train mode
targetCon.rollNewScene();
}
else
{
// play mode
targetCon.playInitialize();
}
// give default Reward to Reward value will be used.
if (hudController.chartOn)
{
+6 -2
View File
@@ -43,8 +43,8 @@ public class EnvironmentUIControl : MonoBehaviour
// Update is called once per frame
void Update()
{
int remainTime = Convert.ToInt32(targetController.startTime + paramContainer.timeLimit - Time.time);
remainTimeText.text = "RemainTime:" + remainTime.ToString();
// int remainTime = Convert.ToInt32(targetController.startTime + paramContainer.timeLimit - Time.time);
remainTimeText.text = "RemainTime:" + Convert.ToInt32(targetController.leftTime).ToString();
if (resultActive && Time.time - overTime >= resultTimeout)
{
// while result is active and show time over timeOut
@@ -150,6 +150,10 @@ public class EnvironmentUIControl : MonoBehaviour
targetTypeText.text = "Free";
targetTypeText.color = Color.yellow;
break;
case (int)SceneBlockContainer.Targets.Stay:
targetTypeText.text = "Stay";
targetTypeText.color = Color.white;
break;
default:
targetTypeText.text = "TYPE ERROR";
targetTypeText.color = Color.red;
+2 -1
View File
@@ -119,7 +119,8 @@ public class ParameterContainer : MonoBehaviour
private void Update()
{
if (targetCon.targetTypeInt != (int)SceneBlockContainer.Targets.Free)
// get target distance and in area
if (targetCon.targetTypeInt is (int)SceneBlockContainer.Targets.Go or (int)SceneBlockContainer.Targets.Attack)
{
(agentDistance, agentInArea) = blockCont.getAgentTargetDistanceAndInside(agentObj.transform.position);
// attack goto or defence target
+2 -1
View File
@@ -49,6 +49,7 @@ public class SceneBlock : MonoBehaviour
{
if (Time.time - intervalStart >= addPointInterval)
{
// update belong ratio every addPointInterval scecond
group1InareaNum = getInAreaNumber(group1Tag);
group2InareaNum = getInAreaNumber(group2Tag);
belongRatio = group1InareaNum - group2InareaNum;
@@ -74,7 +75,7 @@ public class SceneBlock : MonoBehaviour
}
}
//Initialize thi scene block should be excuted after enemy created
//Initialize this scene block should be excuted after enemy created
public void initBlock(GameObject envObj)
{
//Buffer all Player or enemy obj int this environment to list
+5 -2
View File
@@ -5,7 +5,7 @@ using UnityEngine;
public class SceneBlockContainer : MonoBehaviour
{
public enum Targets { Free, Go, Attack, Defence, Num };// Num is use for get total target bumber
public enum Targets { Free, Go, Attack, Defence, Stay, Num };// Num is use for get total target bumber
public float sceneSize = 10f;
public GameObject EnvironmentObj;
public GameObject[] attackBlockPrefabs = new GameObject[1];
@@ -74,5 +74,8 @@ public class SceneBlockContainer : MonoBehaviour
return thisBlock.getDist_inArea(agentPosition);
}
public void initializeBlock(GameObject envObj)
{
thisBlock.initBlock(envObj);
}
}
+79 -4
View File
@@ -63,6 +63,9 @@ public class TargetController : MonoBehaviour
private WorldUIController worldUICon;
private HUDController hudCon;
private RaySensors raySensors;
private StartSeneData startSceneData;
// start scene datas 0=train 1=play
private int gamemode;
// Start is called before the first frame update
void Start()
@@ -91,6 +94,19 @@ public class TargetController : MonoBehaviour
{
Debug.LogError("target percentage wrong");
}
// initialize startSceneData & datas
// while GameObject StartSceneDataTransfer is exist
try
{
startSceneData = GameObject.Find("StartSceneDataTransfer").GetComponent<StartSeneData>();
gamemode = startSceneData.gamemode;
}
// while GameObject StartSceneDataTransfer is not exist
catch
{
Debug.LogError("Run WithOut StartScreen");
gamemode = 1;
}
// initialize a simple fake onehot encoder.
for (int i = 0; i < targetNum; i++)
@@ -107,7 +123,17 @@ public class TargetController : MonoBehaviour
private void Update()
{
leftTime = paramCon.timeLimit - Time.time + startTime;
// if gamemode is play, then time will keep paramCon.timeLimit
if (gamemode == 1)
{
leftTime = paramCon.timeLimit;
// print out time
Debug.Log("Playing Time: " + leftTime);
}
else
{
leftTime = paramCon.timeLimit - Time.time + startTime;
}
}
public void rollNewScene()
@@ -250,7 +276,6 @@ public class TargetController : MonoBehaviour
agentCharaCon.enabled = true;
}
// check over and get rewards
// 1 = success,2 = overtime,0 = notover
public (int, float,float) checkOverAndRewards()
@@ -297,12 +322,14 @@ public class TargetController : MonoBehaviour
envUICon.updateTargetGauge(blockCont.thisBlock.firebasesBelong, blockCont.thisBlock.belongMaxPoint);
if (blockCont.thisBlock.getInAreaNumber(group2Tag) <= 0 && targetEnemySpawnFinish)
{
Debug.Log(blockCont.thisBlock.getInAreaNumber(group2Tag));
// win
// let the area belongs to me and kill every enmy in this area.
thisReward = 0;
endReward = paramCon.attackWinReward;
//thisReward = (paramCon.inAreaReward * inArea) + getSceneReward(nowDistance);
endTypeInt = (int)EndType.Win;
targetEnemySpawnFinish = false;
}
else if (leftTime <= 0 && targetEnemySpawnFinish)
{
@@ -311,6 +338,7 @@ public class TargetController : MonoBehaviour
endReward = paramCon.loseReward;
//thisReward = (paramCon.inAreaReward * inArea) + getSceneReward(nowDistance);
endTypeInt = (int)EndType.Lose;
targetEnemySpawnFinish = false;
}
else
{
@@ -349,17 +377,24 @@ public class TargetController : MonoBehaviour
endTypeInt = (int)EndType.Running;
}
break;
case (int)SceneBlockContainer.Targets.Stay:
// Stay
// endless
thisReward = 0;
endReward = 0;
endTypeInt = (int)EndType.Running;
break;
default:
//free kill
if (EnemyContainerObj.transform.childCount <= 0)
{
// win
//thisReward = paramCon.winReward + (paramCon.timeBonusPerSecReward * leftTime);
// thisReward = paramCon.winReward + (paramCon.timeBonusPerSecReward * leftTime);
thisReward = 0;
endReward = paramCon.freeWinReward;
endTypeInt = (int)EndType.Win;
}
else if (Time.time - startTime >= paramCon.timeLimit)
else if (leftTime <= 0)
{
// lose
//thisReward = paramCon.loseReward;
@@ -481,4 +516,44 @@ public class TargetController : MonoBehaviour
return 0;
}
}
// Play Mode method
// Initialize Play mode
public void playInitialize()
{
targetTypeInt = (int)SceneBlockContainer.Targets.Stay;
envUICon.updateTargetType(targetTypeInt);
moveAgentToSpwanArea();
enemyCont.destroyAllEnemys();
blockCont.destroyBlock();
}
// change to attack mode
public void attackModeChange()
{
targetTypeInt = (int)SceneBlockContainer.Targets.Attack;
envUICon.updateTargetType(targetTypeInt);
}
// change to free mode
public void freeModeChange()
{
targetTypeInt = (int)SceneBlockContainer.Targets.Free;
envUICon.updateTargetType(targetTypeInt);
}
// change to goto mode
public void gotoModeChange()
{
targetTypeInt = (int)SceneBlockContainer.Targets.Go;
envUICon.updateTargetType(targetTypeInt);
}
// change to stay mode
public void stayModeChange()
{
targetTypeInt = (int)SceneBlockContainer.Targets.Stay;
envUICon.updateTargetType(targetTypeInt);
}
}
@@ -27,11 +27,6 @@ public class WorldUIController : MonoBehaviour
}
}
// Update is called once per frame
void Update()
{
}
public void updateChart(int targetType, int endType)
{
float winRatio = 0f;
@@ -6,10 +6,11 @@ using UnityEngine.UI;
public class MouseInMap : MonoBehaviour
{
public Camera playCamera;
public GameObject EnvironmentObj;
public GameObject selectEffect;
public GameObject PlayGameModeControllerObj;
public GameObject EnemyContainerObj;
public GameObject SceneBlockContainerObj;
public GameObject TargetControllerObj;
public GameObject HUDObj;
private Vector3 mouseInMapPosition = Vector3.zero;
@@ -17,7 +18,7 @@ public class MouseInMap : MonoBehaviour
private LayerMask groundMask;
private int randBlockNum;
private GameObject preSet;
private PlayGameModeController gameModeCon;
private TargetController targetCon;
private MousePreview mousePreviewCon;
private EnemyContainer enemyCon;
private SceneBlockContainer sceneBlockCon;
@@ -35,7 +36,7 @@ public class MouseInMap : MonoBehaviour
private void Start()
{
groundMask = LayerMask.GetMask("Ground");
gameModeCon = PlayGameModeControllerObj.GetComponent<PlayGameModeController>();
targetCon = TargetControllerObj.GetComponent<TargetController>();
mousePreviewCon = this.GetComponent<MousePreview>();
enemyCon = EnemyContainerObj.GetComponent<EnemyContainer>();
sceneBlockCon = SceneBlockContainerObj.GetComponent<SceneBlockContainer>();
@@ -46,7 +47,7 @@ public class MouseInMap : MonoBehaviour
{
nowHitPosition = getMouseOnMapPosition();
// if mouse position in area, update mouseInMapPosition as nowHitPosition
if (nowHitPosition.x < gameModeCon.maxAgentAreaX && nowHitPosition.x > gameModeCon.minAgentAreaX && nowHitPosition.z < gameModeCon.maxEnemyAreaZ && nowHitPosition.z > gameModeCon.minAgentAreaZ)
if (nowHitPosition.x < targetCon.maxAgentAreaX && nowHitPosition.x > targetCon.minAgentAreaX && nowHitPosition.z < targetCon.maxEnemyAreaZ && nowHitPosition.z > targetCon.minAgentAreaZ)
{
mouseInMapPosition = nowHitPosition;
mousePreviewCon.updatePreviewPosition(mouseInMapPosition);
@@ -57,10 +58,14 @@ public class MouseInMap : MonoBehaviour
{
case MouseMode.AttackSet:
sceneBlockCon.createNewBlock(SceneBlockContainer.Targets.Attack, randBlockNum, mouseInMapPosition);
sceneBlockCon.initializeBlock(EnvironmentObj);
targetCon.attackModeChange();
changeMouseModeTo(MouseMode.Default);
break;
case MouseMode.GotoSet:
sceneBlockCon.createNewBlock(SceneBlockContainer.Targets.Go, randBlockNum, mouseInMapPosition);
sceneBlockCon.initializeBlock(EnvironmentObj);
targetCon.gotoModeChange();
changeMouseModeTo(MouseMode.Default);
break;
case MouseMode.EnemySet:
@@ -81,7 +86,7 @@ public class MouseInMap : MonoBehaviour
case MouseMode.AttackSet:
// random choose attack scene block type and set as preview
randBlockNum = Random.Range(0, sceneBlockCon.attackBlockPrefabs.Length);
preSet = sceneBlockCon.goBlockPrefabs[randBlockNum];
preSet = sceneBlockCon.attackBlockPrefabs[randBlockNum];
mousePreviewCon.changePreviewTo(preSet);
break;
case MouseMode.GotoSet:
+1 -19
View File
@@ -1,4 +1,4 @@
using System.Collections;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@@ -50,20 +50,6 @@ public class PlayerCamera : MonoBehaviour
{
scrollSp = minHeight - transform.position.y;
}
/* if((transform.position.y <= maxHeight) && (scrollSp > 0))
{
scrollSp = 0;
}else if((transform.position.y >= minHeight)&& (scrollSp < 0))
{
scrollSp = 0;
}
if((transform.position.y + scrollSp) > maxHeight)
{
scrollSp = maxHeight - transform.position.y;
}else if((transform.position.y + scrollSp) < minHeight)
{
scrollSp = minHeight - transform.position.y;
}*/
Vector3 verticalMove = new Vector3(0,scrollSp,0); // vertical movement
Vector3 lateralMove = hsp * transform.right; // lateral movement in global world ignore camera facing
@@ -72,11 +58,8 @@ public class PlayerCamera : MonoBehaviour
fowardMove = vsp * fowardMove.normalized; // normalize the vector
Vector3 move = verticalMove + lateralMove + fowardMove; // total movement
transform.position += move; // move the camera
cameraRotation();
}
void cameraRotation()
@@ -99,6 +82,5 @@ public class PlayerCamera : MonoBehaviour
startMouseP = dragMouseP;
}
}
}
@@ -7,34 +7,37 @@ public class TargetUIController : MonoBehaviour
{
// Controller to control the UI of the target,
// select target type, select prefeb to set or sth.
public GameObject gameModeController;
public GameObject TargetControllerObj;
public GameObject MouseSelectorObj;
public GameObject EnvironmentUIObj;
public Button setAttackButton;
public Button setGotoButton;
public Button setFreeButton;
public Button setStayButton;
private PlayGameModeController gameModeCon;
private MouseInMap mouseInMapCon;
private EnvironmentUIControl envUICon;
private TargetController targetCon;
private void Start()
{
gameModeCon = gameModeController.GetComponent<PlayGameModeController>();
targetCon = TargetControllerObj.GetComponent<TargetController>();
mouseInMapCon = MouseSelectorObj.GetComponent<MouseInMap>();
envUICon = EnvironmentUIObj.GetComponent<EnvironmentUIControl>();
}
public void clearGamePressed()
{
// Clear all enemies and targets. set gamemode to Stay mode
gameModeCon.gameMode = PlayGameModeController.GameMode.Stay;
targetCon.stayModeChange();
mouseInMapCon.changeMouseModeTo(MouseInMap.MouseMode.Default);
// disable setStayButton and enable other buttons
setStayButton.interactable = false;
setAttackButton.interactable = true;
setGotoButton.interactable = true;
setFreeButton.interactable = true;
gameModeCon.startInitialize();
targetCon.playInitialize();
}
public void setEnemyPressed()
{
@@ -50,7 +53,8 @@ public class TargetUIController : MonoBehaviour
}
public void setFreePressed()
{
mouseInMapCon.mouseMode = MouseInMap.MouseMode.Default;
mouseInMapCon.changeMouseModeTo(MouseInMap.MouseMode.Default);
targetCon.freeModeChange();
setStayButton.interactable = true;
setAttackButton.interactable = true;
setGotoButton.interactable = true;
@@ -58,7 +62,12 @@ public class TargetUIController : MonoBehaviour
}
public void setStayPressed()
{
mouseInMapCon.changeMouseModeTo(MouseInMap.MouseMode.Default);
targetCon.stayModeChange();
setStayButton.interactable = false;
setAttackButton.interactable = true;
setGotoButton.interactable = true;
setFreeButton.interactable = true;
}
public void UIButtonInteractable(PlayGameModeController.GameMode nowMode = PlayGameModeController.GameMode.Stay)