중간 저장

This commit is contained in:
wsh
2025-03-24 20:03:17 +09:00
parent 1c50fd93b8
commit 466397ad03
60 changed files with 2403 additions and 2216 deletions

8
Assets/AGVLift.cs Normal file
View File

@@ -0,0 +1,8 @@
using UnityEngine;
namespace XED
{
public class AGVLift : MonoBehaviour
{
}
}

2
Assets/AGVLift.cs.meta Normal file
View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5fb7059a769257346badd43882bceb27

View File

@@ -1,3 +1,4 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using UnityEditor;
@@ -10,29 +11,6 @@ namespace XED.VirtualFactory
{
public List<AGVNode> nodes = new();
public bool TryGetPath(AGVNode currentLocation, AGVNodeType targetType)
{
if (currentLocation == null)
return false;
List<AGVNode> path = new();
return TryGetPathRecursive(currentLocation, targetType, path);
}
private bool TryGetPathRecursive(AGVNode currentLocation, AGVNodeType targetType, List<AGVNode> path)
{
if (currentLocation.nodeType == targetType)
return true;
path.Add(currentLocation);
foreach (var n in currentLocation.linkedNodes)
{
if (n == null || path.Contains(n))
continue;
if (TryGetPathRecursive(n, targetType, path))
return true;
}
return false;
}
#if UNITY_EDITOR
public void OnDrawGizmos()
{
@@ -42,7 +20,7 @@ namespace XED.VirtualFactory
{
if (n == null)
continue;
Handles.Label(n.transform.position + Vector3.up * 0.5f, n.name);
foreach (var l in n.linkedNodes)
{
Vector3 start = n.transform.position;
@@ -63,20 +41,78 @@ namespace XED.VirtualFactory
}
}
}
#endif
internal bool GetEmptyNode(AGVNodeType t, out AGVNode result)
#endif
public List<AGVPortNode> GetPortNodes()
{
var result = new List<AGVPortNode>();
foreach(var n in nodes)
{
if (n.nodeType == t && n.cargo == null)
if (n is AGVPortNode pn)
{
result.Add(pn);
}
}
return result;
}
public bool TryGetEmptyInputPortNode(out AGVPortNode portNode)
{
foreach (var n in nodes)
{
if (n is not AGVPortNode pn)
continue;
if (pn.portType != AGVPortNode.PortType.Input)
continue;
if (pn.loader is not InputPort)
continue;
Debug.Log($"TryGetEmptyInputPortNode: {pn.name}");
if (pn.loader.isEmpty)
{
portNode = pn;
return true;
}
}
portNode = null;
return false;
}
internal List<AGVNode> FindPath(AGVNode startNode, AGVNode targetNode)
{
var visited = new HashSet<AGVNode>();
var path = new List<AGVNode>();
if (DFS(startNode, targetNode, visited, path))
{
return path;
}
return null; // °æ·Î¸¦ ãÀ» ¼ö ¾øÀ½
}
private bool DFS(AGVNode current, AGVNode target, HashSet<AGVNode> visited, List<AGVNode> path)
{
visited.Add(current);
path.Add(current);
if (current == target)
{
return true;
}
foreach (var neighbor in current.linkedNodes)
{
if (neighbor == null || visited.Contains(neighbor))
continue;
if (DFS(neighbor, target, visited, path))
{
result = n;
return true;
}
}
result = null;
path.RemoveAt(path.Count - 1);
return false;
}
}

View File

@@ -1,3 +1,4 @@
using Newtonsoft.Json;
using System;
using UnityEditor;
using UnityEngine;
@@ -27,16 +28,23 @@ namespace XED.EditorUtil
for (int i = 0; i < map.nodes.Count; i++)
{
var node = map.nodes[i];
node.entity.id = i.ToString();
node.entity.linkedNodeIDs.Clear();
foreach (var linkedNode in node.linkedNodes)
{
node.entity.linkedNodeIDs.Add(linkedNode.entity.id);
}
node.entity = new AGVNodeEntity();
var entity = node.entity as AGVNodeEntity;
entity.id = i.ToString();
map.nodes[i].gameObject.name = node.entity.id;
}
for (int i = 0; i < map.nodes.Count; i++)
{
var node = map.nodes[i];
var entity = node.entity as AGVNodeEntity;
entity.linkedNodeIDs.Clear();
foreach (var linkedNode in node.linkedNodes)
{
entity.linkedNodeIDs.Add(linkedNode.entity.id);
}
}
}
void LoadNodes()

View File

@@ -99,3 +99,751 @@ Time,AGV_ID,Task,Target,Success
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
2025-03-20 오후 3:17:52,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:17:52,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:17:59,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:17:59,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:18:03,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:03,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:10,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:10,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:17,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:18:17,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:18:26,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:26,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:33,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:33,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:42,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:42,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:49,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:49,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:18:53,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:18:53,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:18:56,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:18:56,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:18:56,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:18:56,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:19:00,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:19:00,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:19:05,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:19:05,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:19:11,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:19:11,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:19:16,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:19:16,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:19:20,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:19:20,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:19:25,,SpinToTarget,(3.91, -0.35, -5.00),True
2025-03-20 오후 3:19:25,,SpinToTarget,(3.91, -0.35, -5.00),True
2025-03-20 오후 3:19:27,,MoveToTarget,(3.91, -0.35, -5.00),True
2025-03-20 오후 3:19:27,,MoveToTarget,(3.91, -0.35, -5.00),True
2025-03-20 오후 3:21:45,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:21:45,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:21:52,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:21:52,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:21:56,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:21:56,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:22:03,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:22:03,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:22:10,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:22:10,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:22:15,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:22:15,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:22:15,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:22:15,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:22:24,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:22:24,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:22:26,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:22:26,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:22:26,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:22:26,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:22:31,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:22:31,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:22:35,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:22:35,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:22:41,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:22:41,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:22:45,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:22:45,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:22:50,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:22:50,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:23:24,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:24,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:31,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:23:31,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:23:35,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:35,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:42,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:42,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:49,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:23:49,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:23:54,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:54,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:54,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:23:54,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:26:38,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:26:38,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:26:45,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:26:45,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:27:50,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:27:50,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:27:57,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:27:57,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:28:02,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:28:02,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:28:09,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:28:09,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:28:16,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:28:16,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:28:25,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:28:25,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:28:31,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:28:31,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:28:36,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:28:36,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:30:55,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:30:55,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:31:02,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:31:02,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:31:06,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:31:06,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:31:13,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:31:13,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:31:20,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:31:20,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:31:29,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:31:29,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:36:48,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:36:48,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:36:55,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:36:55,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:37:04,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:04,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:07,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:07,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:07,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:37:07,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:37:11,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:37:11,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:37:16,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:37:16,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:37:23,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:37:23,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:37:27,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:27,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:31,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:31,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:31,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:37:31,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:37:34,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:37:34,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:37:41,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:37:41,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:37:46,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:37:46,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:37:52,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:37:52,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:37:57,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:37:57,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:38:00,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:38:00,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:38:00,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:38:00,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:38:04,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:38:04,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:38:09,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:38:09,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:38:15,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:38:15,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:38:20,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:38:20,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:38:24,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:38:24,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:38:29,,SpinToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 3:38:29,,SpinToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 3:38:32,,MoveToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 3:38:32,,MoveToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 3:39:02,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:39:02,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:39:09,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:39:09,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:39:18,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:39:18,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:39:20,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:39:20,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:39:20,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:39:20,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:39:25,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:39:25,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:39:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:39:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:39:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:39:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:39:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:39:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:39:45,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:39:45,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:39:45,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:39:45,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:39:47,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:39:47,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:39:54,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:39:54,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:55:08,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:55:08,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:55:16,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:55:16,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 3:55:25,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:55:25,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:55:28,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:55:28,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:55:28,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:55:28,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:55:32,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:55:32,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:55:37,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:55:37,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:55:43,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:55:43,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:55:48,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:55:48,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:55:52,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:55:52,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:55:52,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:55:52,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:55:55,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:55:55,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 3:56:02,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:56:02,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 3:56:06,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:56:06,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:56:13,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:56:13,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 3:56:18,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:56:18,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:56:20,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:56:20,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 3:56:20,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:56:20,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:56:25,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:56:25,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 3:56:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:56:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:56:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:56:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 3:56:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:56:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:56:45,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:56:45,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 3:56:49,,SpinToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 3:56:49,,SpinToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 3:56:52,,MoveToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 3:56:52,,MoveToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 4:54:01,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:54:01,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:54:08,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 4:54:08,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 4:54:17,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:54:17,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:54:20,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:54:20,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:54:20,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:54:20,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:54:24,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:54:24,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:54:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:54:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:54:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:54:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:54:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:54:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:54:44,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:54:44,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:54:44,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 4:54:44,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 4:54:47,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 4:54:47,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 4:54:54,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 4:54:54,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 4:54:59,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:54:59,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:55:06,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:55:06,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:55:10,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:55:10,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:55:13,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:55:13,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:55:13,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:55:13,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:55:17,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:55:17,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:55:22,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:55:22,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:55:28,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:55:28,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:55:33,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:55:33,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:55:37,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:55:37,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:55:42,,SpinToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 4:55:42,,SpinToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 4:55:45,,MoveToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 4:55:45,,MoveToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 4:56:40,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:56:40,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:56:47,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 4:56:47,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 4:56:56,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:56:56,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:56:58,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:56:58,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:56:58,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:56:58,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:03,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:03,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:07,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:07,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:14,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:14,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:18,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:57:18,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:57:23,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:57:23,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:57:23,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 4:57:23,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 4:57:26,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 4:57:26,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 4:57:33,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 4:57:33,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 4:57:37,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:57:37,,SpinToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:57:44,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:57:44,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 4:57:48,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:57:48,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:57:51,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:57:51,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 4:57:51,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:51,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:55,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:57:55,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 4:58:00,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:58:00,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:58:07,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:58:07,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 4:58:11,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:58:11,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:58:16,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:58:16,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 4:58:20,,SpinToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 4:58:20,,SpinToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 4:58:23,,MoveToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 4:58:23,,MoveToTarget,(-3.88, -0.35, -5.00),True
2025-03-20 오후 5:00:07,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 5:00:07,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 5:00:14,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 5:00:14,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 5:00:33,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 5:00:33,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 5:00:40,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 5:00:40,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 5:00:52,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 5:00:52,,MoveToTarget,(6.00, -0.35, -3.00),True
2025-03-20 오후 5:00:59,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 5:00:59,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
2025-03-20 오후 5:01:08,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 5:01:08,,SpinToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 5:01:11,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 5:01:11,,MoveToTarget,(6.00, -0.35, -5.00),True
2025-03-20 오후 5:01:11,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 5:01:11,,SpinToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 5:01:15,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 5:01:15,,MoveToTarget,(6.00, -0.35, -10.00),True
2025-03-20 오후 5:01:20,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 5:01:20,,SpinToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 5:01:26,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 5:01:26,,MoveToTarget,(-6.00, -0.35, -10.00),True
2025-03-20 오후 5:01:31,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 5:01:31,,SpinToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 5:01:35,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 5:01:35,,MoveToTarget,(-6.00, -0.35, -5.00),True
2025-03-20 오후 5:01:35,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 5:01:35,,SpinToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 5:01:38,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 5:01:38,,MoveToTarget,(-6.00, -0.35, -3.00),True
2025-03-20 오후 5:01:45,,UnLoadCargo,1 (UnityEngine.GameObject),True
2025-03-20 오후 5:01:45,,UnLoadCargo,1 (UnityEngine.GameObject),True
1 Time,AGV_ID,Task,Target,Success
99 2025-03-20 오후 3:22:10,,UnLoadCargo,1 (UnityEngine.GameObject),True
100 2025-03-20 오후 3:22:15,,SpinToTarget,(-6.00, -0.35, -3.00),True
101 2025-03-20 오후 3:22:15,,SpinToTarget,(-6.00, -0.35, -3.00),True
102 2025-03-20 오후 3:22:15,,MoveToTarget,(-6.00, -0.35, -3.00),True
103 2025-03-20 오후 3:22:15,,MoveToTarget,(-6.00, -0.35, -3.00),True
104 2025-03-20 오후 3:22:24,,SpinToTarget,(-6.00, -0.35, -5.00),True
105 2025-03-20 오후 3:22:24,,SpinToTarget,(-6.00, -0.35, -5.00),True
106 2025-03-20 오후 3:22:26,,MoveToTarget,(-6.00, -0.35, -5.00),True
107 2025-03-20 오후 3:22:26,,MoveToTarget,(-6.00, -0.35, -5.00),True
108 2025-03-20 오후 3:22:26,,SpinToTarget,(-6.00, -0.35, -10.00),True
109 2025-03-20 오후 3:22:26,,SpinToTarget,(-6.00, -0.35, -10.00),True
110 2025-03-20 오후 3:22:31,,MoveToTarget,(-6.00, -0.35, -10.00),True
111 2025-03-20 오후 3:22:31,,MoveToTarget,(-6.00, -0.35, -10.00),True
112 2025-03-20 오후 3:22:35,,SpinToTarget,(6.00, -0.35, -10.00),True
113 2025-03-20 오후 3:22:35,,SpinToTarget,(6.00, -0.35, -10.00),True
114 2025-03-20 오후 3:22:41,,MoveToTarget,(6.00, -0.35, -10.00),True
115 2025-03-20 오후 3:22:41,,MoveToTarget,(6.00, -0.35, -10.00),True
116 2025-03-20 오후 3:22:45,,SpinToTarget,(6.00, -0.35, -5.00),True
117 2025-03-20 오후 3:22:45,,SpinToTarget,(6.00, -0.35, -5.00),True
118 2025-03-20 오후 3:22:50,,MoveToTarget,(6.00, -0.35, -5.00),True
119 2025-03-20 오후 3:22:50,,MoveToTarget,(6.00, -0.35, -5.00),True
120 2025-03-20 오후 3:23:24,,MoveToTarget,(6.00, -0.35, -3.00),True
121 2025-03-20 오후 3:23:24,,MoveToTarget,(6.00, -0.35, -3.00),True
122 2025-03-20 오후 3:23:31,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
123 2025-03-20 오후 3:23:31,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
124 2025-03-20 오후 3:23:35,,SpinToTarget,(-6.00, -0.35, -3.00),True
125 2025-03-20 오후 3:23:35,,SpinToTarget,(-6.00, -0.35, -3.00),True
126 2025-03-20 오후 3:23:42,,MoveToTarget,(-6.00, -0.35, -3.00),True
127 2025-03-20 오후 3:23:42,,MoveToTarget,(-6.00, -0.35, -3.00),True
128 2025-03-20 오후 3:23:49,,UnLoadCargo,1 (UnityEngine.GameObject),True
129 2025-03-20 오후 3:23:49,,UnLoadCargo,1 (UnityEngine.GameObject),True
130 2025-03-20 오후 3:23:54,,SpinToTarget,(-6.00, -0.35, -3.00),True
131 2025-03-20 오후 3:23:54,,SpinToTarget,(-6.00, -0.35, -3.00),True
132 2025-03-20 오후 3:23:54,,MoveToTarget,(-6.00, -0.35, -3.00),True
133 2025-03-20 오후 3:23:54,,MoveToTarget,(-6.00, -0.35, -3.00),True
134 2025-03-20 오후 3:26:38,,MoveToTarget,(6.00, -0.35, -3.00),True
135 2025-03-20 오후 3:26:38,,MoveToTarget,(6.00, -0.35, -3.00),True
136 2025-03-20 오후 3:26:45,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
137 2025-03-20 오후 3:26:45,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
138 2025-03-20 오후 3:27:50,,MoveToTarget,(6.00, -0.35, -3.00),True
139 2025-03-20 오후 3:27:50,,MoveToTarget,(6.00, -0.35, -3.00),True
140 2025-03-20 오후 3:27:57,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
141 2025-03-20 오후 3:27:57,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
142 2025-03-20 오후 3:28:02,,SpinToTarget,(-6.00, -0.35, -3.00),True
143 2025-03-20 오후 3:28:02,,SpinToTarget,(-6.00, -0.35, -3.00),True
144 2025-03-20 오후 3:28:09,,MoveToTarget,(-6.00, -0.35, -3.00),True
145 2025-03-20 오후 3:28:09,,MoveToTarget,(-6.00, -0.35, -3.00),True
146 2025-03-20 오후 3:28:16,,UnLoadCargo,1 (UnityEngine.GameObject),True
147 2025-03-20 오후 3:28:16,,UnLoadCargo,1 (UnityEngine.GameObject),True
148 2025-03-20 오후 3:28:25,,SpinToTarget,(6.00, -0.35, -3.00),True
149 2025-03-20 오후 3:28:25,,SpinToTarget,(6.00, -0.35, -3.00),True
150 2025-03-20 오후 3:28:31,,MoveToTarget,(6.00, -0.35, -3.00),True
151 2025-03-20 오후 3:28:31,,MoveToTarget,(6.00, -0.35, -3.00),True
152 2025-03-20 오후 3:28:36,,SpinToTarget,(6.00, -0.35, -5.00),True
153 2025-03-20 오후 3:28:36,,SpinToTarget,(6.00, -0.35, -5.00),True
154 2025-03-20 오후 3:30:55,,MoveToTarget,(6.00, -0.35, -3.00),True
155 2025-03-20 오후 3:30:55,,MoveToTarget,(6.00, -0.35, -3.00),True
156 2025-03-20 오후 3:31:02,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
157 2025-03-20 오후 3:31:02,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
158 2025-03-20 오후 3:31:06,,SpinToTarget,(-6.00, -0.35, -3.00),True
159 2025-03-20 오후 3:31:06,,SpinToTarget,(-6.00, -0.35, -3.00),True
160 2025-03-20 오후 3:31:13,,MoveToTarget,(-6.00, -0.35, -3.00),True
161 2025-03-20 오후 3:31:13,,MoveToTarget,(-6.00, -0.35, -3.00),True
162 2025-03-20 오후 3:31:20,,UnLoadCargo,1 (UnityEngine.GameObject),True
163 2025-03-20 오후 3:31:20,,UnLoadCargo,1 (UnityEngine.GameObject),True
164 2025-03-20 오후 3:31:29,,SpinToTarget,(6.00, -0.35, -3.00),True
165 2025-03-20 오후 3:31:29,,SpinToTarget,(6.00, -0.35, -3.00),True
166 2025-03-20 오후 3:36:48,,MoveToTarget,(6.00, -0.35, -3.00),True
167 2025-03-20 오후 3:36:48,,MoveToTarget,(6.00, -0.35, -3.00),True
168 2025-03-20 오후 3:36:55,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
169 2025-03-20 오후 3:36:55,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
170 2025-03-20 오후 3:37:04,,SpinToTarget,(6.00, -0.35, -5.00),True
171 2025-03-20 오후 3:37:04,,SpinToTarget,(6.00, -0.35, -5.00),True
172 2025-03-20 오후 3:37:07,,MoveToTarget,(6.00, -0.35, -5.00),True
173 2025-03-20 오후 3:37:07,,MoveToTarget,(6.00, -0.35, -5.00),True
174 2025-03-20 오후 3:37:07,,SpinToTarget,(6.00, -0.35, -10.00),True
175 2025-03-20 오후 3:37:07,,SpinToTarget,(6.00, -0.35, -10.00),True
176 2025-03-20 오후 3:37:11,,MoveToTarget,(6.00, -0.35, -10.00),True
177 2025-03-20 오후 3:37:11,,MoveToTarget,(6.00, -0.35, -10.00),True
178 2025-03-20 오후 3:37:16,,SpinToTarget,(-6.00, -0.35, -10.00),True
179 2025-03-20 오후 3:37:16,,SpinToTarget,(-6.00, -0.35, -10.00),True
180 2025-03-20 오후 3:37:23,,MoveToTarget,(-6.00, -0.35, -10.00),True
181 2025-03-20 오후 3:37:23,,MoveToTarget,(-6.00, -0.35, -10.00),True
182 2025-03-20 오후 3:37:27,,SpinToTarget,(-6.00, -0.35, -5.00),True
183 2025-03-20 오후 3:37:27,,SpinToTarget,(-6.00, -0.35, -5.00),True
184 2025-03-20 오후 3:37:31,,MoveToTarget,(-6.00, -0.35, -5.00),True
185 2025-03-20 오후 3:37:31,,MoveToTarget,(-6.00, -0.35, -5.00),True
186 2025-03-20 오후 3:37:31,,SpinToTarget,(-6.00, -0.35, -3.00),True
187 2025-03-20 오후 3:37:31,,SpinToTarget,(-6.00, -0.35, -3.00),True
188 2025-03-20 오후 3:37:34,,MoveToTarget,(-6.00, -0.35, -3.00),True
189 2025-03-20 오후 3:37:34,,MoveToTarget,(-6.00, -0.35, -3.00),True
190 2025-03-20 오후 3:37:41,,UnLoadCargo,1 (UnityEngine.GameObject),True
191 2025-03-20 오후 3:37:41,,UnLoadCargo,1 (UnityEngine.GameObject),True
192 2025-03-20 오후 3:37:46,,SpinToTarget,(6.00, -0.35, -3.00),True
193 2025-03-20 오후 3:37:46,,SpinToTarget,(6.00, -0.35, -3.00),True
194 2025-03-20 오후 3:37:52,,MoveToTarget,(6.00, -0.35, -3.00),True
195 2025-03-20 오후 3:37:52,,MoveToTarget,(6.00, -0.35, -3.00),True
196 2025-03-20 오후 3:37:57,,SpinToTarget,(6.00, -0.35, -5.00),True
197 2025-03-20 오후 3:37:57,,SpinToTarget,(6.00, -0.35, -5.00),True
198 2025-03-20 오후 3:38:00,,MoveToTarget,(6.00, -0.35, -5.00),True
199 2025-03-20 오후 3:38:00,,MoveToTarget,(6.00, -0.35, -5.00),True
200 2025-03-20 오후 3:38:00,,SpinToTarget,(6.00, -0.35, -10.00),True
201 2025-03-20 오후 3:38:00,,SpinToTarget,(6.00, -0.35, -10.00),True
202 2025-03-20 오후 3:38:04,,MoveToTarget,(6.00, -0.35, -10.00),True
203 2025-03-20 오후 3:38:04,,MoveToTarget,(6.00, -0.35, -10.00),True
204 2025-03-20 오후 3:38:09,,SpinToTarget,(-6.00, -0.35, -10.00),True
205 2025-03-20 오후 3:38:09,,SpinToTarget,(-6.00, -0.35, -10.00),True
206 2025-03-20 오후 3:38:15,,MoveToTarget,(-6.00, -0.35, -10.00),True
207 2025-03-20 오후 3:38:15,,MoveToTarget,(-6.00, -0.35, -10.00),True
208 2025-03-20 오후 3:38:20,,SpinToTarget,(-6.00, -0.35, -5.00),True
209 2025-03-20 오후 3:38:20,,SpinToTarget,(-6.00, -0.35, -5.00),True
210 2025-03-20 오후 3:38:24,,MoveToTarget,(-6.00, -0.35, -5.00),True
211 2025-03-20 오후 3:38:24,,MoveToTarget,(-6.00, -0.35, -5.00),True
212 2025-03-20 오후 3:38:29,,SpinToTarget,(-3.88, -0.35, -5.00),True
213 2025-03-20 오후 3:38:29,,SpinToTarget,(-3.88, -0.35, -5.00),True
214 2025-03-20 오후 3:38:32,,MoveToTarget,(-3.88, -0.35, -5.00),True
215 2025-03-20 오후 3:38:32,,MoveToTarget,(-3.88, -0.35, -5.00),True
216 2025-03-20 오후 3:39:02,,MoveToTarget,(6.00, -0.35, -3.00),True
217 2025-03-20 오후 3:39:02,,MoveToTarget,(6.00, -0.35, -3.00),True
218 2025-03-20 오후 3:39:09,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
219 2025-03-20 오후 3:39:09,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
220 2025-03-20 오후 3:39:18,,SpinToTarget,(6.00, -0.35, -5.00),True
221 2025-03-20 오후 3:39:18,,SpinToTarget,(6.00, -0.35, -5.00),True
222 2025-03-20 오후 3:39:20,,MoveToTarget,(6.00, -0.35, -5.00),True
223 2025-03-20 오후 3:39:20,,MoveToTarget,(6.00, -0.35, -5.00),True
224 2025-03-20 오후 3:39:20,,SpinToTarget,(6.00, -0.35, -10.00),True
225 2025-03-20 오후 3:39:20,,SpinToTarget,(6.00, -0.35, -10.00),True
226 2025-03-20 오후 3:39:25,,MoveToTarget,(6.00, -0.35, -10.00),True
227 2025-03-20 오후 3:39:25,,MoveToTarget,(6.00, -0.35, -10.00),True
228 2025-03-20 오후 3:39:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
229 2025-03-20 오후 3:39:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
230 2025-03-20 오후 3:39:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
231 2025-03-20 오후 3:39:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
232 2025-03-20 오후 3:39:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
233 2025-03-20 오후 3:39:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
234 2025-03-20 오후 3:39:45,,MoveToTarget,(-6.00, -0.35, -5.00),True
235 2025-03-20 오후 3:39:45,,MoveToTarget,(-6.00, -0.35, -5.00),True
236 2025-03-20 오후 3:39:45,,SpinToTarget,(-6.00, -0.35, -3.00),True
237 2025-03-20 오후 3:39:45,,SpinToTarget,(-6.00, -0.35, -3.00),True
238 2025-03-20 오후 3:39:47,,MoveToTarget,(-6.00, -0.35, -3.00),True
239 2025-03-20 오후 3:39:47,,MoveToTarget,(-6.00, -0.35, -3.00),True
240 2025-03-20 오후 3:39:54,,UnLoadCargo,1 (UnityEngine.GameObject),True
241 2025-03-20 오후 3:39:54,,UnLoadCargo,1 (UnityEngine.GameObject),True
242 2025-03-20 오후 3:55:08,,MoveToTarget,(6.00, -0.35, -3.00),True
243 2025-03-20 오후 3:55:08,,MoveToTarget,(6.00, -0.35, -3.00),True
244 2025-03-20 오후 3:55:16,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
245 2025-03-20 오후 3:55:16,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
246 2025-03-20 오후 3:55:25,,SpinToTarget,(6.00, -0.35, -5.00),True
247 2025-03-20 오후 3:55:25,,SpinToTarget,(6.00, -0.35, -5.00),True
248 2025-03-20 오후 3:55:28,,MoveToTarget,(6.00, -0.35, -5.00),True
249 2025-03-20 오후 3:55:28,,MoveToTarget,(6.00, -0.35, -5.00),True
250 2025-03-20 오후 3:55:28,,SpinToTarget,(6.00, -0.35, -10.00),True
251 2025-03-20 오후 3:55:28,,SpinToTarget,(6.00, -0.35, -10.00),True
252 2025-03-20 오후 3:55:32,,MoveToTarget,(6.00, -0.35, -10.00),True
253 2025-03-20 오후 3:55:32,,MoveToTarget,(6.00, -0.35, -10.00),True
254 2025-03-20 오후 3:55:37,,SpinToTarget,(-6.00, -0.35, -10.00),True
255 2025-03-20 오후 3:55:37,,SpinToTarget,(-6.00, -0.35, -10.00),True
256 2025-03-20 오후 3:55:43,,MoveToTarget,(-6.00, -0.35, -10.00),True
257 2025-03-20 오후 3:55:43,,MoveToTarget,(-6.00, -0.35, -10.00),True
258 2025-03-20 오후 3:55:48,,SpinToTarget,(-6.00, -0.35, -5.00),True
259 2025-03-20 오후 3:55:48,,SpinToTarget,(-6.00, -0.35, -5.00),True
260 2025-03-20 오후 3:55:52,,MoveToTarget,(-6.00, -0.35, -5.00),True
261 2025-03-20 오후 3:55:52,,MoveToTarget,(-6.00, -0.35, -5.00),True
262 2025-03-20 오후 3:55:52,,SpinToTarget,(-6.00, -0.35, -3.00),True
263 2025-03-20 오후 3:55:52,,SpinToTarget,(-6.00, -0.35, -3.00),True
264 2025-03-20 오후 3:55:55,,MoveToTarget,(-6.00, -0.35, -3.00),True
265 2025-03-20 오후 3:55:55,,MoveToTarget,(-6.00, -0.35, -3.00),True
266 2025-03-20 오후 3:56:02,,UnLoadCargo,1 (UnityEngine.GameObject),True
267 2025-03-20 오후 3:56:02,,UnLoadCargo,1 (UnityEngine.GameObject),True
268 2025-03-20 오후 3:56:06,,SpinToTarget,(6.00, -0.35, -3.00),True
269 2025-03-20 오후 3:56:06,,SpinToTarget,(6.00, -0.35, -3.00),True
270 2025-03-20 오후 3:56:13,,MoveToTarget,(6.00, -0.35, -3.00),True
271 2025-03-20 오후 3:56:13,,MoveToTarget,(6.00, -0.35, -3.00),True
272 2025-03-20 오후 3:56:18,,SpinToTarget,(6.00, -0.35, -5.00),True
273 2025-03-20 오후 3:56:18,,SpinToTarget,(6.00, -0.35, -5.00),True
274 2025-03-20 오후 3:56:20,,MoveToTarget,(6.00, -0.35, -5.00),True
275 2025-03-20 오후 3:56:20,,MoveToTarget,(6.00, -0.35, -5.00),True
276 2025-03-20 오후 3:56:20,,SpinToTarget,(6.00, -0.35, -10.00),True
277 2025-03-20 오후 3:56:20,,SpinToTarget,(6.00, -0.35, -10.00),True
278 2025-03-20 오후 3:56:25,,MoveToTarget,(6.00, -0.35, -10.00),True
279 2025-03-20 오후 3:56:25,,MoveToTarget,(6.00, -0.35, -10.00),True
280 2025-03-20 오후 3:56:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
281 2025-03-20 오후 3:56:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
282 2025-03-20 오후 3:56:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
283 2025-03-20 오후 3:56:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
284 2025-03-20 오후 3:56:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
285 2025-03-20 오후 3:56:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
286 2025-03-20 오후 3:56:45,,MoveToTarget,(-6.00, -0.35, -5.00),True
287 2025-03-20 오후 3:56:45,,MoveToTarget,(-6.00, -0.35, -5.00),True
288 2025-03-20 오후 3:56:49,,SpinToTarget,(-3.88, -0.35, -5.00),True
289 2025-03-20 오후 3:56:49,,SpinToTarget,(-3.88, -0.35, -5.00),True
290 2025-03-20 오후 3:56:52,,MoveToTarget,(-3.88, -0.35, -5.00),True
291 2025-03-20 오후 3:56:52,,MoveToTarget,(-3.88, -0.35, -5.00),True
292 2025-03-20 오후 4:54:01,,MoveToTarget,(6.00, -0.35, -3.00),True
293 2025-03-20 오후 4:54:01,,MoveToTarget,(6.00, -0.35, -3.00),True
294 2025-03-20 오후 4:54:08,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
295 2025-03-20 오후 4:54:08,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
296 2025-03-20 오후 4:54:17,,SpinToTarget,(6.00, -0.35, -5.00),True
297 2025-03-20 오후 4:54:17,,SpinToTarget,(6.00, -0.35, -5.00),True
298 2025-03-20 오후 4:54:20,,MoveToTarget,(6.00, -0.35, -5.00),True
299 2025-03-20 오후 4:54:20,,MoveToTarget,(6.00, -0.35, -5.00),True
300 2025-03-20 오후 4:54:20,,SpinToTarget,(6.00, -0.35, -10.00),True
301 2025-03-20 오후 4:54:20,,SpinToTarget,(6.00, -0.35, -10.00),True
302 2025-03-20 오후 4:54:24,,MoveToTarget,(6.00, -0.35, -10.00),True
303 2025-03-20 오후 4:54:24,,MoveToTarget,(6.00, -0.35, -10.00),True
304 2025-03-20 오후 4:54:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
305 2025-03-20 오후 4:54:29,,SpinToTarget,(-6.00, -0.35, -10.00),True
306 2025-03-20 오후 4:54:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
307 2025-03-20 오후 4:54:36,,MoveToTarget,(-6.00, -0.35, -10.00),True
308 2025-03-20 오후 4:54:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
309 2025-03-20 오후 4:54:40,,SpinToTarget,(-6.00, -0.35, -5.00),True
310 2025-03-20 오후 4:54:44,,MoveToTarget,(-6.00, -0.35, -5.00),True
311 2025-03-20 오후 4:54:44,,MoveToTarget,(-6.00, -0.35, -5.00),True
312 2025-03-20 오후 4:54:44,,SpinToTarget,(-6.00, -0.35, -3.00),True
313 2025-03-20 오후 4:54:44,,SpinToTarget,(-6.00, -0.35, -3.00),True
314 2025-03-20 오후 4:54:47,,MoveToTarget,(-6.00, -0.35, -3.00),True
315 2025-03-20 오후 4:54:47,,MoveToTarget,(-6.00, -0.35, -3.00),True
316 2025-03-20 오후 4:54:54,,UnLoadCargo,1 (UnityEngine.GameObject),True
317 2025-03-20 오후 4:54:54,,UnLoadCargo,1 (UnityEngine.GameObject),True
318 2025-03-20 오후 4:54:59,,SpinToTarget,(6.00, -0.35, -3.00),True
319 2025-03-20 오후 4:54:59,,SpinToTarget,(6.00, -0.35, -3.00),True
320 2025-03-20 오후 4:55:06,,MoveToTarget,(6.00, -0.35, -3.00),True
321 2025-03-20 오후 4:55:06,,MoveToTarget,(6.00, -0.35, -3.00),True
322 2025-03-20 오후 4:55:10,,SpinToTarget,(6.00, -0.35, -5.00),True
323 2025-03-20 오후 4:55:10,,SpinToTarget,(6.00, -0.35, -5.00),True
324 2025-03-20 오후 4:55:13,,MoveToTarget,(6.00, -0.35, -5.00),True
325 2025-03-20 오후 4:55:13,,MoveToTarget,(6.00, -0.35, -5.00),True
326 2025-03-20 오후 4:55:13,,SpinToTarget,(6.00, -0.35, -10.00),True
327 2025-03-20 오후 4:55:13,,SpinToTarget,(6.00, -0.35, -10.00),True
328 2025-03-20 오후 4:55:17,,MoveToTarget,(6.00, -0.35, -10.00),True
329 2025-03-20 오후 4:55:17,,MoveToTarget,(6.00, -0.35, -10.00),True
330 2025-03-20 오후 4:55:22,,SpinToTarget,(-6.00, -0.35, -10.00),True
331 2025-03-20 오후 4:55:22,,SpinToTarget,(-6.00, -0.35, -10.00),True
332 2025-03-20 오후 4:55:28,,MoveToTarget,(-6.00, -0.35, -10.00),True
333 2025-03-20 오후 4:55:28,,MoveToTarget,(-6.00, -0.35, -10.00),True
334 2025-03-20 오후 4:55:33,,SpinToTarget,(-6.00, -0.35, -5.00),True
335 2025-03-20 오후 4:55:33,,SpinToTarget,(-6.00, -0.35, -5.00),True
336 2025-03-20 오후 4:55:37,,MoveToTarget,(-6.00, -0.35, -5.00),True
337 2025-03-20 오후 4:55:37,,MoveToTarget,(-6.00, -0.35, -5.00),True
338 2025-03-20 오후 4:55:42,,SpinToTarget,(-3.88, -0.35, -5.00),True
339 2025-03-20 오후 4:55:42,,SpinToTarget,(-3.88, -0.35, -5.00),True
340 2025-03-20 오후 4:55:45,,MoveToTarget,(-3.88, -0.35, -5.00),True
341 2025-03-20 오후 4:55:45,,MoveToTarget,(-3.88, -0.35, -5.00),True
342 2025-03-20 오후 4:56:40,,MoveToTarget,(6.00, -0.35, -3.00),True
343 2025-03-20 오후 4:56:40,,MoveToTarget,(6.00, -0.35, -3.00),True
344 2025-03-20 오후 4:56:47,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
345 2025-03-20 오후 4:56:47,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
346 2025-03-20 오후 4:56:56,,SpinToTarget,(6.00, -0.35, -5.00),True
347 2025-03-20 오후 4:56:56,,SpinToTarget,(6.00, -0.35, -5.00),True
348 2025-03-20 오후 4:56:58,,MoveToTarget,(6.00, -0.35, -5.00),True
349 2025-03-20 오후 4:56:58,,MoveToTarget,(6.00, -0.35, -5.00),True
350 2025-03-20 오후 4:56:58,,SpinToTarget,(6.00, -0.35, -10.00),True
351 2025-03-20 오후 4:56:58,,SpinToTarget,(6.00, -0.35, -10.00),True
352 2025-03-20 오후 4:57:03,,MoveToTarget,(6.00, -0.35, -10.00),True
353 2025-03-20 오후 4:57:03,,MoveToTarget,(6.00, -0.35, -10.00),True
354 2025-03-20 오후 4:57:07,,SpinToTarget,(-6.00, -0.35, -10.00),True
355 2025-03-20 오후 4:57:07,,SpinToTarget,(-6.00, -0.35, -10.00),True
356 2025-03-20 오후 4:57:14,,MoveToTarget,(-6.00, -0.35, -10.00),True
357 2025-03-20 오후 4:57:14,,MoveToTarget,(-6.00, -0.35, -10.00),True
358 2025-03-20 오후 4:57:18,,SpinToTarget,(-6.00, -0.35, -5.00),True
359 2025-03-20 오후 4:57:18,,SpinToTarget,(-6.00, -0.35, -5.00),True
360 2025-03-20 오후 4:57:23,,MoveToTarget,(-6.00, -0.35, -5.00),True
361 2025-03-20 오후 4:57:23,,MoveToTarget,(-6.00, -0.35, -5.00),True
362 2025-03-20 오후 4:57:23,,SpinToTarget,(-6.00, -0.35, -3.00),True
363 2025-03-20 오후 4:57:23,,SpinToTarget,(-6.00, -0.35, -3.00),True
364 2025-03-20 오후 4:57:26,,MoveToTarget,(-6.00, -0.35, -3.00),True
365 2025-03-20 오후 4:57:26,,MoveToTarget,(-6.00, -0.35, -3.00),True
366 2025-03-20 오후 4:57:33,,UnLoadCargo,1 (UnityEngine.GameObject),True
367 2025-03-20 오후 4:57:33,,UnLoadCargo,1 (UnityEngine.GameObject),True
368 2025-03-20 오후 4:57:37,,SpinToTarget,(6.00, -0.35, -3.00),True
369 2025-03-20 오후 4:57:37,,SpinToTarget,(6.00, -0.35, -3.00),True
370 2025-03-20 오후 4:57:44,,MoveToTarget,(6.00, -0.35, -3.00),True
371 2025-03-20 오후 4:57:44,,MoveToTarget,(6.00, -0.35, -3.00),True
372 2025-03-20 오후 4:57:48,,SpinToTarget,(6.00, -0.35, -5.00),True
373 2025-03-20 오후 4:57:48,,SpinToTarget,(6.00, -0.35, -5.00),True
374 2025-03-20 오후 4:57:51,,MoveToTarget,(6.00, -0.35, -5.00),True
375 2025-03-20 오후 4:57:51,,MoveToTarget,(6.00, -0.35, -5.00),True
376 2025-03-20 오후 4:57:51,,SpinToTarget,(6.00, -0.35, -10.00),True
377 2025-03-20 오후 4:57:51,,SpinToTarget,(6.00, -0.35, -10.00),True
378 2025-03-20 오후 4:57:55,,MoveToTarget,(6.00, -0.35, -10.00),True
379 2025-03-20 오후 4:57:55,,MoveToTarget,(6.00, -0.35, -10.00),True
380 2025-03-20 오후 4:58:00,,SpinToTarget,(-6.00, -0.35, -10.00),True
381 2025-03-20 오후 4:58:00,,SpinToTarget,(-6.00, -0.35, -10.00),True
382 2025-03-20 오후 4:58:07,,MoveToTarget,(-6.00, -0.35, -10.00),True
383 2025-03-20 오후 4:58:07,,MoveToTarget,(-6.00, -0.35, -10.00),True
384 2025-03-20 오후 4:58:11,,SpinToTarget,(-6.00, -0.35, -5.00),True
385 2025-03-20 오후 4:58:11,,SpinToTarget,(-6.00, -0.35, -5.00),True
386 2025-03-20 오후 4:58:16,,MoveToTarget,(-6.00, -0.35, -5.00),True
387 2025-03-20 오후 4:58:16,,MoveToTarget,(-6.00, -0.35, -5.00),True
388 2025-03-20 오후 4:58:20,,SpinToTarget,(-3.88, -0.35, -5.00),True
389 2025-03-20 오후 4:58:20,,SpinToTarget,(-3.88, -0.35, -5.00),True
390 2025-03-20 오후 4:58:23,,MoveToTarget,(-3.88, -0.35, -5.00),True
391 2025-03-20 오후 4:58:23,,MoveToTarget,(-3.88, -0.35, -5.00),True
392 2025-03-20 오후 5:00:07,,MoveToTarget,(6.00, -0.35, -3.00),True
393 2025-03-20 오후 5:00:07,,MoveToTarget,(6.00, -0.35, -3.00),True
394 2025-03-20 오후 5:00:14,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
395 2025-03-20 오후 5:00:14,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
396 2025-03-20 오후 5:00:33,,MoveToTarget,(6.00, -0.35, -3.00),True
397 2025-03-20 오후 5:00:33,,MoveToTarget,(6.00, -0.35, -3.00),True
398 2025-03-20 오후 5:00:40,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
399 2025-03-20 오후 5:00:40,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
400 2025-03-20 오후 5:00:52,,MoveToTarget,(6.00, -0.35, -3.00),True
401 2025-03-20 오후 5:00:52,,MoveToTarget,(6.00, -0.35, -3.00),True
402 2025-03-20 오후 5:00:59,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
403 2025-03-20 오후 5:00:59,,LoadCargo,LoadSocket (UnityEngine.GameObject),True
404 2025-03-20 오후 5:01:08,,SpinToTarget,(6.00, -0.35, -5.00),True
405 2025-03-20 오후 5:01:08,,SpinToTarget,(6.00, -0.35, -5.00),True
406 2025-03-20 오후 5:01:11,,MoveToTarget,(6.00, -0.35, -5.00),True
407 2025-03-20 오후 5:01:11,,MoveToTarget,(6.00, -0.35, -5.00),True
408 2025-03-20 오후 5:01:11,,SpinToTarget,(6.00, -0.35, -10.00),True
409 2025-03-20 오후 5:01:11,,SpinToTarget,(6.00, -0.35, -10.00),True
410 2025-03-20 오후 5:01:15,,MoveToTarget,(6.00, -0.35, -10.00),True
411 2025-03-20 오후 5:01:15,,MoveToTarget,(6.00, -0.35, -10.00),True
412 2025-03-20 오후 5:01:20,,SpinToTarget,(-6.00, -0.35, -10.00),True
413 2025-03-20 오후 5:01:20,,SpinToTarget,(-6.00, -0.35, -10.00),True
414 2025-03-20 오후 5:01:26,,MoveToTarget,(-6.00, -0.35, -10.00),True
415 2025-03-20 오후 5:01:26,,MoveToTarget,(-6.00, -0.35, -10.00),True
416 2025-03-20 오후 5:01:31,,SpinToTarget,(-6.00, -0.35, -5.00),True
417 2025-03-20 오후 5:01:31,,SpinToTarget,(-6.00, -0.35, -5.00),True
418 2025-03-20 오후 5:01:35,,MoveToTarget,(-6.00, -0.35, -5.00),True
419 2025-03-20 오후 5:01:35,,MoveToTarget,(-6.00, -0.35, -5.00),True
420 2025-03-20 오후 5:01:35,,SpinToTarget,(-6.00, -0.35, -3.00),True
421 2025-03-20 오후 5:01:35,,SpinToTarget,(-6.00, -0.35, -3.00),True
422 2025-03-20 오후 5:01:38,,MoveToTarget,(-6.00, -0.35, -3.00),True
423 2025-03-20 오후 5:01:38,,MoveToTarget,(-6.00, -0.35, -3.00),True
424 2025-03-20 오후 5:01:45,,UnLoadCargo,1 (UnityEngine.GameObject),True
425 2025-03-20 오후 5:01:45,,UnLoadCargo,1 (UnityEngine.GameObject),True
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849

View File

@@ -17,11 +17,11 @@ namespace XED
#if UNITY_EDITOR
static List<TwinContainer> twinContainerList = new();
[MenuItem("Tools/TwinObjectsSetting")]
public static void TwinObjectsSetting()
{
AutomateTwinObjectSetup();
}
//[MenuItem("Tools/TwinObjectsSetting")]
//public static void TwinObjectsSetting()
//{
// AutomateTwinObjectSetup();
//}
//존재하지 않은 폴더의 경우 해당 폴더를 생성해주는 메서드
static void CreateFolder(string folderPath)

View File

@@ -48,22 +48,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 84fe5a7ef78a7af498da388fc7c38ac3, type: 3}
m_Name:
m_EditorClassIdentifier:
agvTask: 0
agvState: 0
senseObstacleState: 0
specData: {fileID: 11400000, guid: 3124e65e4d238e24aa9f78f93282ff84, type: 2}
agvBattery:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
state: 0
spec: {fileID: 0}
battery:
currentBatteryState: 0
bc: 100
id:
moveSpeed: 10
lift: {fileID: 6204755932358581132}
pickupSocket: {fileID: 7175446550791974323}
chargeZone: {fileID: 0}
charging: 0
obstacleLayer:
serializedVersion: 2
m_Bits: 0
currentNode: {fileID: 0}
currentMovePath: []
lift: {fileID: 6814672540003804564}
--- !u!54 &3077797501209030249
Rigidbody:
m_ObjectHideFlags: 0
@@ -270,7 +271,10 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 7154835845995298155, guid: 586ca79ec44844746b347929276fc0e6, type: 3}
insertIndex: -1
addedObject: {fileID: 8278436267998297966}
m_AddedComponents: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 6070737613420926900, guid: 586ca79ec44844746b347929276fc0e6, type: 3}
insertIndex: -1
addedObject: {fileID: 5083700428396174471}
m_SourcePrefab: {fileID: 100100000, guid: 586ca79ec44844746b347929276fc0e6, type: 3}
--- !u!4 &3909547189796084948 stripped
Transform:
@@ -282,6 +286,23 @@ GameObject:
m_CorrespondingSourceObject: {fileID: 6070737613420926900, guid: 586ca79ec44844746b347929276fc0e6, type: 3}
m_PrefabInstance: {fileID: 154300052577553464}
m_PrefabAsset: {fileID: 0}
--- !u!114 &5083700428396174471
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6204755932358581132}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5fb7059a769257346badd43882bceb27, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!4 &6814672540003804564 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 6680733278384466348, guid: 586ca79ec44844746b347929276fc0e6, type: 3}
m_PrefabInstance: {fileID: 154300052577553464}
m_PrefabAsset: {fileID: 0}
--- !u!4 &7020894527220248915 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 7154835845995298155, guid: 586ca79ec44844746b347929276fc0e6, type: 3}

View File

@@ -12,8 +12,6 @@ GameObject:
- component: {fileID: 5988852842637789614}
- component: {fileID: 2978737778036895904}
- component: {fileID: 1452792198060998428}
- component: {fileID: 9141033690985600288}
- component: {fileID: 1525400758423176862}
m_Layer: 0
m_Name: Node
m_TagString: Node
@@ -114,41 +112,6 @@ CapsuleCollider:
m_Height: 2
m_Direction: 1
m_Center: {x: 0.000000059604645, y: 0, z: -0.00000008940697}
--- !u!114 &9141033690985600288
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2579942234611465176}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
nodeClass:
id: 0
x: 0
y: 0
z: 0
linkedNodID: []
loadSocket: {fileID: 6320514756136129531}
unLoadSocket: {fileID: 7996001147720691937}
cargoPrefab: {fileID: 7765465869871364134, guid: 8daddfb03f8c9f0469b89edf75aa1fad, type: 3}
Cargo: {fileID: 0}
--- !u!114 &1525400758423176862
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2579942234611465176}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!1 &6320514756136129531
GameObject:
m_ObjectHideFlags: 0

View File

@@ -160,6 +160,7 @@ GameObject:
m_Component:
- component: {fileID: 109703751}
- component: {fileID: 109703752}
- component: {fileID: 109703753}
m_Layer: 0
m_Name: AGVMap
m_TagString: Untagged
@@ -205,16 +206,28 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
nodes:
- {fileID: 691233192}
- {fileID: 1992156869}
- {fileID: 691233197}
- {fileID: 1992156875}
- {fileID: 1554807644}
- {fileID: 1172928290}
- {fileID: 2097314996}
- {fileID: 1082030770}
- {fileID: 146771354}
- {fileID: 1590019367}
- {fileID: 617492811}
- {fileID: 1084391824}
- {fileID: 617492817}
- {fileID: 1084391830}
--- !u!114 &109703753
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 109703750}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b693fd1017fb97f478a690e30a0f1c42, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &116334308
GameObject:
m_ObjectHideFlags: 0
@@ -262,8 +275,15 @@ MonoBehaviour:
stackerCranes: []
agvManager: {fileID: 0}
agvMap: {fileID: 0}
portMap: {fileID: 0}
loads: []
prf_Load: {fileID: 2713012076675240762, guid: 7cbbdba660dbd38479c561c09e38ec11, type: 3}
startNode: {fileID: 1172928290}
stackerHasEmptyCell: 0
maxAGVCount: 1
agvIsLack: 0
loadIsLack: 0
needs:
--- !u!1001 &125296021
PrefabInstance:
m_ObjectHideFlags: 0
@@ -372,6 +392,22 @@ PrefabInstance:
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5433983453336379086, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
propertyPath: m_LocalPosition.z
value: -1.68
objectReference: {fileID: 0}
- target: {fileID: 5836257196704929345, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
propertyPath: autoInput
value: 1
objectReference: {fileID: 0}
- target: {fileID: 6539674356208821794, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
propertyPath: m_LocalPosition.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 6539674356208821794, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
propertyPath: m_LocalPosition.z
value: 1.72
objectReference: {fileID: 0}
- target: {fileID: 6604900196319183848, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
propertyPath: m_AnchorMax.y
value: 0
@@ -395,7 +431,10 @@ PrefabInstance:
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 8107138202495161764, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
insertIndex: -1
addedObject: {fileID: 1039833823}
m_SourcePrefab: {fileID: 100100000, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
--- !u!1 &146771353
GameObject:
@@ -410,7 +449,6 @@ GameObject:
- component: {fileID: 146771358}
- component: {fileID: 146771357}
- component: {fileID: 146771354}
- component: {fileID: 146771356}
m_Layer: 0
m_Name: 6
m_TagString: Node
@@ -430,17 +468,20 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 1
- 7
- 2
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 1992156869}
- {fileID: 1590019367}
- {fileID: 1554807644}
nodeType: 0
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
@@ -449,7 +490,6 @@ MonoBehaviour:
linkedNodID: []
loadSocket: {fileID: 1942261059}
unLoadSocket: {fileID: 6157020}
cargo: {fileID: 0}
--- !u!4 &146771355
Transform:
m_ObjectHideFlags: 0
@@ -467,19 +507,6 @@ Transform:
- {fileID: 1942261060}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &146771356
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 146771353}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &146771357
CapsuleCollider:
m_ObjectHideFlags: 0
@@ -642,8 +669,8 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 161581743}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalRotation: {x: 0.3173999, y: 0.59771526, z: -0.27844498, w: 0.6815146}
m_LocalPosition: {x: -13.905856, y: 17.881578, z: -8.9192915}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
@@ -782,23 +809,27 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
propertyPath: nodeType
value: 2
value: 4
objectReference: {fileID: 0}
- target: {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
propertyPath: nextConveyor
value:
objectReference: {fileID: 0}
- target: {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
propertyPath: linkedNodes.Array.size
value: 2
value: 1
objectReference: {fileID: 0}
- target: {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
propertyPath: 'linkedNodes.Array.data[0]'
value:
objectReference: {fileID: 1992156869}
objectReference: {fileID: 0}
- target: {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
propertyPath: 'linkedNodes.Array.data[1]'
value:
objectReference: {fileID: 2097314996}
- target: {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
propertyPath: entity.linkedNodeIDs.Array.size
value: 2
value: 1
objectReference: {fileID: 0}
- target: {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
propertyPath: nodeClass.linkedNodID.Array.size
@@ -812,10 +843,15 @@ PrefabInstance:
propertyPath: 'entity.linkedNodeIDs.Array.data[1]'
value: 4
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedComponents:
- {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
- {fileID: 1525400758423176862, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 2579942234611465176, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
insertIndex: -1
addedObject: {fileID: 691233197}
m_SourcePrefab: {fileID: 100100000, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
--- !u!1 &394740631
GameObject:
@@ -981,8 +1017,8 @@ GameObject:
- component: {fileID: 617492816}
- component: {fileID: 617492815}
- component: {fileID: 617492814}
- component: {fileID: 617492811}
- component: {fileID: 617492813}
- component: {fileID: 617492817}
- component: {fileID: 617492818}
m_Layer: 0
m_Name: 8
m_TagString: Node
@@ -990,34 +1026,6 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &617492811
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 617492810}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 3
linkedNodes:
- {fileID: 1172928290}
nodeType: 1
reserved: 0
nodeClass:
id: 0
x: 0
y: 0
z: 0
linkedNodID: []
loadSocket: {fileID: 1704515058}
unLoadSocket: {fileID: 1324543929}
cargo: {fileID: 0}
--- !u!4 &617492812
Transform:
m_ObjectHideFlags: 0
@@ -1035,19 +1043,6 @@ Transform:
- {fileID: 1704515059}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &617492813
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 617492810}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &617492814
CapsuleCollider:
m_ObjectHideFlags: 0
@@ -1124,22 +1119,108 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 617492810}
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &691233192 stripped
--- !u!114 &617492817
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 9141033690985600288, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
m_PrefabInstance: {fileID: 242396287}
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_GameObject: {fileID: 617492810}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Script: {fileID: 11500000, guid: daa06027f79476c49a6c2fab86fc4ae1, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 1172928290}
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
y: 0
z: 0
linkedNodID: []
loadSocket: {fileID: 0}
unLoadSocket: {fileID: 0}
portType: 0
loader: {fileID: 0}
--- !u!114 &617492818
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 617492810}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 54f4e708da2ac8240ad1cb360aebb204, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
currentLoad: {fileID: 0}
--- !u!1 &691233190 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 2579942234611465176, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
m_PrefabInstance: {fileID: 242396287}
m_PrefabAsset: {fileID: 0}
--- !u!4 &691233196 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 5408679464857153134, guid: 5b3355ff1ae888e428ebf6ad2853e303, type: 3}
m_PrefabInstance: {fileID: 242396287}
m_PrefabAsset: {fileID: 0}
--- !u!114 &691233197
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 691233190}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: daa06027f79476c49a6c2fab86fc4ae1, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 1992156875}
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
y: 0
z: 0
linkedNodID: []
loadSocket: {fileID: 0}
unLoadSocket: {fileID: 0}
portType: 0
loader: {fileID: 1832015431}
--- !u!1 &736132299
GameObject:
m_ObjectHideFlags: 0
@@ -1264,6 +1345,33 @@ Transform:
m_Children: []
m_Father: {fileID: 1172928291}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1039833818 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 8107138202495161764, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
m_PrefabInstance: {fileID: 125296021}
m_PrefabAsset: {fileID: 0}
--- !u!114 &1039833823
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1039833818}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1a308d559e458b94aadec13b64a11ef2, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
currentLoad: {fileID: 0}
--- !u!1 &1082030769
GameObject:
m_ObjectHideFlags: 0
@@ -1277,7 +1385,6 @@ GameObject:
- component: {fileID: 1082030774}
- component: {fileID: 1082030773}
- component: {fileID: 1082030770}
- component: {fileID: 1082030772}
m_Layer: 0
m_Name: 5
m_TagString: Node
@@ -1297,13 +1404,19 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 4
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 2097314996}
nodeType: 3
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
@@ -1312,7 +1425,6 @@ MonoBehaviour:
linkedNodID: []
loadSocket: {fileID: 394740631}
unLoadSocket: {fileID: 2015597917}
cargo: {fileID: 0}
--- !u!4 &1082030771
Transform:
m_ObjectHideFlags: 0
@@ -1330,19 +1442,6 @@ Transform:
- {fileID: 394740632}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1082030772
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1082030769}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &1082030773
CapsuleCollider:
m_ObjectHideFlags: 0
@@ -1431,8 +1530,8 @@ GameObject:
- component: {fileID: 1084391829}
- component: {fileID: 1084391828}
- component: {fileID: 1084391827}
- component: {fileID: 1084391824}
- component: {fileID: 1084391826}
- component: {fileID: 1084391830}
- component: {fileID: 1084391831}
m_Layer: 0
m_Name: 9
m_TagString: Node
@@ -1440,34 +1539,6 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1084391824
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1084391823}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 2
linkedNodes:
- {fileID: 1554807644}
nodeType: 2
reserved: 0
nodeClass:
id: 0
x: 0
y: 0
z: 0
linkedNodID: []
loadSocket: {fileID: 216124008}
unLoadSocket: {fileID: 1824210708}
cargo: {fileID: 0}
--- !u!4 &1084391825
Transform:
m_ObjectHideFlags: 0
@@ -1485,19 +1556,6 @@ Transform:
- {fileID: 216124009}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1084391826
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1084391823}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &1084391827
CapsuleCollider:
m_ObjectHideFlags: 0
@@ -1574,6 +1632,63 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1084391823}
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &1084391830
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1084391823}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: daa06027f79476c49a6c2fab86fc4ae1, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 1554807644}
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
y: 0
z: 0
linkedNodID: []
loadSocket: {fileID: 0}
unLoadSocket: {fileID: 0}
portType: 0
loader: {fileID: 0}
--- !u!114 &1084391831
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1084391823}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 51a49aa3db137494c96cb9bf1a83989f, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
currentLoad: {fileID: 0}
--- !u!1 &1133980571
GameObject:
m_ObjectHideFlags: 0
@@ -1618,9 +1733,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 43c2fa2860dfa344d856558ec881bb8a, type: 3}
m_Name:
m_EditorClassIdentifier:
agvPrefab: {fileID: 3521821355188594447, guid: 03eb7e95fc0cb334d848d40c49b4110e, type: 3}
agvs: []
fileName: Assets/AGVsLog.csv
prf_AGV: {fileID: 3521821355188594447, guid: 03eb7e95fc0cb334d848d40c49b4110e, type: 3}
prf_Spec: {fileID: 11400000, guid: 3124e65e4d238e24aa9f78f93282ff84, type: 2}
autoIndexing: 1
--- !u!1 &1172928289
GameObject:
m_ObjectHideFlags: 0
@@ -1634,7 +1749,6 @@ GameObject:
- component: {fileID: 1172928294}
- component: {fileID: 1172928293}
- component: {fileID: 1172928290}
- component: {fileID: 1172928292}
m_Layer: 0
m_Name: 3
m_TagString: Node
@@ -1654,17 +1768,20 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 2
- 4
- 8
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 1554807644}
- {fileID: 2097314996}
- {fileID: 617492811}
nodeType: 0
- {fileID: 617492817}
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
@@ -1673,7 +1790,6 @@ MonoBehaviour:
linkedNodID: []
loadSocket: {fileID: 891010309}
unLoadSocket: {fileID: 1310341712}
cargo: {fileID: 0}
--- !u!4 &1172928291
Transform:
m_ObjectHideFlags: 0
@@ -1691,19 +1807,6 @@ Transform:
- {fileID: 891010310}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1172928292
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1172928289}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &1172928293
CapsuleCollider:
m_ObjectHideFlags: 0
@@ -2047,7 +2150,6 @@ GameObject:
- component: {fileID: 1554807648}
- component: {fileID: 1554807647}
- component: {fileID: 1554807644}
- component: {fileID: 1554807646}
m_Layer: 0
m_Name: 2
m_TagString: Node
@@ -2067,17 +2169,20 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 3
- 6
-
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 1172928290}
- {fileID: 146771354}
- {fileID: 1084391824}
nodeType: 0
- {fileID: 1084391830}
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
@@ -2086,7 +2191,6 @@ MonoBehaviour:
linkedNodID: []
loadSocket: {fileID: 884415325}
unLoadSocket: {fileID: 736132299}
cargo: {fileID: 0}
--- !u!4 &1554807645
Transform:
m_ObjectHideFlags: 0
@@ -2104,19 +2208,6 @@ Transform:
- {fileID: 884415326}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1554807646
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1554807643}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &1554807647
CapsuleCollider:
m_ObjectHideFlags: 0
@@ -2206,7 +2297,6 @@ GameObject:
- component: {fileID: 1590019371}
- component: {fileID: 1590019370}
- component: {fileID: 1590019367}
- component: {fileID: 1590019369}
m_Layer: 0
m_Name: 7
m_TagString: Node
@@ -2226,13 +2316,19 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 6
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 146771354}
nodeType: 3
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
@@ -2241,7 +2337,6 @@ MonoBehaviour:
linkedNodID: []
loadSocket: {fileID: 1349873324}
unLoadSocket: {fileID: 1191611793}
cargo: {fileID: 0}
--- !u!4 &1590019368
Transform:
m_ObjectHideFlags: 0
@@ -2259,19 +2354,6 @@ Transform:
- {fileID: 1349873325}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1590019369
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1590019366}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &1590019370
CapsuleCollider:
m_ObjectHideFlags: 0
@@ -2410,6 +2492,17 @@ Transform:
m_Children: []
m_Father: {fileID: 1084391825}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1832015431 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 5062054334540688330, guid: e90993d6f27e3844eaa33168853e6c7d, type: 3}
m_PrefabInstance: {fileID: 125296021}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 00bad124f10f0e44fab7f4f507ecf764, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1858000804
GameObject:
m_ObjectHideFlags: 0
@@ -2497,8 +2590,7 @@ GameObject:
- component: {fileID: 1992156874}
- component: {fileID: 1992156873}
- component: {fileID: 1992156872}
- component: {fileID: 1992156869}
- component: {fileID: 1992156871}
- component: {fileID: 1992156875}
m_Layer: 0
m_Name: 1
m_TagString: Node
@@ -2506,36 +2598,6 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &1992156869
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1992156868}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 0
- 6
linkedNodes:
- {fileID: 691233192}
- {fileID: 146771354}
nodeType: 1
reserved: 0
nodeClass:
id: 0
x: 0
y: 0
z: 0
linkedNodID: []
loadSocket: {fileID: 2052880161}
unLoadSocket: {fileID: 1391611792}
cargo: {fileID: 0}
--- !u!4 &1992156870
Transform:
m_ObjectHideFlags: 0
@@ -2553,19 +2615,6 @@ Transform:
- {fileID: 2052880162}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1992156871
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1992156868}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &1992156872
CapsuleCollider:
m_ObjectHideFlags: 0
@@ -2642,6 +2691,41 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1992156868}
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &1992156875
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1992156868}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: daa06027f79476c49a6c2fab86fc4ae1, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 146771354}
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
y: 0
z: 0
linkedNodID: []
loadSocket: {fileID: 0}
unLoadSocket: {fileID: 0}
portType: 1
loader: {fileID: 0}
--- !u!1 &2015597917
GameObject:
m_ObjectHideFlags: 0
@@ -2717,7 +2801,6 @@ GameObject:
- component: {fileID: 2097315000}
- component: {fileID: 2097314999}
- component: {fileID: 2097314996}
- component: {fileID: 2097314998}
m_Layer: 0
m_Name: 4
m_TagString: Node
@@ -2737,15 +2820,20 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0d1092f586cc6e34e991814d701c66ce, type: 3}
m_Name:
m_EditorClassIdentifier:
entity:
linkedNodeIDs:
- 3
- 5
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
linkedNodes:
- {fileID: 1172928290}
- {fileID: 1082030770}
nodeType: 0
- {fileID: 691233197}
reserved: 0
nextConveyor: {fileID: 0}
nodeClass:
id: 0
x: 0
@@ -2754,7 +2842,6 @@ MonoBehaviour:
linkedNodID: []
loadSocket: {fileID: 1353975497}
unLoadSocket: {fileID: 878306402}
cargo: {fileID: 0}
--- !u!4 &2097314997
Transform:
m_ObjectHideFlags: 0
@@ -2772,19 +2859,6 @@ Transform:
- {fileID: 1353975498}
m_Father: {fileID: 109703751}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2097314998
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2097314995}
m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac7bbf2eaa67a7b4ab83ad40f118a81a, type: 3}
m_Name:
m_EditorClassIdentifier:
chargePerSecond: 1
--- !u!136 &2097314999
CapsuleCollider:
m_ObjectHideFlags: 0

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,36 @@
using System.Collections.Generic;
using XED.VirtualFactory;
public class AGVAction
{
}
public class AGVMoveAction : AGVAction
{
public List<AGVNode> path;
public AGVMoveAction(List<AGVNode> path)
{
this.path = path;
}
}
public class AGVLoadAction : AGVAction
{
public Loader targetLoader;
public AGVLoadAction(Loader targetLoader)
{
this.targetLoader = targetLoader;
}
}
public class AGVUnloadAction : AGVAction
{
public Loader targetLoader;
public AGVUnloadAction(Loader targetLoader)
{
this.targetLoader = targetLoader;
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 18cd343e58c5d8f4b9e8f214b57ccf63

View File

@@ -1,184 +1,46 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
using XRLib;
namespace XED.VirtualFactory
{
public class AGVManager : MonoBehaviour,ISingle
public class AGVManager : MonoBehaviour, ISingle
{
public AGV agvPrefab;
public List<AGV> agvs = new List<AGV>();
Dictionary<AGV, List<AGVNode>> orderDict = new Dictionary<AGV, List<AGVNode>>();
public event Action<List<AGVNode>> onOrderStarted;
public string fileName = "Assets/AGVsLog.csv";
private void Start()
public AGV prf_AGV;
public AGVSpec prf_Spec;
public HashSet<AGV> agvs = new();
public bool autoIndexing;
public bool TryGetIdleAGV(out AGV result)
{
agvs = FindObjectsByType<AGV>(FindObjectsSortMode.None).ToList();
foreach(var a in agvs)
//Debug.Log($"Try Get Idle AGV");
foreach (var agv in agvs)
{
a.onTaskComplete += WriteLog;
}
CreateLogFile();
}
void CreateLogFile()
{
if (!File.Exists(fileName))
{
using (StreamWriter sw = File.CreateText(fileName))
if (!agv.isBusy)
{
sw.WriteLine("Time,AGV_ID,Task,Target,Success");
Debug.Log($"Find Idle AGV");
result = agv;
return true;
}
}
result = null;
return false;
}
public AGV SpawnAGV(Vector3 position,Quaternion rotation)
public AGV CreateEmptyAGV()
{
var agv = Instantiate(agvPrefab,position, rotation);
agv.onTaskComplete += WriteLog;
var agv = Instantiate(prf_AGV);
agvs.Add(agv);
if (autoIndexing)
{
agv.entity = new AGVEntity();
agv.entity.id = agvs.Count.ToString();
agv.name = $"AGV_{agv.entity.id}";
}
agv.spec = prf_Spec;
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)
{
AGV.AddOrder(new AGVOrderClass(order, Target,comp));
}
public void OrderToAGV(int AGVindex,AGVTaskType order, GameObject Target)
{
agvs[AGVindex].AddOrder(new AGVOrderClass(order, Target));
}
public void OrderToAGV(AGV AGV, AGVTaskType order, GameObject Target)
{
AGV.AddOrder(new AGVOrderClass(order, Target));
}
public void OrderToAGV(AGV AGV, AGVTaskType order, Vector3 Target)
{
AGV.AddOrder(new AGVOrderClass(order, Target));
}
public void OrderToAGV(int AGVindex, AGVTaskType order, GameObject Target1, GameObject Target2)
{
agvs[AGVindex].AddOrder(new AGVOrderClass(order, Target1,Target2));
}
public void OrderToAGV(AGV AGV, AGVTaskType order)
{
AGV.AddOrder(new AGVOrderClass(order));
}
void WriteLog(AGV agv, AGVTaskType task, string target,bool success)
{
using (StreamWriter sw = File.AppendText(fileName))
{
string logLine = $"{DateTime.Now},{agv.id},{task},{target},{success}";
sw.WriteLine();
sw.WriteLine(logLine);
sw.Dispose();
}
}
public void ordertoAGV(List<AGVNode> OrderList)
{
Vector3 direction = (OrderList[1].transform.position - OrderList[0].transform.position);
direction = new Vector3(direction.x, 0, direction.z);
Quaternion lookRotation = Quaternion.LookRotation(direction);
var agv=SpawnAGV(OrderList[0].transform.position, lookRotation);
for (int i = 0; i < OrderList.Count; i++)
{
if (i != 0)
{
OrderToAGV(agv, AGVTaskType.SpinToTarget, OrderList[i].gameObject);
OrderToAGV(agv, AGVTaskType.MoveToTarget, OrderList[i].gameObject);
}
if (OrderList[i].nodeClass.type == AGVNodeType.charge)
{
OrderToAGV(agv, AGVTaskType.Charging);
}
if (OrderList[i].nodeClass.type == AGVNodeType.Load)
{
OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]);
//OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position + new Vector3(0, 0.2f, 0));
}
if (OrderList[i].nodeClass.type == AGVNodeType.unLoad)
{
OrderToAGV(agv, AGVTaskType.UnLoadCargo, OrderList[i].unLoadSocket, OrderList[i]);
OrderToAGV(agv, AGVTaskType.LiftReset);
}
}
orderDict.Add(agv, OrderList);
onOrderStarted?.Invoke(OrderList);
agv.onOrderCompleted += OrderReplay;
agv.onOrderStoped += StopOrder;
}
public void ordertoAGV(List<AGVNode> OrderList,AGV agv)
{
for (int i = 0; i < OrderList.Count; i++)
{
OrderToAGV(agv, AGVTaskType.SpinToTarget, OrderList[i].gameObject);
OrderToAGV(agv, AGVTaskType.MoveToTarget, OrderList[i].gameObject);
if (OrderList[i].nodeClass.type == AGVNodeType.charge)
{
OrderToAGV(agv, AGVTaskType.Charging);
}
if (OrderList[i].nodeClass.type == AGVNodeType.Load)
{
OrderToAGV(agv, AGVTaskType.LoadCargo, OrderList[i].loadSocket, OrderList[i]);
//OrderToAGV(agv, AGVTaskType.LiftUpDown, OrderList[i].loadSocket.transform.position+new Vector3(0,0.2f,0));
}
if (OrderList[i].nodeClass.type == AGVNodeType.unLoad)
{
OrderToAGV(agv, AGVTaskType.UnLoadCargo, OrderList[i].unLoadSocket, OrderList[i]);
OrderToAGV(agv, AGVTaskType.LiftReset);
}
}
}
public void OrderReplay(AGV agv)
{
ordertoAGV(orderDict[agv], agv);
}
public void StopOrder(AGV agv)
{
agv.onOrderCompleted -= OrderReplay;
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 Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
@@ -5,12 +6,14 @@ using UnityEngine;
namespace XED.VirtualFactory
{
public class AGVNode : MonoBehaviour
public class AGVNode : TwinObject
{
public AGVNodeEntity entity;
public event Action onEnterEvent;
public event Action onExitEvent;
public List<AGVNode> linkedNodes = new();
public AGVNodeType nodeType;
public bool reserved;
public Transform nextConveyor;
#region legacy
public AGVNodeClass nodeClass;
@@ -18,7 +21,6 @@ namespace XED.VirtualFactory
List<Renderer> meshRendererList = new List<Renderer>();
public GameObject loadSocket;
public GameObject unLoadSocket;
public Load cargo;
#endregion
public void Initialize(AGVNodeClass data)
@@ -35,7 +37,6 @@ namespace XED.VirtualFactory
meshRendererList.Add(child.gameObject.GetComponent<Renderer>());
}
}
nodeClass.onTypeChanged += ChangeType;
}
public void SetColor(Color color)
@@ -55,39 +56,5 @@ namespace XED.VirtualFactory
r.SetPropertyBlock(null);
}
}
void ChangeType(AGVNodeType type)
{
var chargezone=gameObject.GetComponent<ChargeZone>();
chargezone.enabled = false;
if (cargo)
{
Destroy(cargo);
}
if (cargo)
{
Destroy(cargo);
}
if (type == AGVNodeType.charge)
{
chargezone.enabled = true;
}
}
public void LoadCargo()
{
cargo = null;
}
public void UnLoadCargo(Load cargo)
{
this.cargo = cargo;
}
internal void Load(Load cargo)
{
this.cargo = cargo;
cargo.transform.position = loadSocket.transform.position;
}
}
}

View File

@@ -4,34 +4,10 @@ using System;
namespace XED.VirtualFactory
{
[Serializable]
public enum AGVNodeType
{
normal,
Load,
unLoad,
charge
}
[Serializable]
public class AGVNodeClass
{
public event Action<AGVNodeType> onTypeChanged;
public AGVNodeType type
{
get
{
return _type;
}
set
{
if (value != _type)
{
_type = value;
onTypeChanged?.Invoke(_type);
}
}
}
AGVNodeType _type=AGVNodeType.normal;
public string id="0";
public string x="0";
public string y="0";

View File

@@ -328,12 +328,12 @@ namespace XED.VirtualFactory
public void NodeTypeChange(int index)
{
if (currentlySelectedNode)
{
currentlySelectedNode.nodeClass.type = (AGVNodeType)index;
nodeTable[currentlySelectedNode.nodeClass.id].nodeClass.type = (AGVNodeType)index;
agvNodeMap.agvNodeData.Find(n => n.id == currentlySelectedNode.nodeClass.id).type = (AGVNodeType)index;
}
//if (currentlySelectedNode)
//{
// currentlySelectedNode.nodeClass.type = (AGVNodeType)index;
// nodeTable[currentlySelectedNode.nodeClass.id].nodeClass.type = (AGVNodeType)index;
// agvNodeMap.agvNodeData.Find(n => n.id == currentlySelectedNode.nodeClass.id).type = (AGVNodeType)index;
//}
}
public void RemoveNode(AGVNode node)

View File

@@ -47,7 +47,7 @@ namespace XED.VirtualFactory
gameObject.GetComponent<RectTransform>().position = Camera.main.WorldToScreenPoint(target.transform.position) + new Vector3(0, 5f, 0);
gameObject.GetComponent<CanvasGroup>().interactable = true;
gameObject.GetComponent<CanvasGroup>().alpha = 1f;
DropDown_AGVNodeType.value = (int)selectedNode.GetComponent<AGVNode>().nodeClass.type;
//DropDown_AGVNodeType.value = (int)selectedNode.GetComponent<AGVNode>().nodeClass.type;
gameObject.SetActive(true);
}

View File

@@ -0,0 +1,18 @@
using System;
namespace XED.VirtualFactory
{
public class AGVPortNode : AGVNode
{
public enum PortType
{
Input,
Output
}
public PortType portType;
public Loader loader;
public event Action onLoadEvent;
public event Action onUnloadEvent;
}
}

View File

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

View File

@@ -0,0 +1,7 @@
namespace XED.VirtualFactory
{
public class DestroyPort : OutputPort
{
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 51a49aa3db137494c96cb9bf1a83989f

View File

@@ -0,0 +1,15 @@
using UnityEngine;
namespace XED.VirtualFactory
{
public class GeneratePort : OutputPort
{
public override void AfterAwake()
{
base.AfterAwake();
Debug.Log("GeneratePort AfterAwake");
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 54f4e708da2ac8240ad1cb360aebb204

View File

@@ -0,0 +1,9 @@
using System;
namespace XED.VirtualFactory
{
//뭔가 놓고 나가는 경우
public class InputPort : Port
{
}
}

View File

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

View File

@@ -0,0 +1,34 @@
using System;
using UnityEngine;
namespace XED.VirtualFactory
{
public class Loader : TwinObject
{
public Product currentLoad;
protected virtual Transform loadPivot => transform;
public bool isEmpty => currentLoad == null;
public event Action onLoadEvent;
public event Action onUnloadEvent;
public virtual void Load(Product load)
{
Debug.Log($"{name} is load");
load.transform.SetParent(loadPivot);
load.transform.localPosition= Vector3.zero;
currentLoad = load;
load.LocationUpdate(this);
onLoadEvent?.Invoke();
}
public virtual void Unload(Loader getter)
{
Debug.Log($"{name} is unload");
if (getter != null)
getter.Load(currentLoad);
currentLoad = null;
onUnloadEvent?.Invoke();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3eaa66bb148b11b46acc7760a5495c63

View File

@@ -0,0 +1,8 @@
namespace XED.VirtualFactory
{
//뭔가 들고 나가는 경우
public class OutputPort : Port
{
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 12fb04b0bfacc524ea2170a660857d7b

View File

@@ -0,0 +1,11 @@
namespace XED.VirtualFactory
{
public class Port : Loader
{
public override void AfterAwake()
{
base.AfterAwake();
FindSingle<PortMap>().Regist(this);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 012a83125126a164493cda401dd26e45

View File

@@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using XRLib;
namespace XED.VirtualFactory
{
public class PortMap : MonoBehaviour, ISingle
{
HashSet<Port> ports = new();
public bool TryGetEmptyGeneratePort(out GeneratePort result)
{
foreach (var p in ports)
{
if (p is GeneratePort pt && p.isEmpty)
{
result = pt;
return true;
}
}
result = null;
return false;
}
internal bool TryGetFullGeneratePort(out Port targetPort)
{
foreach (var p in ports)
{
if (p is GeneratePort pt && !pt.isEmpty)
{
targetPort = pt;
return true;
}
}
targetPort = null;
return false;
}
public void Regist(Port port)
{
if(!ports.Add(port))
{
Debug.LogError("Port already exists");
return;
}
ports.Add(port);
}
internal bool TryGetEmptyInputPort(out Port inputPort)
{
foreach(var p in ports)
{
if (p is InputPort pt && pt.isEmpty)
{
inputPort = pt;
return true;
}
}
inputPort = null;
return false;
}
}
}

View File

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

View File

@@ -0,0 +1,6 @@
namespace XED.VirtualFactory
{
public class StackerInputPort : InputPort
{
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 00bad124f10f0e44fab7f4f507ecf764

View File

@@ -0,0 +1,6 @@
namespace XED.VirtualFactory
{
public class StackerOutputPort : OutputPort
{
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 4fce4835cb2aae74da849f6efffd5997

View File

@@ -14,7 +14,7 @@ namespace XED.VirtualFactory
}
public class AGVOrderClass
{
public AGVTaskType agvTaskType=AGVTaskType.Waiting;
//public AGVTaskType agvTaskType=AGVTaskType.Waiting;
public TargetCase targetCase = TargetCase.None;
public Vector3 target = new Vector3();
public Vector3 target2 = new Vector3();
@@ -22,42 +22,5 @@ namespace XED.VirtualFactory
public GameObject targetObject;
public Quaternion targetQuaternion;
public AGVOrderClass(AGVTaskType task)
{
agvTaskType = task;
targetCase = TargetCase.None;
}
public AGVOrderClass(AGVTaskType task,GameObject targetObject)
{
agvTaskType = task;
target = targetObject.transform.position;
this.targetObject = targetObject;
targetCase = TargetCase.One;
}
public AGVOrderClass(AGVTaskType task, Vector3 targetVector)
{
agvTaskType = task;
target = targetVector;
targetCase = TargetCase.One;
}
public AGVOrderClass(AGVTaskType task, GameObject targetObject, GameObject target2Object)
{
agvTaskType = task;
target = targetObject.transform.position;
target2 = target2Object.transform.position;
targetCase = TargetCase.Two;
}
public AGVOrderClass(AGVTaskType task, GameObject targetObject, Component comp)
{
agvTaskType = task;
this.targetObject = targetObject;
targetcomp = comp;
targetCase = TargetCase.Two;
}
}
}

View File

@@ -20,7 +20,6 @@ namespace XED.VirtualFactory
return;
inAGV = amr;
inAGV.charging = true;
}
private void OnTriggerStay(Collider other)
@@ -33,10 +32,7 @@ namespace XED.VirtualFactory
return;
if (inAGV == null)
return;
if (inAGV.charging)
{
inAGV.agvBattery.batteryCapacity += chargePerSecond * Time.deltaTime;
}
}
private void OnTriggerExit(Collider other)
@@ -48,7 +44,6 @@ namespace XED.VirtualFactory
if (!other.TryGetComponent(out AGV amr))
return;
inAGV.charging = false;
inAGV = null;
}
}

View File

@@ -12,15 +12,15 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 24cfa40753282b845b69548571a1a451, type: 3}
m_Name: AGVSpecData
m_EditorClassIdentifier:
maxSpeed: 20
maxCurveSpeed: 10
maxSpeed: 2
maxCurveSpeed: 2
slowSpeed: 5
slowCurveSpeed: 3
maxLiftUp: 10
maxLiftDown: -10
maxLiftPush: 10
liftSpeed: 0.1
spinSpeed: 20
liftSpeed: 1
spinSpeed: 0.01
accelerate: 1
decelerate: 1
emergencyDecelerate: 5

View File

@@ -4,23 +4,14 @@ using UnityEngine;
namespace XED.VirtualFactory
{
public class Cell : MonoBehaviour
public class Cell : Loader
{
public bool isLoad;
public Load load;
public void Load(Load load)
public override void Load(Product load)
{
this.load = load;
base.Load(load);
isLoad = true;
}
public Load Unload()
{
var result = load;
load = null;
isLoad = false;
return result;
}
}
}

View File

@@ -1,8 +0,0 @@
namespace XED.VirtualFactory
{
public class Load : TwinObject
{
public LoadEntity entity;
}
}

View File

@@ -30,7 +30,7 @@ Transform:
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_LocalScale: {x: 1, y: 0.2, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
@@ -121,4 +121,12 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: cbf5cadd5a55b594bbe325dfebe6e8f1, type: 3}
m_Name:
m_EditorClassIdentifier:
id:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0

View File

@@ -0,0 +1,15 @@
using UnityEngine;
namespace XED.VirtualFactory
{
public class Product : TwinObject
{
public Loader currentLocation;
public void LocationUpdate(Loader loader)
{
currentLocation = loader;
Debug.Log($"{name} is in {loader.name}({this})");
}
}
}

View File

@@ -1,559 +1,305 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor.Localization.Plugins.XLIFF.V12;
using UnityEngine;
using XRLib;
namespace XED.VirtualFactory
{
public class StackerCrane : MonoBehaviour, ISingle
public class StackerCrane : TwinObject
{
public Transform Storage;
public Transform VerticalPillar;
public Transform Bucket;
public Transform Fork;
[Label(typeof(StackerCraneFork), "Fork")]
public StackerCraneFork fork;
[Label(typeof(StackerInputPort),"InComingPos")]
public StackerInputPort inputPort;
[Label(typeof(StackerOutputPort),"OutgoingPos")]
public StackerOutputPort outputPort;
private float forkRange = 1.5f;
public StackerCraneState currentState;
public event Action updateAction;
public Queue<StackerCraneTask> taskQueue = new();
public float forkSpeed = 1f;
Vector3 forkStart;
Vector3 forkEnd;
float forkProgress;
public StackerCraneAction currentAction;
public StackerCraneTask currentTask;
public Queue<StackerCraneAction> actionQueue = new();
public List<Loader> cells = new();
public bool autoInput;
public float pillarMoveSpeed = 1f;
public float bucketMoveSpeed = 1f;
public Loader moveTarget;
Vector3 pillarStart;
float bucketStart;
Vector3 pillarEnd;
float bucketEnd;
float pillarMoveProgress;
float bucketMoveProgress;
internal bool hasEmptyCell => cells.Any(cell => cell.isEmpty);
public Queue<StackerCraneTask> taskQueue = new Queue<StackerCraneTask>();
public StackerCraneTask currentTask = new StackerCraneTask(ETaskType.None);
public StackerCraneTask previousTask = new StackerCraneTask(ETaskType.None);
[Label(typeof(Cell), "InComingPos")]
public Cell incomeCell;
[Label(typeof(Cell), "OriginPos")]
public Cell originPos;
[Label(typeof(Cell), "OutgoingPos")]
public Cell outCell;
public Cell currentTargetCell;
public Transform Storage;
public Transform ForkLoadPlaceRoot;
private Vector3 VerticalPillarLerpStartPos;
private Vector3 BucketLerpStartPos;
private Vector3 ForkLerpStartPos;
private float verticalpillarT;
private float bucketT;
private float forkT;
private float verticalpollarTargetDistance;
private float bucketTargetDistance;
public event Action<StackerCrane> onAddTaskCompletedEvent;
public event Action<StackerCrane> onTaskReadyCompletedEvent;
public event Action<StackerCrane> onLoadCompletedEvent;
public event Action<StackerCrane> onTaskEndCompletedEvent;
public event Action<StackerCrane> onStateChangeEvent;
private List<Cell> cellList = new List<Cell>();
private float moveSpeed = 6f;
private float stackerCraneMove;
private bool IsBodyMoveCompleted => verticalpillarT >= 1f && bucketT >= 1f;
private bool IsForkMoveCompleted => forkT >= 1f;
public enum EStackeCraneState
public enum StackerCraneState
{
Idle,
TaskReady,
Move,
MoveReady,
Move,
MoveEnd,
ActionReady,
LoadReady,
UnloadReady,
ForkIn,
ForkInEnd,
ForkOut,
ForkOutEnd,
Load,
LoadEnd,
UnLoad,
UnLoadEnd,
TaskEnd,
Unload,
UnloadEnd,
}
public EStackeCraneState _stackeCraneState = EStackeCraneState.Idle;
public EStackeCraneState stackeCraneState
private void Update()
{
get { return _stackeCraneState; }
set
{
_stackeCraneState = value;
onStateChangeEvent?.Invoke(this);
ChangeStateAction();
}
updateAction.Invoke();
}
public override void AfterAwake()
{
FindSingle<StackerCraneManager>().InitStackerCrane(this);
InitStackerCell();
InitStackerCrane();
ChangeState(StackerCraneState.Idle);
cells = Storage.GetComponentsInChildren<Loader>().ToList();
inputPort.onLoadEvent += OnLoadInputPort;
}
private void InitStackerCell()
private void OnLoadInputPort()
{
for (int i = 0; i < Storage.childCount; i++)
Debug.Log($"On Load Stacker InputPort");
if (autoInput)
{
Transform cells = Storage.GetChild(i);
for (int j = 0; j < cells.childCount; j++)
{
Cell cell = cells.GetChild(j).GetComponent<Cell>();
cellList.Add(cell);
}
AddTask(new InputTask());
}
cellList = cellList
.OrderBy(cell => Vector3.Distance(cell.transform.position,outCell.transform.position))
.ToList();
}
public void AddTask(StackerCraneTask task)
{
taskQueue.Enqueue(task);
onAddTaskCompletedEvent?.Invoke(this);
if (stackeCraneState == EStackeCraneState.Idle)
ChangeStateAction();
}
private void ChangeStateAction()
private void ChangeState(StackerCraneState newState)
{
switch (stackeCraneState)
switch (newState)
{
case EStackeCraneState.Idle:
Idle();
case StackerCraneState.Idle:
updateAction = Idle;
break;
case EStackeCraneState.TaskReady:
TaskReady();
case StackerCraneState.TaskReady:
updateAction = TaskReady;
break;
case EStackeCraneState.Move:
StartCoroutine(Move());
case StackerCraneState.ActionReady:
updateAction = ActionReady;
break;
case EStackeCraneState.MoveEnd:
MoveEnd();
case StackerCraneState.MoveReady:
updateAction = MoveReady;
break;
case EStackeCraneState.Load:
StartCoroutine(Load());
case StackerCraneState.Move:
updateAction = Move;
break;
case EStackeCraneState.LoadEnd:
LoadEnd();
case StackerCraneState.MoveEnd:
updateAction = MoveEnd;
break;
case EStackeCraneState.UnLoad:
StartCoroutine(UnLoad());
case StackerCraneState.LoadReady:
updateAction = LoadReady;
break;
case EStackeCraneState.UnLoadEnd:
UnLoadEnd();
case StackerCraneState.ForkIn:
updateAction = ForkIn;
break;
case EStackeCraneState.TaskEnd:
TaskEnd();
case StackerCraneState.ForkInEnd:
updateAction = ForkInEnd;
break;
case StackerCraneState.ForkOut:
updateAction = ForkOut;
break;
case StackerCraneState.ForkOutEnd:
updateAction = ForkOutEnd;
break;
case StackerCraneState.Load:
updateAction = Load;
break;
case StackerCraneState.LoadEnd:
updateAction = LoadEnd;
break;
case StackerCraneState.UnloadReady:
updateAction = UnloadReady;
break;
case StackerCraneState.Unload:
updateAction = Unload;
break;
case StackerCraneState.UnloadEnd:
updateAction = UnloadEnd;
break;
}
}
private void Idle()
private void UnloadEnd()
{
if (taskQueue.Count > 0)
{
stackeCraneState = EStackeCraneState.TaskReady;
}
ChangeState(StackerCraneState.ForkOut);
}
private void TaskReady()
private void Unload()
{
if (taskQueue.Count == 0)
{
stackeCraneState = EStackeCraneState.Idle;
return;
}
if(taskQueue.Peek().taskType == ETaskType.Incoming)
{
if (GetInComeCellLoadCount() == 0)
{
Debug.LogWarning("시작 지점에 Load가 없습니다");
taskQueue.Dequeue();
currentTargetCell = originPos;
stackeCraneState = EStackeCraneState.Move;
return;
}
}
else
{
if (GetLoadCellCount() == 0)
{
Debug.LogWarning("stacker에 로드된 cell이 없습니다.");
taskQueue.Dequeue();
currentTargetCell = originPos;
stackeCraneState = EStackeCraneState.Move;
return;
}
}
//PredictWorkEndTime(taskQueue.Count);
previousTask = currentTask;
currentTask = taskQueue.Dequeue();
stackerCellIndex = -1;
InitStackerCrane();
switch (currentTask.taskType)
{
case ETaskType.Incoming:
currentTargetCell = incomeCell;
break;
case ETaskType.Outgoing:
currentTargetCell = GetFullCell();
break;
}
onTaskReadyCompletedEvent?.Invoke(this);
stackeCraneState = EStackeCraneState.Move;
}
private IEnumerator Move()
{
while (!IsBodyMoveCompleted)
{
stackerCraneMove = Time.deltaTime * moveSpeed;
MoveVerticalpollarToTarget();
MoveBucketToTarget();
yield return null;
}
stackeCraneState = EStackeCraneState.MoveEnd;
}
private void MoveEnd()
{
InitStackerCrane();
//TODO:: 위치 선정방식 변경
if (currentTargetCell == originPos)
{
elapsedDistance = 0f;
currentTask = new StackerCraneTask(ETaskType.None);
onTaskEndCompletedEvent?.Invoke(this);
stackeCraneState = EStackeCraneState.TaskReady;
}
else if (currentTargetCell == outCell)
{
stackeCraneState = EStackeCraneState.UnLoad;
}
else if(currentTargetCell == incomeCell)
{
stackeCraneState = EStackeCraneState.Load;
}
else if(currentTargetCell == GetEmptyCell())
{
if (currentTask.taskType == ETaskType.Incoming)
stackeCraneState = EStackeCraneState.UnLoad;
}
else// if(currentTargetCell == GetFullCell())
{
stackeCraneState = EStackeCraneState.Load;
}
}
private IEnumerator Load()
{
while (!IsForkMoveCompleted)
{
stackerCraneMove = Time.deltaTime * moveSpeed;
MoveForkToTarget();
yield return null;
}
currentTargetCell.load.transform.parent = ForkLoadPlaceRoot;
currentTargetCell.load.transform.localPosition = Vector3.zero;
currentTargetCell.isLoad = false;
currentTargetCell.load = null;
onLoadCompletedEvent.Invoke(this);
if (currentTask.taskType == ETaskType.Outgoing)
stackerCellIndex = cellList.IndexOf(currentTargetCell);
InitStackerCrane();
while (!IsForkMoveCompleted)
{
stackerCraneMove = Time.deltaTime * moveSpeed;
MoveForkToOrigin();
yield return null;
}
InitStackerCrane();
stackeCraneState = EStackeCraneState.LoadEnd;
fork.Unload(moveTarget);
ChangeState(StackerCraneState.UnloadEnd);
}
private void LoadEnd()
{
if (currentTask.taskType == ETaskType.Incoming)
currentTargetCell = GetEmptyCell();
forkProgress = 0f;
ChangeState(StackerCraneState.ForkOut);
}
private void Load()
{
moveTarget.Unload(fork);
ChangeState(StackerCraneState.LoadEnd);
}
private void ForkOutEnd()
{
forkProgress = 0f;
ChangeState(StackerCraneState.ActionReady);
}
private void ForkOut()
{
forkProgress += forkSpeed * Time.deltaTime / forkSpeed;
fork.transform.position = Vector3.Lerp(forkEnd, forkStart, forkProgress);
if (forkProgress >= 1)
{
ChangeState(StackerCraneState.ForkOutEnd);
}
}
private void ForkInEnd()
{
forkProgress = 0f;
if (fork.isEmpty)
ChangeState(StackerCraneState.Load);
else
currentTargetCell = outCell;
InitStackerCrane();
stackeCraneState = EStackeCraneState.Move;
ChangeState(StackerCraneState.Unload);
}
private IEnumerator UnLoad()
private void ForkIn()
{
while (!IsForkMoveCompleted)
forkProgress += forkSpeed* Time.deltaTime /forkSpeed;
fork.transform.position = Vector3.Lerp(forkStart, forkEnd, forkProgress);
if (forkProgress >= 1)
{
MoveForkToTarget();
yield return null;
}
Load load = ForkLoadPlaceRoot.GetChild(0).gameObject.GetComponent<Load>();
load.transform.parent = currentTargetCell.transform;
load.transform.localPosition = Vector3.zero;
currentTargetCell.isLoad = true;
currentTargetCell.load = load;
if (currentTask.taskType == ETaskType.Incoming)
stackerCellIndex = cellList.IndexOf(currentTargetCell);
InitStackerCrane();
while (!IsForkMoveCompleted)
{
MoveForkToOrigin();
yield return null;
}
InitStackerCrane();
stackeCraneState = EStackeCraneState.UnLoadEnd;
}
private void UnLoadEnd()
{
stackeCraneState = EStackeCraneState.TaskEnd;
}
private void TaskEnd()
{
if (taskQueue.Count == 0)
{
//goto home
InitStackerCrane();
currentTargetCell = originPos;
stackeCraneState = EStackeCraneState.Move;
}
else
{
elapsedDistance = 0f;
currentTask = new StackerCraneTask(ETaskType.None);
onTaskEndCompletedEvent?.Invoke(this);
stackeCraneState = EStackeCraneState.TaskReady;
ChangeState(StackerCraneState.ForkInEnd);
}
}
public int GetInComeCellLoadCount()
private void UnloadReady()
{
return incomeCell.transform.childCount;
forkStart = fork.transform.position;
forkEnd = moveTarget.transform.position;
ChangeState(StackerCraneState.ForkIn);
}
public int GetLoadCellCount()
private void LoadReady()
{
return cellList.Count(cell => cell.isLoad);
forkStart = fork.transform.position;
forkEnd = moveTarget.transform.position;
ChangeState(StackerCraneState.ForkIn);
}
Cell GetEmptyCell()
private void ActionReady()
{
var emptyCells = cellList.Where(cell => !cell.isLoad);
return emptyCells.FirstOrDefault();
}
Cell GetFullCell()
{
var fullCells = cellList.Where(cell => cell.isLoad);
return fullCells.FirstOrDefault();
}
private void InitStackerCrane()
{
verticalpillarT = 0f;
bucketT = 0f;
forkT = 0f;
VerticalPillarLerpStartPos = VerticalPillar.position;
BucketLerpStartPos = Bucket.position;
ForkLerpStartPos = Fork.position;
}
private void MoveVerticalpollarToTarget()
{
verticalpollarTargetDistance = Mathf.Abs(VerticalPillarLerpStartPos.x - currentTargetCell.transform.position.x);
verticalpillarT += stackerCraneMove / verticalpollarTargetDistance;
Vector3 verticalPillarPos = VerticalPillar.position;
verticalPillarPos.x = Mathf.Lerp(VerticalPillarLerpStartPos.x, currentTargetCell.transform.position.x, verticalpillarT);
VerticalPillar.position = verticalPillarPos;
if(verticalpollarTargetDistance >= bucketTargetDistance)
elapsedDistance += stackerCraneMove;
}
private void MoveBucketToTarget()
{
bucketTargetDistance = Mathf.Abs(BucketLerpStartPos.y - currentTargetCell.transform.position.y);
bucketT += stackerCraneMove / bucketTargetDistance;
Vector3 bucketPos = Bucket.position;
bucketPos.y = Mathf.Lerp(BucketLerpStartPos.y, currentTargetCell.transform.position.y, bucketT);
Bucket.position = bucketPos;
if (bucketTargetDistance >= verticalpollarTargetDistance)
elapsedDistance += stackerCraneMove;
}
private void MoveForkToTarget()
{
forkT += stackerCraneMove / forkRange;
Vector3 forkPos = Fork.position;
forkPos.z = Mathf.Lerp(ForkLerpStartPos.z, currentTargetCell.transform.position.z >= 0 ? forkRange : -forkRange, forkT);
Fork.position = forkPos;
elapsedDistance += stackerCraneMove;
}
private void MoveForkToOrigin()
{
forkT += stackerCraneMove / forkRange;
Vector3 forkPos = Fork.position;
forkPos.z = Mathf.Lerp(ForkLerpStartPos.z, 0f, forkT);
Fork.position = forkPos;
elapsedDistance += stackerCraneMove;
}
private float totalDistance = 0f;
private float elapsedDistance = 0f;
int stackerCellIndex = -1;
List<Cell> modifiedCellList = new List<Cell>();
Cell targetStackerCell = null;
public void PredictWorkEndTime(StackerCraneTask targetTask)
{
if (!IsTaskValid(targetTask))
if (actionQueue.Count == 0)
{
Debug.LogWarning("잘못된 task가 포함되어 있습니다.");
ChangeState(StackerCraneState.Idle);
return;
}
currentAction = actionQueue.Dequeue();
switch (currentAction)
{
case StackerCraneMoveToInputAction moveToInputAction:
moveTarget = inputPort;
ChangeState(StackerCraneState.MoveReady);
break;
case StackerCraneMoveToOutputAction moveToOutputAction:
moveTarget = outputPort;
ChangeState(StackerCraneState.MoveReady);
break;
case StackerCraneMoveToEmptyCellAction moveToEmptyCellAction:
moveTarget = cells.FirstOrDefault(cell => cell.isEmpty);
ChangeState(StackerCraneState.MoveReady);
break;
case StackerCraneMoveToFullCellAction moveToFullCellAction:
moveTarget = cells.FirstOrDefault(cell => !cell.isEmpty);
ChangeState(StackerCraneState.MoveReady);
break;
case StackerCraneLoadAction loadAction:
ChangeState(StackerCraneState.LoadReady);
break;
case StackerCraneUnloadAction unloadAction:
ChangeState(StackerCraneState.UnloadReady);
break;
}
}
StackerCraneTask tempPreviousTask = previousTask;
StackerCraneTask tempCurrentTask = currentTask;
private void MoveEnd()
{
pillarMoveProgress = 0f;
bucketMoveProgress = 0f;
ChangeState(StackerCraneState.ActionReady);
}
private void Move()
{
pillarMoveProgress += pillarMoveSpeed *Time.deltaTime / pillarMoveSpeed;
bucketMoveProgress += bucketMoveSpeed * Time.deltaTime / bucketMoveSpeed;
VerticalPillar.position = Vector3.Lerp(pillarStart, pillarEnd, pillarMoveProgress);
var bPos = Bucket.position;
bPos.y= Mathf.Lerp(bucketStart, bucketEnd, bucketMoveProgress);
Bucket.position = bPos;
if (pillarMoveProgress >= 1 && bucketMoveProgress >= 1)
{
ChangeState(StackerCraneState.MoveEnd);
}
}
private void MoveReady()
{
pillarStart = VerticalPillar.position;
bucketStart = Bucket.position.y;
pillarEnd = VerticalPillar.position;
pillarEnd.x = moveTarget.transform.position.x;
bucketEnd = moveTarget.transform.position.y;
ChangeState(StackerCraneState.Move);
}
private void TaskReady()
{
currentTask = taskQueue.Dequeue();
totalDistance = 0;
ProcessTask(tempPreviousTask, tempCurrentTask);
tempPreviousTask = tempCurrentTask;
foreach (StackerCraneTask task in taskQueue)
for (int i = 0; i < currentTask.actions.Count; i++)
{
tempCurrentTask = task;
ProcessTask(tempPreviousTask, tempCurrentTask);
tempPreviousTask = tempCurrentTask;
if (targetTask == tempCurrentTask)
{
print("소요예정시간 " + (totalDistance - elapsedDistance) / moveSpeed);
break;
}
actionQueue.Enqueue(currentTask.actions[i]);
}
for (int i = 0; i < modifiedCellList.Count; i++)
{
modifiedCellList[i].isLoad = !modifiedCellList[i].isLoad;
}
modifiedCellList.Clear();
ChangeState(StackerCraneState.ActionReady);
}
private bool IsTaskValid(StackerCraneTask targetTask)
private void Idle()
{
int outgoingTaskCount = 0;
bool isLoadOrUnloadComplete = stackerCellIndex != -1;
int loadCountAdjustment = currentTask.taskType == ETaskType.Incoming ? 1 : -1;
foreach (StackerCraneTask task in taskQueue)
if(taskQueue.Count > 0)
{
outgoingTaskCount += task.taskType == ETaskType.Outgoing ? 1 : -1;
int totalLoadCount = GetLoadCellCount() + (isLoadOrUnloadComplete ? 0 : loadCountAdjustment);
if (totalLoadCount < outgoingTaskCount)
{
print("소요예정시간 " + float.MaxValue);
return false;
}
if (task == targetTask)
break;
ChangeState(StackerCraneState.TaskReady);
}
return true;
}
private void ProcessTask(StackerCraneTask previousTask, StackerCraneTask currentTask)
{
List<(Cell, Cell)> pathList = new List<(Cell, Cell)>();
Cell previousEndPos = originPos;
switch (previousTask.taskType)
{
case ETaskType.Incoming:
previousEndPos = stackerCellIndex != -1 ? cellList[stackerCellIndex] : targetStackerCell;
stackerCellIndex = -1;
break;
case ETaskType.Outgoing:
previousEndPos = outCell;
break;
}
switch (currentTask.taskType)
{
case ETaskType.Incoming:
targetStackerCell = GetEmptyCell();
pathList = new List<(Cell, Cell)>
{
(previousEndPos, incomeCell),
(incomeCell, targetStackerCell)
};
targetStackerCell.isLoad = true;
break;
case ETaskType.Outgoing:
targetStackerCell = GetFullCell();
pathList = new List<(Cell, Cell)>
{
(previousEndPos, targetStackerCell),
(targetStackerCell, outCell)
};
targetStackerCell.isLoad = false;
break;
}
modifiedCellList.Add(targetStackerCell);
totalDistance += CalculatePathDistance(pathList) + forkRange * 4;
}
private float CalculatePathDistance(List<(Cell, Cell)> pathList)
{
float distance = 0f;
foreach (var path in pathList)
{
distance += CalculateDistance(path);
}
return distance;
}
private float CalculateDistance((Cell, Cell) value)
{
float xDistance = Mathf.Abs(value.Item1.transform.position.x - value.Item2.transform.position.x);
float yDistance = Mathf.Abs(value.Item1.transform.position.y - value.Item2.transform.position.y);
return Mathf.Max(xDistance, yDistance);
}
internal object Select(Func<object, object> value)
{
throw new NotImplementedException();
}
}
}
}

View File

@@ -0,0 +1,33 @@
namespace XED.VirtualFactory
{
public class StackerCraneAction
{
}
public class StackerCraneMoveToInputAction : StackerCraneAction
{
}
public class StackerCraneMoveToOutputAction : StackerCraneAction
{
}
public class StackerCraneMoveToEmptyCellAction : StackerCraneAction
{
}
public class StackerCraneMoveToFullCellAction : StackerCraneAction
{
}
public class StackerCraneLoadAction: StackerCraneAction
{
}
public class StackerCraneUnloadAction : StackerCraneAction
{
}
public class StackerCraneMoveToHomeAction : StackerCraneAction
{
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 470b868bb22514947aa4b2f92746b46e

View File

@@ -0,0 +1,7 @@
namespace XED.VirtualFactory
{
public class StackerCraneFork: Loader
{
}
}

View File

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

View File

@@ -1,7 +1,6 @@
using System.Diagnostics;
using System.IO;
using XRLib;
using static XED.VirtualFactory.StackerCrane;
namespace XED.VirtualFactory
{
@@ -50,14 +49,15 @@ namespace XED.VirtualFactory
private string DefaultLogForm(StackerCrane sc, string message)
{
logCount++;
long currentTick = stopwatch.ElapsedTicks;
ETaskType currentTask = sc.currentTask.taskType;
EStackeCraneState currentState = sc.stackeCraneState;
int stackerLoadCellCount = sc.GetLoadCellCount();
//logCount++;
//long currentTick = stopwatch.ElapsedTicks;
//ETaskType currentTask = sc.currentTask.taskType;
//StackerCraneState currentState = sc.stackeCraneState;
//int stackerLoadCellCount = sc.GetLoadCellCount();
string log = $"{logCount.ToString("D8")}:message={message}/task={currentTask}/state={currentState}/LoadCellCount={stackerLoadCellCount}[{currentTick.ToString("D16")}]";
return log;
//string log = $"{logCount.ToString("D8")}:message={message}/task={currentTask}/state={currentState}/LoadCellCount={stackerLoadCellCount}[{currentTick.ToString("D16")}]";
//return log;
return "";
}
void OnDisable()

View File

@@ -19,13 +19,14 @@ namespace XED.VirtualFactory
{
bool added = stackerCranes.Add(stackerCrane);
if (added)
{
stackerCrane.onTaskReadyCompletedEvent += stackerCraneLog.TaskReadyLog;
stackerCrane.onTaskEndCompletedEvent += stackerCraneLog.TaskEndLogLog;
stackerCrane.onStateChangeEvent += stackerCraneLog.StateChangeLog;
stackerCrane.onAddTaskCompletedEvent += stackerCraneLog.TaskAddLog;
}
//if (added)
//{
// stackerCrane.onTaskReadyCompletedEvent += stackerCraneLog.TaskReadyLog;
// stackerCrane.onTaskEndCompletedEvent += stackerCraneLog.TaskEndLogLog;
// stackerCrane.onStateChangeEvent += stackerCraneLog.StateChangeLog;
// stackerCrane.onAddTaskCompletedEvent += stackerCraneLog.TaskAddLog;
//}
}
}
}

View File

@@ -6,18 +6,30 @@ namespace XED.VirtualFactory
{
public class StackerCraneTask
{
public ETaskType taskType;
public List<StackerCraneAction> actions = new();
}
public StackerCraneTask(ETaskType taskType)
public class InputTask : StackerCraneTask
{
public InputTask()
{
this.taskType = taskType;
actions.Add(new StackerCraneMoveToInputAction());
actions.Add(new StackerCraneLoadAction());
actions.Add(new StackerCraneMoveToEmptyCellAction());
actions.Add(new StackerCraneUnloadAction());
actions.Add(new StackerCraneMoveToHomeAction());
}
}
public enum ETaskType
public class OutputTask : StackerCraneTask
{
None,
Incoming,
Outgoing,
public OutputTask()
{
actions.Add(new StackerCraneMoveToFullCellAction());
actions.Add(new StackerCraneLoadAction());
actions.Add(new StackerCraneMoveToOutputAction());
actions.Add(new StackerCraneUnloadAction());
actions.Add(new StackerCraneMoveToHomeAction());
}
}
}

View File

@@ -12,6 +12,7 @@ GameObject:
- component: {fileID: 4856276352014148663}
- component: {fileID: 2153441290638738476}
- component: {fileID: 5777722818375630786}
- component: {fileID: 6917507228578421749}
m_Layer: 0
m_Name: OutgoingPos
m_TagString: Untagged
@@ -46,8 +47,17 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7c66d88dac8b35f4d9aeeb44d2d3d955, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
currentLoad: {fileID: 0}
isLoad: 0
load: {fileID: 0}
--- !u!33 &2153441290638738476
MeshFilter:
m_ObjectHideFlags: 0
@@ -101,6 +111,28 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!114 &6917507228578421749
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 166620110472332507}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4fce4835cb2aae74da849f6efffd5997, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
currentLoad: {fileID: 0}
--- !u!1 &305061147023869161
GameObject:
m_ObjectHideFlags: 0
@@ -616,16 +648,27 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 4520bd875396ea544824f64eae4953d2, type: 3}
m_Name:
m_EditorClassIdentifier:
VerticalPillar: {fileID: 0}
Bucket: {fileID: 0}
Fork: {fileID: 0}
incomeCell: {fileID: 0}
originPos: {fileID: 0}
outCell: {fileID: 0}
currentTargetCell: {fileID: 0}
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
Storage: {fileID: 0}
ForkLoadPlaceRoot: {fileID: 0}
_stackeCraneState: 0
VerticlaPillar: {fileID: 0}
Bucket: {fileID: 0}
fork: {fileID: 0}
inputPort: {fileID: 0}
outputPort: {fileID: 0}
currentState: 0
cells: []
autoInput: 0
pillarMoveSpeed: 1
bucketMoveSpeed: 1
moveTarget: {fileID: 0}
--- !u!1 &2609216119150044126
GameObject:
m_ObjectHideFlags: 0
@@ -974,8 +1017,17 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 7c66d88dac8b35f4d9aeeb44d2d3d955, type: 3}
m_Name:
m_EditorClassIdentifier:
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
currentLoad: {fileID: 0}
isLoad: 0
load: {fileID: 0}
--- !u!1 &3689563023103516014
GameObject:
m_ObjectHideFlags: 0
@@ -1281,7 +1333,7 @@ GameObject:
m_Component:
- component: {fileID: 2678014717373080131}
- component: {fileID: 4426401912820879313}
- component: {fileID: 1932890394157396209}
- component: {fileID: 5062054334540688330}
m_Layer: 0
m_Name: InComingPos
m_TagString: Untagged
@@ -1312,7 +1364,7 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5067924305745637229}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!114 &1932890394157396209
--- !u!114 &5062054334540688330
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@@ -1321,11 +1373,19 @@ MonoBehaviour:
m_GameObject: {fileID: 5067924305745637229}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7c66d88dac8b35f4d9aeeb44d2d3d955, type: 3}
m_Script: {fileID: 11500000, guid: 00bad124f10f0e44fab7f4f507ecf764, type: 3}
m_Name:
m_EditorClassIdentifier:
isLoad: 0
load: {fileID: 0}
physics:
areabox: {fileID: 0}
metaData:
address:
modeling: {fileID: 0}
portrait: {fileID: 0}
assetLabel: 0
IsDisplayable: 0
IsInteractible: 0
currentLoad: {fileID: 0}
--- !u!1 &5130920285189644132
GameObject:
m_ObjectHideFlags: 0

View File

@@ -18,42 +18,42 @@ namespace XED.VirtualFactory
void Start()
{
stackerCrane = FindSingle<StackerCrane>();
//stackerCrane = FindSingle<StackerCrane>();
}
void Update()
{
workqueue = stackerCrane.taskQueue;
time += Time.deltaTime;
text_currentWork.text = stackerCrane.currentTask.taskType.ToString();
text_time.text = time.ToString("N2");
text_work.text = "";
foreach (StackerCraneTask task in workqueue)
{
text_work.text += task.taskType + "\n";
}
//workqueue = stackerCrane.taskQueue;
//time += Time.deltaTime;
//text_currentWork.text = stackerCrane.currentTask.taskType.ToString();
//text_time.text = time.ToString("N2");
//text_work.text = "";
//foreach (StackerCraneTask task in workqueue)
//{
// text_work.text += task.taskType + "\n";
//}
for (int i = 0; i <= 9; i++)
{
if (Input.GetKeyDown((KeyCode)Enum.Parse(typeof(KeyCode), "Alpha" + i)))
{
if (i > workqueue.Count)
{
Debug.LogWarning("Á¸ÀçÇÏÁö ¾Ê´Â taskÀÔ´Ï´Ù.");
return;
}
//for (int i = 0; i <= 9; i++)
//{
// if (Input.GetKeyDown((KeyCode)Enum.Parse(typeof(KeyCode), "Alpha" + i)))
// {
// if (i > workqueue.Count)
// {
// Debug.LogWarning("Á¸ÀçÇÏÁö ¾Ê´Â taskÀÔ´Ï´Ù.");
// return;
// }
int currentIndex = 0;
foreach (StackerCraneTask work in workqueue)
{
currentIndex++;
if (currentIndex == i)
{
stackerCrane.PredictWorkEndTime(work);
}
}
}
}
// int currentIndex = 0;
// foreach (StackerCraneTask work in workqueue)
// {
// currentIndex++;
// if (currentIndex == i)
// {
// stackerCrane.PredictWorkEndTime(work);
// }
// }
// }
//}
}
}
}

View File

@@ -1,74 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using XRLib;
namespace XED.VirtualFactory
{
public class WorkController : MonoBehaviour, ISingle
{
StackerCrane stackerCrane;
[SerializeField]
private Load loadPrefab;
public override void AfterAwake()
{
stackerCrane = FindSingle<StackerCrane>();
stackerCrane.onLoadCompletedEvent += ReArrangeCargo;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.C))
{
SpawnCargo();
}
if (Input.GetKeyDown(KeyCode.I))
{
stackerCrane.AddTask(new StackerCraneTask(ETaskType.Incoming));
}
if (Input.GetKeyDown(KeyCode.O))
{
stackerCrane.AddTask(new StackerCraneTask(ETaskType.Outgoing));
}
if (stackerCrane.incomeCell.load == null)
{
if(readyCargos.Count == 0)
return;
readyCargos.RemoveAt(0);
if (readyCargos.Count == 0)
return;
var cargo = readyCargos.First();
stackerCrane.incomeCell.load = cargo;
}
}
List<Load> readyCargos = new();
int index = 0;
private void SpawnCargo()
{
Load cargo = Instantiate(loadPrefab);
cargo.name = index.ToString();
index++;
cargo.transform.parent = stackerCrane.incomeCell.transform;
cargo.transform.localPosition = new Vector3(0f, stackerCrane.incomeCell.transform.childCount - 0.5f, 0f);
if (stackerCrane.incomeCell.load == null)
stackerCrane.incomeCell.load = cargo;
readyCargos.Add(cargo);
}
public void ReArrangeCargo(StackerCrane sc)
{
for (int i = 0; i < stackerCrane.incomeCell.transform.childCount; i++)
{
stackerCrane.incomeCell.transform.GetChild(i).transform.localPosition = new Vector3(0f, i + 0.5f, 0f);
}
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 7f04208229125ce4f9ef15b712a31bd7

View File

@@ -70,10 +70,10 @@ namespace XED.Manage
agvNodeManager.onNodeDeselected += nodeGizmoController.Detach;
agvNodeManager.onNodeSettingSelected += canvas_Popup.agvnodepopup.Popup;
agvNodeManager.onNodeDeselected += canvas_Popup.agvnodepopup.Popdown;
agvNodeManager.onNodeSequenceOrdered += agvManager.ordertoAGV;
//agvNodeManager.onNodeSequenceOrdered += agvManager.ordertoAGV;
agvNodeManager.onNodeSequenceUpdated += canvas_Popup.agvnodemodepopup.UpdateTextSelectedAGVNode;
agvManager.onOrderStarted += agvNodeLinkManager.AddLines;
//agvManager.onOrderStarted += agvNodeLinkManager.AddLines;
}
void UIConnection()

View File

@@ -1,3 +1,4 @@
using Newtonsoft.Json;
using UnityEngine;
using XED.Attributes;
using XED.VirtualFactory;
@@ -52,5 +53,10 @@ namespace XED
public virtual void MaterialChange(Material mat)
{
}
public virtual string ToJson()
{
return JsonConvert.SerializeObject(entity);
}
}
}

View File

@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using XED.VirtualFactory;
namespace XED
@@ -9,41 +11,164 @@ namespace XED
public List<StackerCrane> stackerCranes = new();
public AGVManager agvManager;
public AGVMap agvMap;
public List<Load> loads = new();
public Load prf_Load;
public PortMap portMap;
public List<Product> loads = new();
public Product prf_Load;
public AGVNode startNode;
public bool stackerHasEmptyCell;
public int maxAGVCount = 4;
public enum FactoryNeeds
{
NeedAGV,
NeedLoad,
NeedStackerInputLoad,
NeedStackerInput,
}
public bool agvIsLack;
public bool loadIsLack;
public List<FactoryNeeds> needs = new();
public event Action scanningAction;
public event Action solutionAction;
public override void AfterAwake()
{
agvMap = FindSingle<AGVMap>();
portMap = FindSingle<PortMap>();
agvManager = FindSingle<AGVManager>();
stackerCranes = FindObjectsByType<StackerCrane>(UnityEngine.FindObjectsSortMode.None).ToList();
FactoryStatusCheck();
scanningAction += CheckAGVCount;
scanningAction += CheckStackerSpace;
scanningAction += CheckStackerInput;
}
void FactoryStatusCheck()
private void CheckStackerInput()
{
if (loads.Count == 0)
foreach (var stacker in stackerCranes)
{
if(agvMap.GetEmptyNode(AGVNodeType.Load, out var node))
if (!stacker.hasEmptyCell)
continue;
if (stacker.inputPort.isEmpty)
{
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));
Debug.Log("Need Stacker Input Load");
needs.Add(FactoryNeeds.NeedStackerInputLoad);
return;
}
Debug.Log($"Need Stacker Input");
needs.Add(FactoryNeeds.NeedStackerInput);
return;
}
}
private void Update()
{
ScanningVirtualFactory();
Solutioning();
}
void ScanningVirtualFactory()
{
scanningAction?.Invoke();
}
void Solutioning()
{
foreach(var n in needs)
{
switch (n)
{
case FactoryNeeds.NeedAGV:
solutionAction += GenerateAGV;
break;
case FactoryNeeds.NeedLoad:
solutionAction += GenerateLoad;
break;
case FactoryNeeds.NeedStackerInputLoad:
solutionAction += DeliveryStackerInputLoad;
break;
}
}
solutionAction?.Invoke();
solutionAction = null;
needs.Clear();
}
private void DeliveryStackerInputLoad()
{
if (!agvManager.TryGetIdleAGV(out var agvWorker))
{
return;
}
if(!portMap.TryGetFullGeneratePort(out var generatePort))
{
return;
}
if(!agvMap.TryGetEmptyInputPortNode(out var inputPortNode))
{
return;
}
var startNode = agvWorker.currentNode;
var generateNode = generatePort.GetComponent<AGVNode>();
var getLoadPath = agvMap.FindPath(startNode, generateNode);
var inputLoadPath = agvMap.FindPath(generateNode, inputPortNode);
agvWorker.AddAction(new AGVMoveAction(getLoadPath));
agvWorker.AddAction(new AGVLoadAction(generatePort));
agvWorker.AddAction(new AGVMoveAction(inputLoadPath));
agvWorker.AddAction(new AGVUnloadAction(inputPortNode.loader));
}
private void GenerateLoad()
{
if(portMap.TryGetEmptyGeneratePort(out var port))
{
Debug.Log($"GenerateLoad");
var newLoad = Instantiate(prf_Load);
port.Load(newLoad);
loads.Add(newLoad);
}
}
private void GenerateAGV()
{
Debug.Log($"GenerateAGV");
var newAGV = agvManager.CreateEmptyAGV();
newAGV.ForceSet(startNode);
}
void CheckStackerSpace()
{
if (stackerCranes.Sum(sc => sc.cells.Count()) == loads.Count)
return;
foreach (var stacker in stackerCranes)
{
if (stacker.hasEmptyCell)
{
Debug.Log($"Need Stacker Load");
needs.Add(FactoryNeeds.NeedLoad);
return;
}
}
}
Load CreateEmptyLoad()
void CheckAGVCount()
{
var load = Instantiate(prf_Load);
loads.Add(load);
load.entity = new LoadEntity();
load.entity.id = loads.Count.ToString();
return load;
Debug.Log($"CheckAGVCount");
if (maxAGVCount > agvManager.agvs.Count)
{
needs.Add(FactoryNeeds.NeedAGV);
}
else
{
scanningAction -= CheckAGVCount;
}
}
}
}