This commit is contained in:
wsh
2025-03-20 15:11:44 +09:00
parent b326ab8e1b
commit 1c50fd93b8
13 changed files with 178 additions and 93 deletions

View File

@@ -35,3 +35,67 @@ Time,AGV_ID,Task,Target,Success
2025-03-07 오전 9:37:36,,SpinToTarget,(1.78, -0.10, -4.92),True 2025-03-07 오전 9:37:36,,SpinToTarget,(1.78, -0.10, -4.92),True
2025-03-07 오전 9:37:39,,MoveToTarget,(1.78, -0.10, -4.92),True 2025-03-07 오전 9:37:39,,MoveToTarget,(1.78, -0.10, -4.92),True
2025-03-20 오후 2:41:31,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 2:41:31,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 2:41:38,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 2:41:38,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 2:42:17,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 2:42:17,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 2:42:26,,SpinToQuaternion,(0.00000, 0.00000, 0.00000, 0.00000),True
2025-03-20 오후 2:42:26,,SpinToQuaternion,(0.00000, 0.00000, 0.00000, 0.00000),True
2025-03-20 오후 2:42:46,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 2:42:46,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 2:42:51,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 2:42:51,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 2:42:57,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 2:42:57,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 2:43:34,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 2:43:34,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:03:55,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:03:55,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:05:17,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:05:17,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:07:00,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:07:00,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:07:07,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:07:07,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:08:04,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:08:04,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:08:11,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:08:11,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:08:16,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:08:16,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:08:23,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:08:23,,MoveToTarget,(-6.00, -0.35, -3.00),True
1 Time,AGV_ID,Task,Target,Success
35 2025-03-20 오후 2:43:34,,MoveToTarget,(6.00, -0.35, -3.00),True
36 2025-03-20 오후 3:03:55,,MoveToTarget,(6.00, -0.35, -3.00),True
37 2025-03-20 오후 3:03:55,,MoveToTarget,(6.00, -0.35, -3.00),True
38 2025-03-20 오후 3:05:17,,MoveToTarget,(6.00, -0.35, -3.00),True
39 2025-03-20 오후 3:05:17,,MoveToTarget,(6.00, -0.35, -3.00),True
40 2025-03-20 오후 3:07:00,,MoveToTarget,(6.00, -0.35, -3.00),True
41 2025-03-20 오후 3:07:00,,MoveToTarget,(6.00, -0.35, -3.00),True
42 2025-03-20 오후 3:07:07,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
43 2025-03-20 오후 3:07:07,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
44 2025-03-20 오후 3:08:04,,MoveToTarget,(6.00, -0.35, -3.00),True
45 2025-03-20 오후 3:08:04,,MoveToTarget,(6.00, -0.35, -3.00),True
46 2025-03-20 오후 3:08:11,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
47 2025-03-20 오후 3:08:11,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
48 2025-03-20 오후 3:08:16,,SpinToTarget,(-6.00, -0.35, -3.00),True
49 2025-03-20 오후 3:08:16,,SpinToTarget,(-6.00, -0.35, -3.00),True
50 2025-03-20 오후 3:08:23,,MoveToTarget,(-6.00, -0.35, -3.00),True
51 2025-03-20 오후 3:08:23,,MoveToTarget,(-6.00, -0.35, -3.00),True
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101

View File

@@ -10,12 +10,12 @@ namespace XED.VirtualFactory
public void Regist(TwinObject to) public void Regist(TwinObject to)
{ {
locationMap.Add(to.name, to); locationMap.Add(to.entity.id, to);
} }
public void Unregist(TwinObject to) public void Unregist(TwinObject to)
{ {
locationMap.Remove(to.name); locationMap.Remove(to.entity.id);
} }
public void Unregist(string id) public void Unregist(string id)

View File

@@ -259,6 +259,11 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 6eb9e1609cd682646a916778a2ae8797, type: 3} m_Script: {fileID: 11500000, guid: 6eb9e1609cd682646a916778a2ae8797, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
stackerCranes: []
agvManager: {fileID: 0}
agvMap: {fileID: 0}
loads: []
prf_Load: {fileID: 2713012076675240762, guid: 7cbbdba660dbd38479c561c09e38ec11, type: 3}
--- !u!1001 &125296021 --- !u!1001 &125296021
PrefabInstance: PrefabInstance:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -435,6 +440,7 @@ MonoBehaviour:
- {fileID: 1590019367} - {fileID: 1590019367}
- {fileID: 1554807644} - {fileID: 1554807644}
nodeType: 0 nodeType: 0
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -443,7 +449,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 1942261059} loadSocket: {fileID: 1942261059}
unLoadSocket: {fileID: 6157020} unLoadSocket: {fileID: 6157020}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &146771355 --- !u!4 &146771355
Transform: Transform:
@@ -1003,6 +1008,7 @@ MonoBehaviour:
linkedNodes: linkedNodes:
- {fileID: 1172928290} - {fileID: 1172928290}
nodeType: 1 nodeType: 1
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -1011,7 +1017,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 1704515058} loadSocket: {fileID: 1704515058}
unLoadSocket: {fileID: 1324543929} unLoadSocket: {fileID: 1324543929}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &617492812 --- !u!4 &617492812
Transform: Transform:
@@ -1298,6 +1303,7 @@ MonoBehaviour:
linkedNodes: linkedNodes:
- {fileID: 2097314996} - {fileID: 2097314996}
nodeType: 3 nodeType: 3
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -1306,7 +1312,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 394740631} loadSocket: {fileID: 394740631}
unLoadSocket: {fileID: 2015597917} unLoadSocket: {fileID: 2015597917}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &1082030771 --- !u!4 &1082030771
Transform: Transform:
@@ -1453,6 +1458,7 @@ MonoBehaviour:
linkedNodes: linkedNodes:
- {fileID: 1554807644} - {fileID: 1554807644}
nodeType: 2 nodeType: 2
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -1461,7 +1467,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 216124008} loadSocket: {fileID: 216124008}
unLoadSocket: {fileID: 1824210708} unLoadSocket: {fileID: 1824210708}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &1084391825 --- !u!4 &1084391825
Transform: Transform:
@@ -1613,7 +1618,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 43c2fa2860dfa344d856558ec881bb8a, type: 3} m_Script: {fileID: 11500000, guid: 43c2fa2860dfa344d856558ec881bb8a, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
agvPrefab: {fileID: 0} agvPrefab: {fileID: 3521821355188594447, guid: 03eb7e95fc0cb334d848d40c49b4110e, type: 3}
agvs: [] agvs: []
fileName: Assets/AGVsLog.csv fileName: Assets/AGVsLog.csv
--- !u!1 &1172928289 --- !u!1 &1172928289
@@ -1659,6 +1664,7 @@ MonoBehaviour:
- {fileID: 2097314996} - {fileID: 2097314996}
- {fileID: 617492811} - {fileID: 617492811}
nodeType: 0 nodeType: 0
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -1667,7 +1673,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 891010309} loadSocket: {fileID: 891010309}
unLoadSocket: {fileID: 1310341712} unLoadSocket: {fileID: 1310341712}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &1172928291 --- !u!4 &1172928291
Transform: Transform:
@@ -2072,6 +2077,7 @@ MonoBehaviour:
- {fileID: 146771354} - {fileID: 146771354}
- {fileID: 1084391824} - {fileID: 1084391824}
nodeType: 0 nodeType: 0
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -2080,7 +2086,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 884415325} loadSocket: {fileID: 884415325}
unLoadSocket: {fileID: 736132299} unLoadSocket: {fileID: 736132299}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &1554807645 --- !u!4 &1554807645
Transform: Transform:
@@ -2227,6 +2232,7 @@ MonoBehaviour:
linkedNodes: linkedNodes:
- {fileID: 146771354} - {fileID: 146771354}
nodeType: 3 nodeType: 3
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -2235,7 +2241,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 1349873324} loadSocket: {fileID: 1349873324}
unLoadSocket: {fileID: 1191611793} unLoadSocket: {fileID: 1191611793}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &1590019368 --- !u!4 &1590019368
Transform: Transform:
@@ -2521,6 +2526,7 @@ MonoBehaviour:
- {fileID: 691233192} - {fileID: 691233192}
- {fileID: 146771354} - {fileID: 146771354}
nodeType: 1 nodeType: 1
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -2529,7 +2535,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 2052880161} loadSocket: {fileID: 2052880161}
unLoadSocket: {fileID: 1391611792} unLoadSocket: {fileID: 1391611792}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &1992156870 --- !u!4 &1992156870
Transform: Transform:
@@ -2740,6 +2745,7 @@ MonoBehaviour:
- {fileID: 1172928290} - {fileID: 1172928290}
- {fileID: 1082030770} - {fileID: 1082030770}
nodeType: 0 nodeType: 0
reserved: 0
nodeClass: nodeClass:
id: 0 id: 0
x: 0 x: 0
@@ -2748,7 +2754,6 @@ MonoBehaviour:
linkedNodID: [] linkedNodID: []
loadSocket: {fileID: 1353975497} loadSocket: {fileID: 1353975497}
unLoadSocket: {fileID: 878306402} unLoadSocket: {fileID: 878306402}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
cargo: {fileID: 0} cargo: {fileID: 0}
--- !u!4 &2097314997 --- !u!4 &2097314997
Transform: Transform:

View File

@@ -33,7 +33,7 @@ namespace XED.VirtualFactory
EmergencyStop EmergencyStop
} }
public class AGV : MonoBehaviour public class AGV : TwinObject
{ {
public AGVTaskType agvTask; public AGVTaskType agvTask;
public AGVState agvState; public AGVState agvState;
@@ -81,7 +81,7 @@ namespace XED.VirtualFactory
public GameObject lift; public GameObject lift;
public GameObject pickupSocket; public GameObject pickupSocket;
public GameObject load; public Load load;
public GameObject chargeZone; public GameObject chargeZone;
bool accelerationFlag = true; bool accelerationFlag = true;
@@ -185,7 +185,7 @@ namespace XED.VirtualFactory
} }
} }
public void QueueOrderOnAGV(AGVOrderClass order) public void AddOrder(AGVOrderClass order)
{ {
if (agvState == AGVState.Idle) if (agvState == AGVState.Idle)
{ {
@@ -297,7 +297,7 @@ namespace XED.VirtualFactory
Debug.Log("충전중입니다"); Debug.Log("충전중입니다");
} }
else else
{ {
Debug.Log("충전이 되지 않고 있습니다"); Debug.Log("충전이 되지 않고 있습니다");
} }
} }
@@ -572,7 +572,7 @@ namespace XED.VirtualFactory
yield return null; yield return null;
} }
yield return null; yield return null;
load = target.transform.GetChild(0).gameObject; load = target.transform.GetChild(0).gameObject.GetComponent<Load>();
load.transform.SetParent(lift.transform); load.transform.SetParent(lift.transform);
onTaskComplete?.Invoke(this, agvTask, target.ToString(), arrive); onTaskComplete?.Invoke(this, agvTask, target.ToString(), arrive);

View File

@@ -0,0 +1,16 @@
using Newtonsoft.Json;
using System.Numerics;
namespace XED.VirtualFactory
{
public class AGVEntity: IEntity
{
public Vector3 position;
public Quaternion rotation;
public string id { get; set; }
public string ToJson()
{
return JsonConvert.SerializeObject(this);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a9246ea54580e7c49944fa59e16c111d

View File

@@ -10,8 +10,7 @@ namespace XED.VirtualFactory
{ {
public class AGVManager : MonoBehaviour,ISingle public class AGVManager : MonoBehaviour,ISingle
{ {
[SerializeField] public AGV agvPrefab;
GameObject agvPrefab;
public List<AGV> agvs = new List<AGV>(); public List<AGV> agvs = new List<AGV>();
Dictionary<AGV, List<AGVNode>> orderDict = new Dictionary<AGV, List<AGVNode>>(); Dictionary<AGV, List<AGVNode>> orderDict = new Dictionary<AGV, List<AGVNode>>();
@@ -43,40 +42,48 @@ namespace XED.VirtualFactory
public AGV SpawnAGV(Vector3 position,Quaternion rotation) public AGV SpawnAGV(Vector3 position,Quaternion rotation)
{ {
GameObject newAGV = Instantiate(agvPrefab,position, rotation); var agv = Instantiate(agvPrefab,position, rotation);
AGV agv = newAGV.GetComponent<AGV>();
agv.onTaskComplete += WriteLog; agv.onTaskComplete += WriteLog;
agvs.Add(agv); agvs.Add(agv);
return agv; return agv;
} }
AGV SpawnEmptyAGV()
{
var result = Instantiate(agvPrefab);
result.onTaskComplete += WriteLog;
agvs.Add(result);
return result;
}
public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target,Component comp) public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target,Component comp)
{ {
AGV.QueueOrderOnAGV(new AGVOrderClass(order, Target,comp)); AGV.AddOrder(new AGVOrderClass(order, Target,comp));
} }
public void OrderToAGV(int AGVindex,AGVTaskType order, GameObject Target) public void OrderToAGV(int AGVindex,AGVTaskType order, GameObject Target)
{ {
agvs[AGVindex].QueueOrderOnAGV(new AGVOrderClass(order, Target)); agvs[AGVindex].AddOrder(new AGVOrderClass(order, Target));
} }
public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target) public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target)
{ {
AGV.QueueOrderOnAGV(new AGVOrderClass(order, Target)); AGV.AddOrder(new AGVOrderClass(order, Target));
} }
public void OrderToAGV(AGV AGV, AGVTaskType order, Vector3 Target) public void OrderToAGV(AGV AGV, AGVTaskType order, Vector3 Target)
{ {
AGV.QueueOrderOnAGV(new AGVOrderClass(order, Target)); AGV.AddOrder(new AGVOrderClass(order, Target));
} }
public void OrderToAGV(int AGVindex, AGVTaskType order, GameObject Target1, GameObject Target2) public void OrderToAGV(int AGVindex, AGVTaskType order, GameObject Target1, GameObject Target2)
{ {
agvs[AGVindex].QueueOrderOnAGV(new AGVOrderClass(order, Target1,Target2)); agvs[AGVindex].AddOrder(new AGVOrderClass(order, Target1,Target2));
} }
public void OrderToAGV(AGV AGV, AGVTaskType order) public void OrderToAGV(AGV AGV, AGVTaskType order)
{ {
AGV.QueueOrderOnAGV(new AGVOrderClass(order)); AGV.AddOrder(new AGVOrderClass(order));
} }
void WriteLog(AGV agv, AGVTaskType task, string target,bool success) void WriteLog(AGV agv, AGVTaskType task, string target,bool success)
@@ -107,7 +114,7 @@ namespace XED.VirtualFactory
{ {
OrderToAGV(agv, AGVTaskType.Charging); OrderToAGV(agv, AGVTaskType.Charging);
} }
if (OrderList[i].nodeClass.type == AGVNodeType.Load') if (OrderList[i].nodeClass.type == AGVNodeType.Load)
{ {
OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]); OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]);
//OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position + new Vector3(0, 0.2f, 0)); //OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position + new Vector3(0, 0.2f, 0));
@@ -134,7 +141,7 @@ namespace XED.VirtualFactory
{ {
OrderToAGV(agv, AGVTaskType.Charging); OrderToAGV(agv, AGVTaskType.Charging);
} }
if (OrderList[i].nodeClass.type == AGVNodeType.Load') if (OrderList[i].nodeClass.type == AGVNodeType.Load)
{ {
OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]); OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]);
//OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position+new Vector3(0,0.2f,0)); //OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position+new Vector3(0,0.2f,0));
@@ -151,11 +158,27 @@ namespace XED.VirtualFactory
{ {
ordertoAGV(orderDict[agv], agv); ordertoAGV(orderDict[agv], agv);
} }
public void StopOrder(AGV agv) public void StopOrder(AGV agv)
{ {
agv.onOrderCompleted -= OrderReplay; agv.onOrderCompleted -= OrderReplay;
orderDict.Remove(agv); orderDict.Remove(agv);
} }
internal AGV GetIdleAGV()
{
foreach (var a in agvs)
{
if (a.agvState == AGVState.Idle)
return a;
}
var result = SpawnEmptyAGV();
var newEntity = new AGVEntity();
newEntity.id= agvs.Count.ToString();
result.Binding(newEntity);
return result;
}
} }
} }

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
@@ -9,6 +10,7 @@ namespace XED.VirtualFactory
public AGVNodeEntity entity; public AGVNodeEntity entity;
public List<AGVNode> linkedNodes = new(); public List<AGVNode> linkedNodes = new();
public AGVNodeType nodeType; public AGVNodeType nodeType;
public bool reserved;
#region legacy #region legacy
public AGVNodeClass nodeClass; public AGVNodeClass nodeClass;
@@ -16,9 +18,7 @@ namespace XED.VirtualFactory
List<Renderer> meshRendererList = new List<Renderer>(); List<Renderer> meshRendererList = new List<Renderer>();
public GameObject loadSocket; public GameObject loadSocket;
public GameObject unLoadSocket; public GameObject unLoadSocket;
[SerializeField] public Load cargo;
GameObject cargoPrefab;
public GameObject cargo;
#endregion #endregion
public void Initialize(AGVNodeClass data) public void Initialize(AGVNodeClass data)
@@ -72,37 +72,22 @@ namespace XED.VirtualFactory
{ {
chargezone.enabled = true; chargezone.enabled = true;
} }
if (type == AGVNodeType.Load')
{
cargo = Instantiate(cargoPrefab, loadSocket.transform);
cargo.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
}
} }
public void LoadCargo() public void LoadCargo()
{ {
cargo = null; cargo = null;
StartCoroutine(GenerateCargo());
} }
public void UnLoadCargo(GameObject cargo) public void UnLoadCargo(Load cargo)
{ {
this.cargo = cargo; this.cargo = cargo;
StartCoroutine(DestroyCargo());
} }
IEnumerator GenerateCargo() internal void Load(Load cargo)
{ {
yield return new WaitForSeconds(50f); this.cargo = cargo;
cargo = Instantiate(cargoPrefab, loadSocket.transform); cargo.transform.position = loadSocket.transform.position;
cargo.transform.SetParent(loadSocket.transform);
cargo.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
}
IEnumerator DestroyCargo()
{
yield return new WaitForSeconds(70f);
Destroy(cargo);
} }
} }
} }

View File

@@ -8,7 +8,7 @@ namespace XED.VirtualFactory
public enum AGVNodeType public enum AGVNodeType
{ {
normal, normal,
Load', Load,
unLoad, unLoad,
charge charge
} }

View File

@@ -21,7 +21,6 @@ namespace XED.VirtualFactory
public Component targetcomp = new Component(); public Component targetcomp = new Component();
public GameObject targetObject; public GameObject targetObject;
public Quaternion targetQuaternion; public Quaternion targetQuaternion;
List<object> targetList = new List<object>();
public AGVOrderClass(AGVTaskType task) public AGVOrderClass(AGVTaskType task)
{ {
@@ -29,13 +28,6 @@ namespace XED.VirtualFactory
targetCase = TargetCase.None; targetCase = TargetCase.None;
} }
public AGVOrderClass(AGVTaskType task, Quaternion targetQuaternion)
{
agvTaskType = task;
this.targetQuaternion = targetQuaternion;
targetCase = TargetCase.One;
}
public AGVOrderClass(AGVTaskType task,GameObject targetObject) public AGVOrderClass(AGVTaskType task,GameObject targetObject)
{ {
agvTaskType = task; agvTaskType = task;
@@ -67,35 +59,5 @@ namespace XED.VirtualFactory
targetCase = TargetCase.Two; targetCase = TargetCase.Two;
} }
public AGVOrderClass(AGVTaskType task, GameObject targetObject, Vector3 target2Vector)
{
agvTaskType = task;
target = targetObject.transform.position;
target2 = target2Vector;
targetCase = TargetCase.Two;
}
public AGVOrderClass(AGVTaskType task, Vector3 targetVector, GameObject target2Object)
{
agvTaskType = task;
target = targetVector;
target2 = target2Object.transform.position;
targetCase = TargetCase.Two;
}
public AGVOrderClass(AGVTaskType task, Vector3 targetVector, Vector3 target2Vector)
{
agvTaskType = task;
target = targetVector;
target2 = target2Vector;
targetCase = TargetCase.Two;
}
public AGVOrderClass(AGVTaskType task,List<object> testList)
{
agvTaskType = task;
targetList = testList;
targetCase = TargetCase.List;
}
} }
} }

View File

@@ -1,10 +1,13 @@
using UnityEngine; using UnityEngine;
using XED.Attributes; using XED.Attributes;
using XED.VirtualFactory;
namespace XED namespace XED
{ {
public class TwinObject : MonoBehaviour public class TwinObject : MonoBehaviour
{ {
public IEntity entity;
#region lagacy #region lagacy
public TwinPhysics physics = new TwinPhysics(); public TwinPhysics physics = new TwinPhysics();
public TwinMetaData metaData = new TwinMetaData(); public TwinMetaData metaData = new TwinMetaData();
@@ -22,6 +25,11 @@ namespace XED
physics.Init(this); physics.Init(this);
metaData.Init(this); metaData.Init(this);
} }
public void Binding(IEntity entity)
{
this.entity = entity;
FindSingle<LocationMapper>().Regist(this);
}
public virtual void SetDisplayable(bool value) public virtual void SetDisplayable(bool value)
{ {

View File

@@ -10,12 +10,13 @@ namespace XED
public AGVManager agvManager; public AGVManager agvManager;
public AGVMap agvMap; public AGVMap agvMap;
public List<Load> loads = new(); public List<Load> loads = new();
public Load prf_Load;
public override void AfterAwake() public override void AfterAwake()
{ {
agvMap = FindSingle<AGVMap>(); agvMap = FindSingle<AGVMap>();
agvManager = FindSingle<AGVManager>(); agvManager = FindSingle<AGVManager>();
stackerCranes = FindObjectsByType<StackerCrane>(UnityEngine.FindObjectsSortMode.None).ToList(); stackerCranes = FindObjectsByType<StackerCrane>(UnityEngine.FindObjectsSortMode.None).ToList();
FactoryStatusCheck();
} }
void FactoryStatusCheck() void FactoryStatusCheck()
@@ -24,8 +25,25 @@ namespace XED
{ {
if(agvMap.GetEmptyNode(AGVNodeType.Load, out var node)) if(agvMap.GetEmptyNode(AGVNodeType.Load, out var node))
{ {
var worker = agvManager.GetIdleAGV();
node.Load(CreateEmptyLoad());
worker.transform.position = node.transform.position;
worker.AddOrder(new AGVOrderClass(AGVTaskType.MoveToTarget, node.gameObject));
worker.AddOrder(new AGVOrderClass(AGVTaskType.LoadCargo, node.loadSocket, node));
worker.AddOrder(new AGVOrderClass(AGVTaskType.SpinToTarget, node.linkedNodes[0].gameObject));
worker.AddOrder(new AGVOrderClass(AGVTaskType.MoveToTarget, node.linkedNodes[0].gameObject));
//worker.AddOrder(new AGVOrderClass(AGVTaskType.MoveToTarget, node.linkedNodes[0].gameObject));
} }
} }
} }
Load CreateEmptyLoad()
{
var load = Instantiate(prf_Load);
loads.Add(load);
load.entity = new LoadEntity();
load.entity.id = loads.Count.ToString();
return load;
}
} }
} }

View File

@@ -1,8 +1,10 @@
### 0.22.14 03-20 ### 0.22.16 03-20
``` ```
1. StackerCrane 복구 및 테스트 키트 프리팹 추가 1. StackerCrane 복구 및 테스트 키트 프리팹 추가
2. TwinObject 내 불필요 이벤트 코드 삭제 2. TwinObject 내 불필요 이벤트 코드 삭제
3. 가상 공장 데이터 생성을 위한 기본 환경 구성 3. 가상 공장 데이터 생성을 위한 기본 환경 구성
4. 가상 공장 운영 담당 VirtualFactoryManager 추가
5. 가상 공장내의 Load가 0 일 경우 VirtualFactoryManager를 통해 빈 Load Node 에 AGV 생성 하는 기능 추가
``` ```
### 0.22.11 03-19 ### 0.22.11 03-19