V3.0 追加控制模式,改进代码

追加控制模式,实现鼠标在地图中的坐标映射
追加控制UI
Todo:
游戏流程修改
游戏State对应修改
This commit is contained in:
2023-04-09 23:35:38 +09:00
parent 71f2687422
commit ff094aaba5
56 changed files with 23542 additions and 682 deletions
+44 -23
View File
@@ -4,15 +4,10 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
using Unity.MLAgents;
using Unity.MLAgents.Sensors;
using Unity.MLAgents.Actuators;
using System.Linq;
using System.Drawing;
using Color = UnityEngine.Color;
using static TargetController;
/*TODO:
√tag 攻击排他
@@ -63,6 +58,7 @@ public class AgentWithGun : Agent
private bool gunReadyToggle = true;
private string myTag = "";
private float lastEnemyFacingDistance = 0f; // record last enemy facing minimum distance
private float lastTargetFacingDistance = 0f; // record last target facing minimum distance
// scripts
private RaySensors raySensors;
private CharacterController PlayerController;
@@ -72,6 +68,7 @@ public class AgentWithGun : Agent
private EnemyContainer eneContainer;
private TargetController targetCon;
private HUDController hudController;
private StartSeneData startSceneData;
// observation
float[] myObserve = new float[4];
@@ -84,8 +81,25 @@ public class AgentWithGun : Agent
[System.NonSerialized] public int finishedState;
// start scene datas
private int gamemode;
private void Start()
{
// 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 = 0;
}
// initialize scripts
paramContainer = ParameterContainerObj.GetComponent<ParameterContainer>();
eneContainer = EnemyContainerObj.GetComponent<EnemyContainer>();
blockContainer = SceneBlockContainerObj.GetComponent<SceneBlockContainer>();
@@ -94,25 +108,20 @@ public class AgentWithGun : Agent
hudController = HUDObj.GetComponent<HUDController>();
raySensors = GetComponent<RaySensors>();
PlayerController = this.transform.GetComponent<CharacterController>();
// Environment parameters
// initialize Environment parameters
lockMouse = paramContainer.lockMouse;
Damage = paramContainer.Damage;
fireRate = paramContainer.fireRate;
enemyNum = hudController.enemyNum;
lockCameraX = paramContainer.lockCameraX;
lockCameraY = paramContainer.lockCameraY;
//initialize remainTime
// initialize remainTime
// this agent's tag
myTag = gameObject.tag;
}
/* ----------此Update用于debugBuild前删除或注释掉!----------*/
/*void Update()
{
//Debug.Log(RaySensors.rayTagResult[0]);
}*/
/* ----------此Update用于debugBuild前删除或注释掉!----------*/
// ------------动作处理--------------
// moveAgent 用于模拟Input.GetAxis移动
public void moveAgent(int vertical, int horizontal)
@@ -273,7 +282,7 @@ public class AgentWithGun : Agent
return targetCon.hitEnemyReward(gotHitObj.transform.position);
}
}
if (targetCon.targetTypeInt == (int)TargetController.Targets.Attack)
if (targetCon.targetTypeInt == (int)SceneBlockContainer.Targets.Attack)
{
// while if attack mode
float targetDis = Vector3.Distance(blockContainer.thisBlock.transform.position, transform.position);
@@ -311,7 +320,7 @@ public class AgentWithGun : Agent
bool isFacingtoEnemy = false;
float enemyFacingDistance = 0f;
Ray ray = thisCam.ScreenPointToRay(new Vector3(thisCam.pixelWidth / 2, thisCam.pixelHeight / 2, 0));
if (targetCon.targetTypeInt == (int)TargetController.Targets.Free)
if (targetCon.targetTypeInt == (int)SceneBlockContainer.Targets.Free)
{
//free mode
RaycastHit hit;
@@ -356,20 +365,31 @@ public class AgentWithGun : Agent
// Debug.Log("ninimum = " + thisReward);
}
}
else if(targetCon.targetTypeInt == (int)TargetController.Targets.Attack)
else if(targetCon.targetTypeInt == (int)SceneBlockContainer.Targets.Attack)
{
// attack mode
// Target to Agent distance
float targetDis = Vector3.Distance(blockContainer.thisBlock.transform.position, transform.position);
// center of screen between target's distance
float camCenterToTarget = Vector3.Distance(ray.origin + (ray.direction * targetDis), blockContainer.thisBlock.transform.position);
if(targetDis <= raySensors.viewDistance)
{
// Debug.DrawRay(new Vector3(0,0,0), viewPoint, Color.red);
if (Vector3.Distance(ray.origin + (ray.direction * targetDis), blockContainer.thisBlock.transform.position) <= blockContainer.thisBlock.firebasesAreaDiameter / 2)
// while center of screen between target's distance is lower than firebasesAreaDiameter
// while facing to target
if (camCenterToTarget <= blockContainer.thisBlock.firebasesAreaDiameter / 2)
{
// im watching target
// Debug.DrawRay(ray.origin, viewPoint-ray.origin, Color.blue);
thisReward = paramContainer.facingReward;
}else
{
// while not facing to target
thisReward = (lastTargetFacingDistance - camCenterToTarget) * paramContainer.facingTargetReward;
}
}
// update lastTargetFacingDistance
lastTargetFacingDistance = camCenterToTarget;
}
return thisReward;
}
@@ -426,6 +446,7 @@ public class AgentWithGun : Agent
// env开始执行初始化
public override void OnEpisodeBegin()
{
Debug.LogWarning("GameState|START TEST!");
step = 0;
if (lockMouse)
{
@@ -468,7 +489,7 @@ public class AgentWithGun : Agent
sensor.AddObservation(targetStates);// (6) targettype, target x,y,z, firebasesAreaDiameter
sensor.AddObservation(inAreaState); // (1)
sensor.AddObservation(remainTime); // (1)
sensor.AddObservation(gunReadyToggle); //(1) save gun is ready?
sensor.AddObservation(gunReadyToggle); // (1) save gun is ready?
sensor.AddObservation(myObserve); // (4)自机位置xyz+朝向 float[](4,1)
if (oneHotRayTag)
{
@@ -527,14 +548,14 @@ public class AgentWithGun : Agent
// Win or lose Finished
Debug.Log("Finish reward = " + thisRoundReward);
EP += 1;
string targetString = Enum.GetName(typeof(TargetController.Targets), targetCon.targetTypeInt);
string targetString = Enum.GetName(typeof(SceneBlockContainer.Targets), targetCon.targetTypeInt);
switch (finishedState)
{
case (int)TargetController.EndType.Win:
Debug.LogWarning(targetString+"|Win");
Debug.LogWarning("Result|"+targetString+"|Win");
break;
case (int)TargetController.EndType.Lose:
Debug.LogWarning(targetString+"|Lose");
Debug.LogWarning("Result|"+targetString+"|Lose");
break;
default:
Debug.LogWarning("TypeError");
+1 -1
View File
@@ -21,7 +21,7 @@ public class AimbotSideChannel : SideChannel
{
if (type == LogType.Warning)
{
var stringToSend = "result|"+logString;
var stringToSend = "Warning|" + logString;
using (var msgOut = new OutgoingMessage())
{
msgOut.WriteString(stringToSend);
+4 -4
View File
@@ -134,19 +134,19 @@ public class EnvironmentUIControl : MonoBehaviour
{
switch (targetInt)
{
case (int)TargetController.Targets.Go:
case (int)SceneBlockContainer.Targets.Go:
targetTypeText.text = "GOTO";
targetTypeText.color = Color.blue;
break;
case (int)TargetController.Targets.Attack:
case (int)SceneBlockContainer.Targets.Attack:
targetTypeText.text = "Attack!";
targetTypeText.color = Color.red;
break;
case (int)TargetController.Targets.Defence:
case (int)SceneBlockContainer.Targets.Defence:
targetTypeText.text = "Defence";
targetTypeText.color = Color.green;
break;
case (int)TargetController.Targets.Free:
case (int)SceneBlockContainer.Targets.Free:
targetTypeText.text = "Free";
targetTypeText.color = Color.yellow;
break;
+3 -1
View File
@@ -45,6 +45,8 @@ public class ParameterContainer : MonoBehaviour
public float areaTimeBonusPerSec = 1.0f;
[Tooltip("distance reward reward = r*(1-(nowDis/startDis))")]
public float distanceReward = 20.0f;
[Tooltip("facing to Target distance reward reward = r*(1-(nowDis/startDis))")]
public float facingTargetReward = 20.0f;
[Space(10)]
[Tooltip("Goto Win reward")]
public float goWinRewardDefault = 100.0f;
@@ -117,7 +119,7 @@ public class ParameterContainer : MonoBehaviour
private void Update()
{
if (targetCon.targetTypeInt != (int)TargetController.Targets.Free)
if (targetCon.targetTypeInt != (int)SceneBlockContainer.Targets.Free)
{
(agentDistance, agentInArea) = blockCont.getAgentTargetDistanceAndInside(agentObj.transform.position);
// attack goto or defence target
+2 -2
View File
@@ -101,8 +101,8 @@ public class RaySensors : MonoBehaviour
rayDisResult = thisHit.distance;
lineLength = rayDisResult;
rayInfoText += "\n" + Convert.ToString(rayDisResult);
rayDisResult = rayDisResult / viewDistance; // Normalization!
//输出log
// rayDisResult = rayDisResult / viewDistance; // Normalization!
// 输出log
switch (rayTagResult)
{
case 1:// Wall
+5 -4
View File
@@ -5,6 +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 float sceneSize = 10f;
public GameObject EnvironmentObj;
public GameObject[] attackBlockPrefabs = new GameObject[1];
@@ -18,7 +19,7 @@ public class SceneBlockContainer : MonoBehaviour
{
}
// create block random
public void createNewBlock(int targetType, int blockType, Vector3 blockPosition,string tag1,string tag2)
public void createNewBlock(Targets targetType, int blockType, Vector3 blockPosition,string tag1 = "Player", string tag2 = "Enemy")
{
// check if thisBlock is deleted
if (thisBlockObj != null)
@@ -30,7 +31,7 @@ public class SceneBlockContainer : MonoBehaviour
// choose target type
switch (targetType)
{
case (int)TargetController.Targets.Go:
case Targets.Go:
// goto
thisBlockObj = Instantiate(goBlockPrefabs[blockType], blockPosition + EnvironmentObj.transform.position, Quaternion.identity, transform);
thisBlock = thisBlockObj.GetComponent<SceneBlock>();
@@ -38,7 +39,7 @@ public class SceneBlockContainer : MonoBehaviour
thisBlock.group2Tag = tag2;
sceneSize = thisBlock.blockSize;
break;
case (int)TargetController.Targets.Attack:
case Targets.Attack:
// attack
thisBlockObj = Instantiate(attackBlockPrefabs[blockType], blockPosition+ EnvironmentObj.transform.position, Quaternion.identity, transform);
thisBlock = thisBlockObj.GetComponent<SceneBlock>();
@@ -46,7 +47,7 @@ public class SceneBlockContainer : MonoBehaviour
thisBlock.group2Tag = tag2;
sceneSize = thisBlock.blockSize;
break;
case (int)TargetController.Targets.Defence:
case Targets.Defence:
// defence
thisBlockObj = Instantiate(defencePrefabs[blockType], blockPosition + EnvironmentObj.transform.position, Quaternion.identity, transform);
thisBlock = thisBlockObj.GetComponent<SceneBlock>();
+17 -18
View File
@@ -43,7 +43,6 @@ public class TargetController : MonoBehaviour
[System.NonSerialized] public int targetTypeInt;
public float[] targetState = new float[6];
public enum Targets { Free, Go, Attack, Defence, Num };// Num is use for get total target bumber
public enum EndType { Win, Lose, Running, Num };
[System.NonSerialized] public int targetNum = 0;
private Dictionary<int, float[]> oneHotRarget = new Dictionary<int, float[]>();
@@ -87,7 +86,7 @@ public class TargetController : MonoBehaviour
hudCon = HUDObj.GetComponent<HUDController>();
raySensors = AgentObj.GetComponent<RaySensors>();
freeProb = 1 - attackProb - gotoProb - defenceProb;
targetNum = (int)Targets.Num;
targetNum = (int)SceneBlockContainer.Targets.Num;
if (freeProb < 0)
{
Debug.LogError("target percentage wrong");
@@ -120,7 +119,7 @@ public class TargetController : MonoBehaviour
{
// goto target spawn
Debug.Log("GOTO THIS TARGET!");
targetTypeInt = (int)Targets.Go;
targetTypeInt = (int)SceneBlockContainer.Targets.Go;
int randBlockType = Random.Range(0, blockCont.goBlockPrefabs.Length);
// get choosed scene size
sceneSize = blockCont.goBlockPrefabs[randBlockType].GetComponent<SceneBlock>().blockSize;
@@ -131,7 +130,7 @@ public class TargetController : MonoBehaviour
moveAgentToSpwanArea();
// init scene block
blockCont.destroyBlock();
blockCont.createNewBlock(targetTypeInt, randBlockType, targetPosition, group1Tag, group2Tag);
blockCont.createNewBlock(SceneBlockContainer.Targets.Go, randBlockType, targetPosition, group1Tag, group2Tag);
enemyCont.destroyAllEnemys();
enemyCont.randomInitEnemysExcept(hudCon.enemyNum, targetPosition, sceneSize);
blockCont.thisBlock.initBlock(EnvironmentObj);
@@ -142,7 +141,7 @@ public class TargetController : MonoBehaviour
{
// attack target spawn
Debug.Log("ATTACK!");
targetTypeInt = (int)Targets.Attack;
targetTypeInt = (int)SceneBlockContainer.Targets.Attack;
int randBlockType = Random.Range(0, blockCont.attackBlockPrefabs.Length);
// get choosed scene size
sceneSize = blockCont.attackBlockPrefabs[randBlockType].GetComponent<SceneBlock>().blockSize;
@@ -153,7 +152,7 @@ public class TargetController : MonoBehaviour
moveAgentToSpwanArea();
// init scene block
blockCont.destroyBlock();
blockCont.createNewBlock(targetTypeInt, randBlockType, targetPosition, group1Tag, group2Tag);
blockCont.createNewBlock(SceneBlockContainer.Targets.Attack, randBlockType, targetPosition, group1Tag, group2Tag);
enemyCont.destroyAllEnemys();
enemyCont.randomInitEnemysExcept(hudCon.enemyNum, targetPosition, sceneSize);
blockCont.thisBlock.initBlock(EnvironmentObj);
@@ -165,7 +164,7 @@ public class TargetController : MonoBehaviour
{
// defence target spawn
Debug.Log("DEFENCE!");
targetTypeInt = (int)Targets.Defence;
targetTypeInt = (int)SceneBlockContainer.Targets.Defence;
int randBlockType = Random.Range(0, blockCont.attackBlockPrefabs.Length);
// get choosed scene size
sceneSize = blockCont.defencePrefabs[randBlockType].GetComponent<SceneBlock>().blockSize;
@@ -176,7 +175,7 @@ public class TargetController : MonoBehaviour
moveAgentTo(targetPosition);
// init scene block
blockCont.destroyBlock();
blockCont.createNewBlock(targetTypeInt, randBlockType, targetPosition, group1Tag, group2Tag);
blockCont.createNewBlock(SceneBlockContainer.Targets.Defence, randBlockType, targetPosition, group1Tag, group2Tag);
enemyCont.destroyAllEnemys();
enemyCont.randomInitEnemysExcept(hudCon.enemyNum, targetPosition, sceneSize);
blockCont.thisBlock.initBlock(EnvironmentObj);
@@ -186,7 +185,7 @@ public class TargetController : MonoBehaviour
else
{
//Debug.Log("Free");
targetTypeInt = (int)Targets.Free;
targetTypeInt = (int)SceneBlockContainer.Targets.Free;
enemyCont.destroyAllEnemys();
enemyCont.randomInitEnemys(hudCon.enemyNum);
moveAgentToSpwanArea();
@@ -200,7 +199,7 @@ public class TargetController : MonoBehaviour
public void updateTargetStates()
{
// targettype, x,y,z, firebasesAreaDiameter
if (targetTypeInt == (int)Targets.Free)
if (targetTypeInt == (int)SceneBlockContainer.Targets.Free)
{
targetState[0] = targetTypeInt;
for(int i = 1; i < targetState.Length; i++)
@@ -262,7 +261,7 @@ public class TargetController : MonoBehaviour
float nowDistance = 0f;
switch (targetTypeInt)
{
case (int)Targets.Go:
case (int)SceneBlockContainer.Targets.Go:
// goto
(nowDistance, inArea) = blockCont.getAgentTargetDistanceAndInside(AgentObj.transform.position);
envUICon.updateTargetGauge(blockCont.thisBlock.firebasesBelong, blockCont.thisBlock.belongMaxPoint);
@@ -292,7 +291,7 @@ public class TargetController : MonoBehaviour
endTypeInt = (int)EndType.Running;
}
break;
case (int)Targets.Attack:
case (int)SceneBlockContainer.Targets.Attack:
// attack
(nowDistance, inArea) = blockCont.getAgentTargetDistanceAndInside(AgentObj.transform.position);
envUICon.updateTargetGauge(blockCont.thisBlock.firebasesBelong, blockCont.thisBlock.belongMaxPoint);
@@ -323,7 +322,7 @@ public class TargetController : MonoBehaviour
endTypeInt = (int)EndType.Running;
}
break;
case (int)Targets.Defence:
case (int)SceneBlockContainer.Targets.Defence:
//defence
// !!! DIDN't FINISH!!!
(nowDistance, inArea) = blockCont.getAgentTargetDistanceAndInside(AgentObj.transform.position);
@@ -411,7 +410,7 @@ public class TargetController : MonoBehaviour
public float killReward(Vector3 enemyPosition)
{
float thisKillReward = 0f;
if (targetTypeInt == (int)Targets.Attack)
if (targetTypeInt == (int)SceneBlockContainer.Targets.Attack)
{
// attack mode
(_, int isInArea) = blockCont.thisBlock.getDist_inArea(enemyPosition);
@@ -425,7 +424,7 @@ public class TargetController : MonoBehaviour
thisKillReward = paramCon.killReward;
}
}
else if (targetTypeInt == (int)Targets.Free)
else if (targetTypeInt == (int)SceneBlockContainer.Targets.Free)
{
// free mode hit
thisKillReward = paramCon.killTargetEnemyReward;
@@ -442,7 +441,7 @@ public class TargetController : MonoBehaviour
public float hitEnemyReward(Vector3 enemyPosition)
{
float thisHitReward = 0f;
if (targetTypeInt == (int)Targets.Attack)
if (targetTypeInt == (int)SceneBlockContainer.Targets.Attack)
{
// attack mode
(_, int isInArea) = blockCont.thisBlock.getDist_inArea(enemyPosition);
@@ -457,7 +456,7 @@ public class TargetController : MonoBehaviour
thisHitReward = paramCon.hitReward;
}
}
else if (targetTypeInt == (int)Targets.Free)
else if (targetTypeInt == (int)SceneBlockContainer.Targets.Free)
{
// free mode hit
thisHitReward = paramCon.hitTargetReward;
@@ -473,7 +472,7 @@ public class TargetController : MonoBehaviour
// get in area state
public int getInAreaState()
{
if(targetTypeInt == (int)Targets.Go)
if(targetTypeInt == (int)SceneBlockContainer.Targets.Go)
{
return inArea;
}
+6 -6
View File
@@ -14,15 +14,15 @@ public class WorldUIController : MonoBehaviour
// Start is called before the first frame update
void Start()
{
totalGames = new int[(int)TargetController.Targets.Num];
winGames = new int[(int)TargetController.Targets.Num];
Array.Clear(totalGames, 0, (int)TargetController.Targets.Num);
Array.Clear(winGames, 0, (int)TargetController.Targets.Num);
totalGames = new int[(int)SceneBlockContainer.Targets.Num];
winGames = new int[(int)SceneBlockContainer.Targets.Num];
Array.Clear(totalGames, 0, (int)SceneBlockContainer.Targets.Num);
Array.Clear(winGames, 0, (int)SceneBlockContainer.Targets.Num);
//WinChart.Init();
WinChart.RemoveData();
for (int i = 0; i < (int)TargetController.Targets.Num; i++)
for (int i = 0; i < (int)SceneBlockContainer.Targets.Num; i++)
{
string lineName = Enum.GetName(typeof(TargetController.Targets), i);
string lineName = Enum.GetName(typeof(SceneBlockContainer.Targets), i);
WinChart.AddSerie<Line>(lineName);
}
}
+123
View File
@@ -0,0 +1,123 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MouseInMap : MonoBehaviour
{
public Camera playCamera;
public GameObject selectEffect;
public GameObject PlayGameModeControllerObj;
public GameObject EnemyContainerObj;
public GameObject SceneBlockContainerObj;
public GameObject HUDObj;
private Vector3 mouseInMapPosition = Vector3.zero;
private Vector3 nowHitPosition = Vector3.zero;
private LayerMask groundMask;
private int randBlockNum;
private GameObject preSet;
private PlayGameModeController gameModeCon;
private MousePreview mousePreviewCon;
private EnemyContainer enemyCon;
private SceneBlockContainer sceneBlockCon;
private TargetUIController targetUICon;
public enum MouseMode
{
Default,
AttackSet,
GotoSet,
EnemySet
}
public MouseMode mouseMode = MouseMode.Default;
private void Start()
{
groundMask = LayerMask.GetMask("Ground");
gameModeCon = PlayGameModeControllerObj.GetComponent<PlayGameModeController>();
mousePreviewCon = this.GetComponent<MousePreview>();
enemyCon = EnemyContainerObj.GetComponent<EnemyContainer>();
sceneBlockCon = SceneBlockContainerObj.GetComponent<SceneBlockContainer>();
targetUICon = HUDObj.GetComponent<TargetUIController>();
}
void Update()
{
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)
{
mouseInMapPosition = nowHitPosition;
mousePreviewCon.updatePreviewPosition(mouseInMapPosition);
// Mouse button R pressed
if (Input.GetMouseButtonDown(1))
{
switch(mouseMode)
{
case MouseMode.AttackSet:
sceneBlockCon.createNewBlock(SceneBlockContainer.Targets.Attack, randBlockNum, mouseInMapPosition);
changeMouseModeTo(MouseMode.Default);
break;
case MouseMode.GotoSet:
sceneBlockCon.createNewBlock(SceneBlockContainer.Targets.Go, randBlockNum, mouseInMapPosition);
changeMouseModeTo(MouseMode.Default);
break;
case MouseMode.EnemySet:
enemyCon.initEnemyAtHere(new Vector3(mouseInMapPosition.x,1,mouseInMapPosition.z));
break;
default:
break;
}
}
}
}
public void changeMouseModeTo(MouseMode thisMouseMode)
{
mouseMode = thisMouseMode;
switch (thisMouseMode)
{
case MouseMode.AttackSet:
// random choose attack scene block type and set as preview
randBlockNum = Random.Range(0, sceneBlockCon.attackBlockPrefabs.Length);
preSet = sceneBlockCon.goBlockPrefabs[randBlockNum];
mousePreviewCon.changePreviewTo(preSet);
break;
case MouseMode.GotoSet:
// random choose Goto scene block type and set as preview
randBlockNum = Random.Range(0, sceneBlockCon.goBlockPrefabs.Length);
preSet = sceneBlockCon.goBlockPrefabs[randBlockNum];
mousePreviewCon.changePreviewTo(preSet);
break;
case MouseMode.EnemySet:
preSet = enemyCon.enemyPrefab;
mousePreviewCon.changePreviewTo(preSet);
break;
default:
mousePreviewCon.deleteAllPreviewModele();
break;
}
}
// get mouse position on map, return a Vector3
public Vector3 getMouseOnMapPosition()
{
// shoot raycast from mainCamera center to mousepositon
RaycastHit thisHit;
Color rayColor = Color.red;
Vector3 onMapPosition;
Ray ray = playCamera.ScreenPointToRay(Input.mousePosition);
// if raycast hit gameobject
if (Physics.Raycast(ray, out thisHit, Mathf.Infinity, groundMask))
{
//draw raycast
Debug.DrawRay(ray.origin, ray.direction * 100, rayColor);
return onMapPosition = thisHit.point;
}
else
{
return Vector3.zero;
}
}
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 44fd351436d221849991bd84d37d8109
guid: 586cc33424b6eb941a724f7235d76abe
MonoImporter:
externalObjects: {}
serializedVersion: 2
+29
View File
@@ -0,0 +1,29 @@
using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using UnityEngine;
public class MousePreview : MonoBehaviour
{
// show mousePreviewObj in mouse position
public void changePreviewTo(GameObject mousePreviewObj)
{
deleteAllPreviewModele();
Instantiate(mousePreviewObj, this.transform.position, Quaternion.identity, this.transform);
}
public void updatePreviewPosition(Vector3 previewPos)
{
// move this gameobject to previewPos
this.transform.position = previewPos;
}
public void deleteAllPreviewModele()
{
// delete all child object
foreach (Transform childObj in this.transform)
{
// destroy child
Destroy(childObj.gameObject);
}
}
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ccfe892ab0f980343b6df0fafaec38e2
guid: 344fcc32b8a34e44395c603ede216670
MonoImporter:
externalObjects: {}
serializedVersion: 2
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 772abe5dcba09d147adebd1e32dd12fc
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+17
View File
@@ -0,0 +1,17 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MouseSelector : MonoBehaviour
{
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(1))
{
// shoot raycast from mainCamera center to mousepositon
}
}
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 73ae3df5f5faba1428ab2529c043b7ae
guid: 3460b8ea83509ed41b69b84ba0c86b87
MonoImporter:
externalObjects: {}
serializedVersion: 2
+104
View File
@@ -0,0 +1,104 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerCamera : MonoBehaviour
{
public float normalSpeed = 0.035f;
public float shiftSpeed = 0.06f;
public float zoomSpeed = -10.0f;
public float rotateSpeed = 0.1f;
public float maxHeight = 40f;
public float minHeight = 6f;
public Vector2 startMouseP;
public Vector2 dragMouseP;
private float speed;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// shift to speed UP
if (Input.GetKey(KeyCode.LeftShift))
{
speed = shiftSpeed;
zoomSpeed = 20.0f;
}
else
{
speed = normalSpeed;
zoomSpeed = 10.0f;
}
float hsp = transform.position.y * speed * Input.GetAxis("Horizontal"); // horizontal movement speed
float vsp = transform.position.y * speed * Input.GetAxis("Vertical"); // vertical movement speed
float scrollSp = Mathf.Log(transform.position.y) * -zoomSpeed * Input.GetAxis("Mouse ScrollWheel"); // scroll speed
// camera height limit
if (transform.position.y + scrollSp > maxHeight)
{
scrollSp = maxHeight - transform.position.y;
}
else if (transform.position.y + scrollSp < minHeight)
{
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
Vector3 fowardMove = transform.forward; // forward movement in global world ignore camera facing
fowardMove.y = 0; // ignore y axis
fowardMove = vsp * fowardMove.normalized; // normalize the vector
Vector3 move = verticalMove + lateralMove + fowardMove; // total movement
transform.position += move; // move the camera
cameraRotation();
}
void cameraRotation()
{
// camera rotation while press middle mousebutton
if(Input.GetMouseButtonDown(2))
{
startMouseP = Input.mousePosition;
}
if (Input.GetMouseButton(2))
{
dragMouseP = Input.mousePosition;
float dx = (dragMouseP - startMouseP).x * rotateSpeed;
float dy = (dragMouseP - startMouseP).y * rotateSpeed;
transform.rotation *= Quaternion.Euler(new Vector3(0, dx, 0));
transform.GetChild(0).rotation *= Quaternion.Euler(new Vector3(-dy, 0, 0));
startMouseP = dragMouseP;
}
}
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 664e98da80fb4d842b0c3aff09fd4dc9
guid: 2afdd3e39c405184380c3ffead15ea80
MonoImporter:
externalObjects: {}
serializedVersion: 2
+118
View File
@@ -0,0 +1,118 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayGameModeController : MonoBehaviour
{
public GameObject ParameterContainerObj;
public GameObject EnemyContainerObj;
public GameObject AgentObj;
public GameObject SceneBlockContainerObj;
// area
public GameObject edgeUp;
public GameObject edgeDown;
public GameObject edgeLeft;
public GameObject edgeRight;
public GameObject edgeAgent_Enemy;
public float minEnemyAreaX;
public float maxEnemyAreaX;
public float minEnemyAreaZ;
public float maxEnemyAreaZ;
public float minAgentAreaX;
public float maxAgentAreaX;
public float minAgentAreaZ;
public float maxAgentAreaZ;
private ParameterContainer paramCon;
private CharacterController agentCharaCon;
private EnemyContainer enemyCon;
private SceneBlockContainer sceneBlockCon;
private void Start()
{
minEnemyAreaX = edgeLeft.transform.localPosition.x + 1.0f;
maxEnemyAreaX = edgeRight.transform.localPosition.x - 1.0f;
minEnemyAreaZ = edgeAgent_Enemy.transform.localPosition.z + 1.0f;
maxEnemyAreaZ = edgeUp.transform.localPosition.z - 1.0f;
minAgentAreaX = edgeLeft.transform.localPosition.x + 1.0f;
maxAgentAreaX = edgeRight.transform.localPosition.x - 1.0f;
minAgentAreaZ = edgeDown.transform.localPosition.z + 1.0f;
maxAgentAreaZ = edgeAgent_Enemy.transform.localPosition.z - 1.0f;
paramCon = ParameterContainerObj.GetComponent<ParameterContainer>();
agentCharaCon = AgentObj.GetComponent<CharacterController>();
enemyCon = EnemyContainerObj.GetComponent<EnemyContainer>();
sceneBlockCon = SceneBlockContainerObj.GetComponent<SceneBlockContainer>();
}
public enum GameMode
{
Stay,
Free,
Attack,
Goto
}
public GameMode gameMode = GameMode.Stay;// default stay mode
public void startInitialize()
{
gameMode = GameMode.Stay;
moveAgentToSpwanArea();
enemyCon.destroyAllEnemys();
sceneBlockCon.destroyBlock();
}
// change to attack mode
public void attackModeChange()
{
}
// change to free mode
public void freeModeChange()
{
gameMode = GameMode.Free;
}
// change to goto mode
public void gotoModeChange()
{
}
// move Agent into Agent Spawn Area
public void moveAgentToSpwanArea()
{
float randX = UnityEngine.Random.Range(minAgentAreaX, maxAgentAreaX); ;
float randZ = 0f;
if (paramCon.spawnAgentInAllMap)
{
// spawn agent in all around map
randZ = UnityEngine.Random.Range(minAgentAreaZ, maxEnemyAreaZ);
}
else
{
// spawn agent in only agent spawn area
randZ = UnityEngine.Random.Range(minAgentAreaZ, maxAgentAreaZ);
}
int Y = 1;
Vector3 initAgentLoc = new Vector3(randX, Y, randZ);
moveAgentTo(initAgentLoc);
}
// move Agent to this position
public void moveAgentTo(Vector3 thisPosition)
{
// while using transform.localPosition to move character
// u should turn off character Controller or it won't work
agentCharaCon.enabled = false;
AgentObj.transform.localPosition = thisPosition;
agentCharaCon.enabled = true;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 77518fe48235bbe47bd3adde3630eb02
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-106
View File
@@ -1,106 +0,0 @@
using System;
using UnityEngine;
using UnityEngine.UI;
public class EnvArgsChanger : MonoBehaviour
{
public GameObject DataTransfer;
[Header("EnemyNum")]
public Text EnemyNumText;
public InputField EnemyNumInput;
[Header("TimeLimit")]
public Text TimeLimText;
public InputField TimelimInput;
[Header("Decision Period")]
public Slider DecisionPeriodSlide;
public Text DecisionPeriodDataText;
public Toggle TakeActionsBetweenDecisionsToggle;
[Header("Lock Mouse")]
public Toggle LockMouseToggle;
[Header("Default Camera")]
public Toggle FPToggle;
public Text FPText;
public Toggle TPToggle;
public Text TPText;
private StartSeneData startSeneData;
private void Start()
{
startSeneData = DataTransfer.GetComponent<StartSeneData>();
}
public void onEnemynumValueChanged()
{
// enemy total num value control
if (EnemyNumInput.GetComponent<InputField>().text == "" || EnemyNumInput.GetComponent<InputField>().text.Contains("-"))
{
EnemyNumText.color = Color.gray;
}
else
{
EnemyNumText.color = Color.yellow;
startSeneData.EnemyNum = Math.Abs(int.Parse(EnemyNumInput.GetComponent<InputField>().text));
}
}
public void onTimeValueChanged()
{
// time limit value control
if (TimelimInput.GetComponent<InputField>().text == "" || TimelimInput.GetComponent<InputField>().text.Contains("-"))
{
TimeLimText.color = Color.gray;
}
else
{
TimeLimText.color = Color.yellow;
startSeneData.Timelim = Math.Abs(int.Parse(TimelimInput.GetComponent<InputField>().text));
}
}
public void onDPSlideValueChanged()
{
// DecisionPeriod(DP) value Control
startSeneData.DecisionPeriod = (int)(DecisionPeriodSlide.GetComponent<Slider>().value);
DecisionPeriodDataText.text = startSeneData.DecisionPeriod.ToString();
}
public void onABDToggleChanged()
{
// Actions Between Decisions(ABD) Toggle Control
startSeneData.ActionsBetweenDecisions = TakeActionsBetweenDecisionsToggle.isOn;
}
public void onLockMouseToggleChanged()
{
// lock mouse or not
startSeneData.lockMouse = LockMouseToggle.isOn;
}
public void onTPCamToggleChanged()
{
startSeneData.defaultTPCamera = true;
FPToggle.interactable = true;
FPToggle.SetIsOnWithoutNotify(false);
FPText.color = Color.gray;
TPToggle.SetIsOnWithoutNotify(true);
TPToggle.interactable = false;
TPText.color = Color.green;
}
public void onFPCameToggleChanged()
{
startSeneData.defaultTPCamera = false;
TPToggle.interactable = true;
TPToggle.SetIsOnWithoutNotify(false);
TPText.color = Color.gray;
FPToggle.SetIsOnWithoutNotify(true);
FPToggle.interactable = false;
FPText.color = Color.green;
}
}
-37
View File
@@ -1,37 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LoadDirChanger : MonoBehaviour
{
public InputField LoadDirDateTextBox;
public InputField LoadDirTimeTextBox;
public Toggle Toggle;
public GameObject DataTransfer;
public void OnDirToggleChanged()
{
// if loadDirToggle is on then turn off the input text boxs.
LoadDirDateTextBox.interactable = Toggle.isOn;
LoadDirTimeTextBox.interactable = Toggle.isOn;
// if loadDirToggle is off set loaddirs as 0.
if (!Toggle.isOn)
{
DataTransfer.GetComponent<StartSeneData>().LoadDirDate = "0";
DataTransfer.GetComponent<StartSeneData>().LoadDirTime = "0";
}
}
public void OnDateValueChanged()
{
string input = LoadDirDateTextBox.GetComponent<InputField>().text;
DataTransfer.GetComponent<StartSeneData>().LoadDirDate = input;
}
public void OnTimeValueChanged()
{
string input = LoadDirTimeTextBox.GetComponent<InputField>().text;
DataTransfer.GetComponent<StartSeneData>().LoadDirTime = input;
}
}
-120
View File
@@ -1,120 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using System;
using UnityEngine;
using UnityEngine.UI;
public class RewardsChange : MonoBehaviour
{
public GameObject DataTransfer;
public GameObject nonRInputOBJ;
public GameObject shootRInputOBJ;
public GameObject shootWithoutReadyRInputOBJ;
public GameObject hitRInputOBJ;
public GameObject killRInputOBJ;
public GameObject winRInputOBJ;
public GameObject loseRInputOBJ;
public Text nonRInputText;
public Text shootRInputText;
public Text shootWithoutReadyRInputText;
public Text hitRInputText;
public Text killRInputText;
public Text winRInputText;
public Text loseRInputText;
private void Start()
{
}
// Update is called once per frame
public void nonRValueChanged()
{
if (nonRInputOBJ.GetComponent<InputField>().text == "" || nonRInputOBJ.GetComponent<InputField>().text == "-")
{
nonRInputText.color = Color.gray;
DataTransfer.GetComponent<StartSeneData>().nonReward = DataTransfer.GetComponent<StartSeneData>().nonRewardDefault;
}
else
{
nonRInputText.color = Color.yellow;
DataTransfer.GetComponent<StartSeneData>().nonReward = float.Parse(nonRInputOBJ.GetComponent<InputField>().text);
}
}
public void shootRValueChanged()
{
if (shootRInputOBJ.GetComponent<InputField>().text == "" || shootRInputOBJ.GetComponent<InputField>().text == "-")
{
shootRInputText.color = Color.gray;
DataTransfer.GetComponent<StartSeneData>().shootReward = DataTransfer.GetComponent<StartSeneData>().shootRewardDefault;
}
else {
shootRInputText.color = Color.yellow;
DataTransfer.GetComponent<StartSeneData>().shootReward = float.Parse(shootRInputOBJ.GetComponent<InputField>().text);
}
}
public void shootWOReadyRValueChanged()
{
if(shootWithoutReadyRInputOBJ.GetComponent<InputField>().text == "" || shootWithoutReadyRInputOBJ.GetComponent<InputField>().text == "-")
{
shootWithoutReadyRInputText.color = Color.gray;
DataTransfer.GetComponent<StartSeneData>().shootWithoutReadyReward = DataTransfer.GetComponent<StartSeneData>().shootWithoutReadyRewardDefault;
}
else{
shootWithoutReadyRInputText.color = Color.yellow;
DataTransfer.GetComponent<StartSeneData>().shootWithoutReadyReward = float.Parse(shootWithoutReadyRInputOBJ.GetComponent<InputField>().text);
}
}
public void hitRValueChanged()
{
if(hitRInputOBJ.GetComponent<InputField>().text == "" || hitRInputOBJ.GetComponent<InputField>().text == "-")
{
hitRInputText.color = Color.gray;
DataTransfer.GetComponent<StartSeneData>().hitReward = DataTransfer.GetComponent<StartSeneData>().hitRewardDefault;
}
else{
hitRInputText.color = Color.yellow;
DataTransfer.GetComponent<StartSeneData>().hitReward = float.Parse(hitRInputOBJ.GetComponent<InputField>().text);
}
}
public void winRValueChanged()
{
if(winRInputOBJ.GetComponent<InputField>().text == "" || winRInputOBJ.GetComponent<InputField>().text == "-")
{
winRInputText.color = Color.gray;
DataTransfer.GetComponent<StartSeneData>().winReward = DataTransfer.GetComponent<StartSeneData>().winRewardDefault;
}
else{
winRInputText.color = Color.yellow;
DataTransfer.GetComponent<StartSeneData>().winReward = float.Parse(winRInputOBJ.GetComponent<InputField>().text);
}
}
public void loseRValueChanged()
{
if(loseRInputOBJ.GetComponent<InputField>().text == "" || loseRInputOBJ.GetComponent<InputField>().text == "-")
{
loseRInputText.color = Color.gray;
DataTransfer.GetComponent<StartSeneData>().loseReward = DataTransfer.GetComponent<StartSeneData>().loseRewardDefault;
}
else{
loseRInputText.color = Color.yellow;
DataTransfer.GetComponent<StartSeneData>().loseReward = float.Parse(loseRInputOBJ.GetComponent<InputField>().text);
}
}
public void killRValueChanged()
{
if(killRInputOBJ.GetComponent<InputField>().text == "" || killRInputOBJ.GetComponent<InputField>().text == "-")
{
killRInputText.color = Color.gray;
DataTransfer.GetComponent<StartSeneData>().killReward = DataTransfer.GetComponent<StartSeneData>().killRewardDefault;
}
else{
killRInputText.color = Color.yellow;
DataTransfer.GetComponent<StartSeneData>().killReward = float.Parse(killRInputOBJ.GetComponent<InputField>().text);
}
}
}
-39
View File
@@ -1,39 +0,0 @@
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class SceneChange : MonoBehaviour
{
public GameObject DataTransfer;
public Text errorText;
// Start is called before the first frame update
bool checkLoadDirFormat()
{
string thisLoadDirDate = DataTransfer.GetComponent<StartSeneData>().LoadDirDate;
string thisLoadDirTime = DataTransfer.GetComponent<StartSeneData>().LoadDirTime;
int LoadDirDateLength = thisLoadDirDate.Length;
int LoadDirTimeLength = thisLoadDirTime.Length;
if ((LoadDirDateLength == 8 && LoadDirTimeLength == 6) || (thisLoadDirDate == "0" && thisLoadDirTime == "0"))
{
return true;
}
else
{
return false;
}
}
public void onStartClick()
{
if (checkLoadDirFormat())
{
errorText.text = "Loading next Scene...";
errorText.color = Color.green;
SceneManager.LoadScene("InGame");
}
else
{
errorText.text = "Dir Format error";
}
}
}
+26
View File
@@ -0,0 +1,26 @@
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
public enum SceneType
{
Train,
Play,
}
public void loadScene(SceneType sceneType)
{
switch (sceneType)
{
case SceneType.Train:
SceneManager.LoadScene("Train");
break;
case SceneType.Play:
SceneManager.LoadScene("Play");
break;
default:
Debug.LogError("SceneLoader:loadScene: unknown scene type");
break;
}
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9860d0d9e8776b34c9526d76c4ef118b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+2 -47
View File
@@ -1,55 +1,10 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StartSeneData : MonoBehaviour
{
[Header("Default Rewards")]
public float nonRewardDefault = -0.05f;
public float shootRewardDefault = -0.06f;
public float shootWithoutReadyRewardDefault = -0.06f;
public float hitRewardDefault = 5.0f;
public float killRewardDefault = 10.0f;
public float winRewardDefault = 20.0f;
public float loseRewardDefault = -0.05f;
public bool lockMouse = false;
public bool defaultTPCamera = true;
[Header("Game mode")]
public int gamemode = 0;// default trainning mode
// LoadDir
[System.NonSerialized]public string LoadDirDate = "0";
[System.NonSerialized]public string LoadDirTime = "0";
// Rewards
[System.NonSerialized] public float nonReward;
[System.NonSerialized] public float shootReward;
[System.NonSerialized] public float shootWithoutReadyReward;
[System.NonSerialized] public float hitReward;
[System.NonSerialized] public float killReward;
[System.NonSerialized] public float winReward;
[System.NonSerialized] public float loseReward;
// DecisionPeriod
[System.NonSerialized] public int DecisionPeriod = 1;
[System.NonSerialized] public bool ActionsBetweenDecisions = true;
// EnemyNum
[System.NonSerialized] public int EnemyNum = 3;
// TimeLimit
[System.NonSerialized] public int Timelim = 15;
private void Start()
{
nonReward = nonRewardDefault;
shootReward = shootRewardDefault;
shootWithoutReadyReward = shootWithoutReadyRewardDefault;
hitReward = hitRewardDefault;
killReward = killRewardDefault;
winReward = winRewardDefault;
loseReward = loseRewardDefault;
}
// Update is called once per frame
void Awake()
{
DontDestroyOnLoad(transform.gameObject);
+52
View File
@@ -0,0 +1,52 @@
using System;
using TMPro;
using UnityEngine;
public class StartUIManager : MonoBehaviour
{
public int WaitTimeLimit = 45;
public GameObject SceneLoaderObj;
public GameObject StartSceneDataObj;
public TextMeshProUGUI MessageTextObj;
public TextMeshProUGUI WaitTimeTextObj;
private SceneLoader sceneLoader;
private StartSeneData startSceneData;
private float startTime;
private float nowTime;
// Start is called before the first frame update
void Start()
{
sceneLoader = SceneLoaderObj.GetComponent<SceneLoader>();
startSceneData = StartSceneDataObj.GetComponent<StartSeneData>();
MessageTextObj.text = "";
}
private void Update()
{
// update time limit left;
float leftTime = WaitTimeLimit - Time.realtimeSinceStartup;
WaitTimeTextObj.text = ((int)Math.Round(leftTime)).ToString();
if (leftTime <= 1)
{
// if time limit is over, load Train Scene
sceneLoader.loadScene(SceneLoader.SceneType.Train);
}
}
// while Train-StartButton Pressed
public void OnTrainStartButtonPressed()
{
startSceneData.gamemode = 0;
sceneLoader.loadScene(SceneLoader.SceneType.Train);
MessageTextObj.text = "Loading Train Scene...";
}
// while StartButton-Play Pressed
public void OnPlayButtonPressed()
{
startSceneData.gamemode = 1;
sceneLoader.loadScene(SceneLoader.SceneType.Play);
MessageTextObj.text = "Loading Play Scene...";
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 7761fd42cad2b9544a15df1264649677
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+89
View File
@@ -0,0 +1,89 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
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 MouseSelectorObj;
public Button setAttackButton;
public Button setGotoButton;
public Button setFreeButton;
public Button setStayButton;
private PlayGameModeController gameModeCon;
private MouseInMap mouseInMapCon;
private void Start()
{
gameModeCon = gameModeController.GetComponent<PlayGameModeController>();
mouseInMapCon = MouseSelectorObj.GetComponent<MouseInMap>();
}
public void clearGamePressed()
{
// Clear all enemies and targets. set gamemode to Stay mode
gameModeCon.gameMode = PlayGameModeController.GameMode.Stay;
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();
}
public void setEnemyPressed()
{
mouseInMapCon.changeMouseModeTo(MouseInMap.MouseMode.EnemySet);
}
public void setGotoPressed()
{
mouseInMapCon.changeMouseModeTo(MouseInMap.MouseMode.GotoSet);
}
public void setAttackPressed()
{
mouseInMapCon.changeMouseModeTo(MouseInMap.MouseMode.AttackSet);
}
public void setFreePressed()
{
mouseInMapCon.mouseMode = MouseInMap.MouseMode.Default;
setStayButton.interactable = true;
setAttackButton.interactable = true;
setGotoButton.interactable = true;
setFreeButton.interactable = false;
}
public void setStayPressed()
{
}
public void UIButtonInteractable(PlayGameModeController.GameMode nowMode = PlayGameModeController.GameMode.Stay)
{
setStayButton.interactable = true;
setAttackButton.interactable = true;
setGotoButton.interactable = true;
setFreeButton.interactable = true;
switch(nowMode)
{
case PlayGameModeController.GameMode.Attack:
setAttackButton.interactable = false;
break;
case PlayGameModeController.GameMode.Free:
setFreeButton.interactable = false;
break;
case PlayGameModeController.GameMode.Goto:
setGotoButton.interactable = false;
break;
case PlayGameModeController.GameMode.Stay:
setStayButton.interactable = false;
break;
default:
Debug.Log("TargetUIController.UIButtonInteractable : Type error");
break;
}
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 3e5f471594a32c24194088f10d716a89
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+16
View File
@@ -0,0 +1,16 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class selectEffect : MonoBehaviour
{
// Update is called once per frame
void Update()
{
// if this gameobject exist over 5s, destroy it
if (Time.time > 5)
{
Destroy(gameObject);
}
}
}
+11
View File
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 42a602efe0639c144907a166e7e59a79
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: