Merge branch 'main' into pgd/20250527
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Studio.UI;
|
||||
using Studio.Manage;
|
||||
@@ -38,8 +38,7 @@ namespace Studio.AssetTool
|
||||
{
|
||||
//interferedObjectManager = ManagerHub.instance.Get<InterferedObjectManager>();
|
||||
renderObjectPrefab = Resources.Load<GameObject>("Prefabs/PRF_RenderObject");
|
||||
|
||||
sceneDataContainer= GameObject.FindAnyObjectByType<SceneDataContainer>();
|
||||
sceneDataContainer = GameObject.FindAnyObjectByType<SceneDataContainer>();
|
||||
assetScrollRect = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_assetlibrary.scrollRect;
|
||||
assetScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_assetlibrary.scrollView;
|
||||
componentScrollView = EventConnector.instance.GetCanvas<Canvas_Popup>().panel_hierarchy.scrollView;
|
||||
@@ -118,6 +117,7 @@ namespace Studio.AssetTool
|
||||
}
|
||||
yield return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public GameObject CreateAsset(string name)
|
||||
@@ -131,6 +131,34 @@ namespace Studio.AssetTool
|
||||
}
|
||||
|
||||
|
||||
private void OnLoadAssetSelected(AssetLibraryItem item, AssetData asset)
|
||||
{
|
||||
if (item == null || item.linkedObject == null)
|
||||
{
|
||||
selectedAssetData = null;
|
||||
return;
|
||||
}
|
||||
selectedAssetData = item.linkedObject.GetComponent<CustomAssetData>();
|
||||
if (selectedAssetData == null || selectedAssetData.isLoadComplete == false)
|
||||
{
|
||||
selectedAssetData = null;
|
||||
return;
|
||||
}
|
||||
selectedItem = UnityEngine.GameObject.Instantiate(renderObjectPrefab);
|
||||
selectRenderObject = selectedItem.GetComponent<CustomAssetRenderObject>();
|
||||
selectRenderObject.OnSelected += panel_ObjectDistance.SelectObjectFromCreate;
|
||||
selectRenderObject.instantiateObject = selectedAssetData.InstantiateLoadedObject;
|
||||
selectRenderObject.getBounds = selectedAssetData.GetCombinedBoundary;
|
||||
selectRenderObject.CreateRenderObject();
|
||||
selectRenderObject.Select();
|
||||
selectedAssetData.AddTransformToRender(selectedItem.transform);
|
||||
CoroutineRunner.instance.StartCoroutine(ChangeSelectedAssetTransform());
|
||||
|
||||
selectRenderObject.transform.position = new Vector3(asset.position.x, asset.position.y, asset.position.z);
|
||||
selectRenderObject.transform.eulerAngles = new Vector3(asset.rotation.x, asset.rotation.y, asset.rotation.z);
|
||||
selectRenderObject.transform.localScale = new Vector3(asset.scale.x, asset.scale.y, asset.scale.z);
|
||||
}
|
||||
|
||||
public void OnAssetSelected(AssetLibraryItem item)
|
||||
{
|
||||
if (item == null || item.linkedObject == null)
|
||||
@@ -157,6 +185,7 @@ namespace Studio.AssetTool
|
||||
selectedAssetData.AddTransformToRender(selectedItem.transform);
|
||||
CoroutineRunner.instance.StartCoroutine(ChangeSelectedAssetTransform());
|
||||
}
|
||||
|
||||
public void OnAssetDropped(AssetLibraryItem item)
|
||||
{
|
||||
if (selectedAssetData == null)
|
||||
@@ -203,10 +232,7 @@ namespace Studio.AssetTool
|
||||
public void OnLoadAsset(AssetData asset)
|
||||
{
|
||||
AssetLibraryItem item = assetScrollView.FindItem(asset.name, AssetLibraryItemType.file);
|
||||
OnAssetSelected(item);
|
||||
selectRenderObject.transform.position = new Vector3(asset.position.x, asset.position.y, asset.position.z);
|
||||
selectRenderObject.transform.eulerAngles = new Vector3(asset.rotation.x, asset.rotation.y, asset.rotation.z);
|
||||
selectRenderObject.transform.localScale = new Vector3(asset.scale.x, asset.scale.y, asset.scale.z);
|
||||
OnLoadAssetSelected(item, asset);
|
||||
OnAssetDropped(item);
|
||||
}
|
||||
|
||||
@@ -220,9 +246,11 @@ namespace Studio.AssetTool
|
||||
public void OnDeselectAll()
|
||||
{
|
||||
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
canvas_Popup.panel_objectinfo.gameObject.SetActive(false);
|
||||
|
||||
canvas_Popup.panel_agv.gameObject.SetActive(false);
|
||||
canvas_Popup.panel_dynamicobjectinfo.gameObject.SetActive(false);
|
||||
componentScrollView.DeselectAll();
|
||||
canvas_Popup.panel_objectdistance.SetSelecetedObjectToNull();
|
||||
}
|
||||
|
||||
public void OrderByHierarchy(List<CustomAssetRenderObject> objectsToOrder)
|
||||
@@ -253,8 +281,8 @@ namespace Studio.AssetTool
|
||||
internal void OnSelectObjects(string name, List<GameObject> selectedObjects)
|
||||
{
|
||||
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
canvas_Popup.panel_objectinfo.SetObjectInfo(name, selectedObjects);
|
||||
canvas_Popup.panel_objectinfo.SetActive(true);
|
||||
canvas_Popup.panel_dynamicobjectinfo.SetObjectInfo(name, selectedObjects);
|
||||
canvas_Popup.panel_dynamicobjectinfo.SetActive(true);
|
||||
canvas_Popup.panel_agv.SetTarget(selectedObjects);
|
||||
canvas_Popup.panel_objectdistance.SelectObjectFromClick(name, selectedObjects);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.Contracts;
|
||||
using System.Linq;
|
||||
@@ -29,10 +29,15 @@ namespace Studio.AssetTool
|
||||
|
||||
LayerMask twinObjectMask;
|
||||
|
||||
public GameObject RenderObject { get { return renderObject; } }
|
||||
public event Action<TwinObject, TwinObject> OnOverlabBegin;
|
||||
public event Action<TwinObject, TwinObject> OnOverlabEnd;
|
||||
public event Action<CustomAssetRenderObject> OnSelected;
|
||||
|
||||
public string componetKey;
|
||||
public string addTopic;
|
||||
public bool isAutoId;
|
||||
public string ID;
|
||||
private void Awake()
|
||||
{
|
||||
objectRenderer = GetComponentInChildren<MeshRenderer>();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System.IO;
|
||||
using UnityEngine.Events;
|
||||
@@ -33,6 +33,9 @@ namespace Studio.AssetTool
|
||||
public Transform fbxAnchor;
|
||||
public Action onLoadComplete;
|
||||
|
||||
private List<string> filePaths = new List<string>();
|
||||
private int loadingCount;
|
||||
|
||||
public FBXFileManager()
|
||||
{
|
||||
dataRepo = new CustomAssetDataRepository();
|
||||
@@ -40,7 +43,6 @@ namespace Studio.AssetTool
|
||||
sharedMaterial = new SharedMaterial();
|
||||
messagePacker = new MessagePackFileManager<SaveData>();
|
||||
messagePacker.Initialize();
|
||||
|
||||
identifier = string.IsNullOrEmpty(identifier) ? "defaultAssetData" : identifier;
|
||||
fbxAnchor = new GameObject("LocalAssetDataAnchor").transform;
|
||||
}
|
||||
@@ -49,32 +51,51 @@ namespace Studio.AssetTool
|
||||
|
||||
}
|
||||
|
||||
public void LoadLocalFBXDirectorys(List<string> folderPaths)
|
||||
{
|
||||
loadingCount = folderPaths.Count;
|
||||
|
||||
foreach (var path in folderPaths)
|
||||
{
|
||||
LoadLocalFBXDirectory(path);
|
||||
}
|
||||
CoroutineRunner.instance.StartCoroutine(LoadAssetFiles(filePaths, OnDirectoryLoadComplete));
|
||||
}
|
||||
|
||||
public void LoadLocalFBXDirectory(string folderPath)
|
||||
{
|
||||
List<string> filePaths = new List<string>();
|
||||
var path = folderPath;
|
||||
|
||||
var files = Directory.GetFiles(path, "*.fbx", SearchOption.AllDirectories);
|
||||
|
||||
if (dataRepo.TryGetDataFromPath(path, out var p))
|
||||
return;
|
||||
var files = Directory.GetFiles(folderPath, "*.fbx", SearchOption.AllDirectories);
|
||||
|
||||
foreach (var file in files)
|
||||
{
|
||||
filePaths.Add(file);
|
||||
if (filePaths.Contains(NormalizePath(file)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
filePaths.Add(NormalizePath(file));
|
||||
}
|
||||
|
||||
CoroutineRunner.instance.StartCoroutine(LoadAssetFiles(filePaths));
|
||||
}
|
||||
string NormalizePath(string path)
|
||||
{
|
||||
return path.Replace("\\", "/"); // 또는 ToUpperInvariant(), OS에 따라
|
||||
}
|
||||
|
||||
IEnumerator LoadAssetFiles(List<string> filePaths)
|
||||
private void OnDirectoryLoadComplete()
|
||||
{
|
||||
foreach(var file in filePaths)
|
||||
onLoadComplete?.Invoke();
|
||||
}
|
||||
|
||||
private IEnumerator LoadAssetFiles(List<string> filePaths, Action onComplete)
|
||||
{
|
||||
foreach (var file in filePaths)
|
||||
{
|
||||
var assetName = Path.GetFileNameWithoutExtension(file);
|
||||
var directoryPath = Path.GetDirectoryName(file);
|
||||
var folderName = Path.GetFileName(directoryPath);
|
||||
|
||||
if (dataRepo.TryGetDataFromName(assetName, out var p))
|
||||
continue;
|
||||
|
||||
GameObject newObject = new GameObject(assetName);
|
||||
newObject.transform.parent = fbxAnchor;
|
||||
CustomAssetData assetData = newObject.AddComponent<CustomAssetData>();
|
||||
@@ -82,7 +103,9 @@ namespace Studio.AssetTool
|
||||
assetData.folderName = folderName;
|
||||
|
||||
assetData.LoadLocalFBX(file);
|
||||
yield return new WaitUntil(() => (assetData.isLoadComplete == true && assetData.progress == 1) || assetData.isLoadError == true);
|
||||
yield return new WaitUntil(() => (assetData.isLoadComplete && assetData.progress == 1) || assetData.isLoadError);
|
||||
|
||||
assetData.OnLoadComplete();
|
||||
|
||||
Texture2D thumbnail = RuntimePreviewGenerator.GenerateModelPreview(assetData.loadedObject.transform, 320, 200);
|
||||
thumbnail = TextureUtil.MakeReadableTexture(thumbnail);
|
||||
@@ -90,6 +113,8 @@ namespace Studio.AssetTool
|
||||
|
||||
OnLoadComplete(assetData);
|
||||
}
|
||||
|
||||
onComplete?.Invoke(); // 한 폴더 끝나면 알림
|
||||
}
|
||||
|
||||
public void SaveToLocalData(List<CustomAssetData> assetDatas, string path = "")
|
||||
@@ -215,6 +240,7 @@ namespace Studio.AssetTool
|
||||
assetData.loadedObject = modelData.LoadModelData(sharedMaterial);
|
||||
assetData.thumbnail = thumbnail;
|
||||
|
||||
assetData.OnLoadComplete();
|
||||
OnLoadComplete(assetData);
|
||||
|
||||
//assetData.onLoadProgress.RemoveAllListeners();
|
||||
@@ -223,7 +249,6 @@ namespace Studio.AssetTool
|
||||
|
||||
void OnLoadComplete(CustomAssetData assetData)
|
||||
{
|
||||
assetData.OnLoadComplete();
|
||||
string folderName = assetData.folderName;
|
||||
dataRepo.Add(assetData);
|
||||
//listAssets.Add(assetData);
|
||||
@@ -232,7 +257,6 @@ namespace Studio.AssetTool
|
||||
connector.assetScrollView.AddItem(folderName, null, AssetLibraryItemType.folder);
|
||||
|
||||
AssetLibraryItem item = connector.assetScrollView.AddItem(assetData.assetName, assetData.gameObject, AssetLibraryItemType.file, urlSectionItem);
|
||||
onLoadComplete?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEditor;
|
||||
@@ -47,7 +47,7 @@ namespace Studio.AssetTool
|
||||
private void OnMousePointerDown()
|
||||
{
|
||||
clickBeginPos = Input.mousePosition;
|
||||
//ui를 선택했을 경우에는 오브젝트 선택을 멈춘다.
|
||||
//ui를 선택했을 경우에는 오브젝트 선택을 멈춘다.
|
||||
PointerEventData pointerData = new PointerEventData(EventSystem.current)
|
||||
{
|
||||
position = Input.mousePosition
|
||||
@@ -62,14 +62,14 @@ namespace Studio.AssetTool
|
||||
}
|
||||
private void OnMousePointerUp()
|
||||
{
|
||||
//rtg 컨트롤러가 조작중일때 락을 건다.
|
||||
//rtg 컨트롤러 조작 후 포커스가 바뀌는 것을 방지하기 위한 용도
|
||||
//rtg 컨트롤러가 조작중일때 락을 건다.
|
||||
//rtg 컨트롤러 조작 후 포커스가 바뀌는 것을 방지하기 위한 용도
|
||||
if (lockHandler == true)
|
||||
{
|
||||
lockHandler = false;
|
||||
return;
|
||||
}
|
||||
//ui를 선택했을 경우에는 오브젝트 선택을 멈춘다.
|
||||
//ui를 선택했을 경우에는 오브젝트 선택을 멈춘다.
|
||||
PointerEventData pointerData = new PointerEventData(EventSystem.current)
|
||||
{
|
||||
position = Input.mousePosition
|
||||
@@ -81,7 +81,7 @@ namespace Studio.AssetTool
|
||||
EventConnector.instance.GetCanvas<Canvas_DragArea>().panel_draghandler.ForceEndDrag();
|
||||
return;
|
||||
}
|
||||
//포인터 업 위치가 포인터 다운 위치에서 크게 벗어났을 경우는 클릭을 무시한다.
|
||||
//포인터 업 위치가 포인터 다운 위치에서 크게 벗어났을 경우는 클릭을 무시한다.
|
||||
if ((clickBeginPos - Input.mousePosition).magnitude > clickLengthThreshold)
|
||||
{
|
||||
DeselectAll();
|
||||
@@ -100,7 +100,7 @@ namespace Studio.AssetTool
|
||||
}
|
||||
if (raycastedTarget.Count > 0)
|
||||
{
|
||||
//오브젝트가 여러개 겹쳐 있을 경우 뒤의 오브젝트를 순차적으로 선택해주기 위한 용도
|
||||
//오브젝트가 여러개 겹쳐 있을 경우 뒤의 오브젝트를 순차적으로 선택해주기 위한 용도
|
||||
if (selectIndex < raycastedTarget.Count && prevSelectedObject == raycastedTarget[selectIndex])
|
||||
{
|
||||
selectIndex++;
|
||||
@@ -110,7 +110,7 @@ namespace Studio.AssetTool
|
||||
selectIndex = 0;
|
||||
}
|
||||
renderObject = raycastedTarget[selectIndex];
|
||||
//컨트롤이 눌려 있으면 오브젝트 선택을 토글한다. (유니티 기능과 일치)
|
||||
//컨트롤이 눌려 있으면 오브젝트 선택을 토글한다. (유니티 기능과 일치)
|
||||
if (Input.GetKey(KeyCode.LeftControl))
|
||||
{
|
||||
if (renderObject.ToggleSelect())
|
||||
@@ -122,12 +122,12 @@ namespace Studio.AssetTool
|
||||
RemoveSelection(renderObject);
|
||||
}
|
||||
}
|
||||
//시프트 키가 눌려 있는 경우 다중 선택 기능으로 작용한다.
|
||||
//시프트 키가 눌려 있는 경우 다중 선택 기능으로 작용한다.
|
||||
else if (Input.GetKey(KeyCode.LeftShift))
|
||||
{
|
||||
AddSelection(renderObject);
|
||||
}
|
||||
//그 외는 선택된 아이템을 제외하고 다 비선택해준다.
|
||||
//그 외는 선택된 아이템을 제외하고 다 비선택해준다.
|
||||
else
|
||||
{
|
||||
RemoveAllSelections();
|
||||
@@ -153,7 +153,7 @@ namespace Studio.AssetTool
|
||||
RemoveAllSelections();
|
||||
|
||||
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
canvas_Popup.panel_objectinfo.ResetObjectInfo();
|
||||
canvas_Popup.panel_dynamicobjectinfo.ResetObjectInfo();
|
||||
|
||||
ManagerHub.instance.Get<CustomAssetConnector>().OnDeselectAll();
|
||||
}
|
||||
@@ -232,7 +232,7 @@ namespace Studio.AssetTool
|
||||
public void OnTransformChangedFromRTG(List<GameObject> transformObjects)
|
||||
{
|
||||
OnTransformChanged(transformObjects);
|
||||
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectinfo.OnTransformChanged(transformObjects);
|
||||
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_dynamicobjectinfo.OnTransformChanged(transformObjects);
|
||||
EventConnector.instance.GetCanvas<Canvas_DragArea>().panel_draghandler.ForceEndDrag();
|
||||
}
|
||||
public void OnTransformChanged(List<GameObject> transformObjects)
|
||||
@@ -304,7 +304,7 @@ namespace Studio.AssetTool
|
||||
renderObject.onTransformChanged?.Invoke();
|
||||
}
|
||||
|
||||
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectinfo.OnTransformChanged(objectsToAlign.Select(renderObject => renderObject.gameObject).ToList());
|
||||
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_dynamicobjectinfo.OnTransformChanged(objectsToAlign.Select(renderObject => renderObject.gameObject).ToList());
|
||||
}
|
||||
|
||||
private void UndoAlign(List<CustomAssetRenderObject> objectsToAlign, List<Vector3> originalPos)
|
||||
@@ -315,7 +315,7 @@ namespace Studio.AssetTool
|
||||
renderObject.transform.position = originalPos[i];
|
||||
renderObject.onTransformChanged?.Invoke();
|
||||
}
|
||||
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectinfo.OnTransformChanged(objectsToAlign.Select(renderObject => renderObject.gameObject).ToList());
|
||||
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_dynamicobjectinfo.OnTransformChanged(objectsToAlign.Select(renderObject => renderObject.gameObject).ToList());
|
||||
}
|
||||
public void VertexSnap()
|
||||
{
|
||||
@@ -323,9 +323,9 @@ namespace Studio.AssetTool
|
||||
{
|
||||
return;
|
||||
}
|
||||
//가장 가까운 오브젝트에 붙여준다.
|
||||
//Transform.position이 가깝다고 오브젝트 사이 기리가 꼭 가장 가까운 것은 아니기 때문에
|
||||
//오버랩 박스에 충돌되는 모든 오브젝트의 버텍스로 KDTree를 구성해 볼까 하다가 관두었다.
|
||||
//가장 가까운 오브젝트에 붙여준다.
|
||||
//Transform.position이 가깝다고 오브젝트 사이 기리가 꼭 가장 가까운 것은 아니기 때문에
|
||||
//오버랩 박스에 충돌되는 모든 오브젝트의 버텍스로 KDTree를 구성해 볼까 하다가 관두었다.
|
||||
float minDist = float.MaxValue;
|
||||
CustomAssetRenderObject fromObject = selectedRenderObjects[0];
|
||||
CustomAssetRenderObject toObject = null;
|
||||
@@ -347,9 +347,9 @@ namespace Studio.AssetTool
|
||||
}
|
||||
if (toObject != null)
|
||||
{
|
||||
//선택된 오브젝트의 ConvexHull 버텍스 점을 계산해준다.
|
||||
//이는 iteration하는 버텍스 수를 줄이기 위해 해주며,
|
||||
//만약 선택된 오브젝트도 TDTree로 Nearest 포인트 탐지할 경우 toObject의 센터에 가장 가까운 포인트만 탐지되기 때문에 가장 가까운 버텍스 점이 골라지지 않는 경우가 있다.
|
||||
//선택된 오브젝트의 ConvexHull 버텍스 점을 계산해준다.
|
||||
//이는 iteration하는 버텍스 수를 줄이기 위해 해주며,
|
||||
//만약 선택된 오브젝트도 TDTree로 Nearest 포인트 탐지할 경우 toObject의 센터에 가장 가까운 포인트만 탐지되기 때문에 가장 가까운 버텍스 점이 골라지지 않는 경우가 있다.
|
||||
List<Vector3> verts = new List<Vector3>();
|
||||
List<int> tris = new List<int>();
|
||||
List<Vector3> normals = new List<Vector3>();
|
||||
|
||||
@@ -16,7 +16,9 @@ namespace Studio
|
||||
{
|
||||
var assetManager = ManagerHub.instance.Get<AssetManager>();
|
||||
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
assetManager.LoadLocalFBXDirectorys(canvas_Popup.panel_assetmanager.GetAssetManagerData().localAssetsPaths);
|
||||
assetManager.CombineAssetFolderPaths(canvas_Popup.panel_assetmanager.GetAssetManagerData().localAssetsPaths);
|
||||
assetManager.CombineAssetFolderPaths(canvas_Popup.panel_assetsetting.GetAssetManagerData().localAssetsPaths);
|
||||
assetManager.LoadLocalFBXDirectorys();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Studio.AssetTool;
|
||||
using Studio.HierarchyTree;
|
||||
@@ -138,7 +138,7 @@ namespace Studio.Command
|
||||
}
|
||||
ManagerHub.instance.Get<RenderObjectHandler>().DeselectAll();
|
||||
var canvas = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
canvas.panel_objectinfo.ResetObjectInfo();
|
||||
canvas.panel_dynamicobjectinfo.ResetObjectInfo();
|
||||
//connector.onRemoveObjects?.Invoke();
|
||||
connector.componentScrollView.DeselectAll();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using Studio.AssetTool;
|
||||
@@ -60,9 +60,9 @@ namespace Studio
|
||||
//connector.onRemoveObjects?.Invoke();
|
||||
ManagerHub.instance.Get<RenderObjectHandler>().DeselectAll();
|
||||
var canvas = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
canvas.panel_objectinfo.ResetObjectInfo();
|
||||
canvas.panel_dynamicobjectinfo.ResetObjectInfo();
|
||||
connector.componentScrollView.DeselectAll();
|
||||
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_objectinfo.ResetObjectInfo();
|
||||
EventConnector.instance.GetCanvas<Canvas_Popup>().panel_dynamicobjectinfo.ResetObjectInfo();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using Studio.AssetTool;
|
||||
using Studio.HierarchyTree;
|
||||
using Studio.Manage;
|
||||
@@ -60,7 +60,7 @@ namespace Studio.Command
|
||||
renderObjectHandler.DeselectAll();
|
||||
connector.componentScrollView.DeselectAll();
|
||||
var canvas = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
canvas.panel_objectinfo.ResetObjectInfo();
|
||||
canvas.panel_dynamicobjectinfo.ResetObjectInfo();
|
||||
}
|
||||
|
||||
public void Undo()
|
||||
|
||||
@@ -25,5 +25,15 @@ namespace Studio.Conifg
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public static Dictionary<string,CustomAssetData> AssetSettings
|
||||
{
|
||||
get
|
||||
{
|
||||
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
var result = canvas_Popup.panel_3dfactorysetting.GetAssetDatas();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,6 +191,8 @@ namespace Studio
|
||||
}
|
||||
public void RemoveTypeIdListener(string type,string id)
|
||||
{
|
||||
if (!listenerIdMap.ContainsKey(type))
|
||||
return;
|
||||
if (!listenerIdMap[type].ContainsKey(id))
|
||||
return;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using TriLibCore;
|
||||
@@ -28,6 +28,7 @@ namespace Studio.Util
|
||||
public Texture2D thumbnail;
|
||||
public List<Transform> drawTransforms = new List<Transform>();
|
||||
public UnityEvent<float> onLoadProgress = new UnityEvent<float>();
|
||||
|
||||
|
||||
private AssetLoaderOptions assetLoaderOptions;
|
||||
private MatrixConverter matrixConverter;
|
||||
@@ -123,6 +124,9 @@ namespace Studio.Util
|
||||
}
|
||||
}
|
||||
mat.enableInstancing = true;
|
||||
var color = mat.color;
|
||||
color.a = 1f;
|
||||
mat.color = color;
|
||||
materials.Add(mat);
|
||||
}
|
||||
renderer.sharedMaterials = materials.ToArray();
|
||||
|
||||
@@ -13,14 +13,14 @@ namespace Studio
|
||||
{
|
||||
public class AssetManager : Manager
|
||||
{
|
||||
private List<string> folderPath = new List<string>();
|
||||
private List<string> folderPathList = new List<string>();
|
||||
private Dictionary<int, HierarchyItem> itemDict = new Dictionary<int, HierarchyItem>();
|
||||
|
||||
public Action<AssetManagerData> onAssetManagerDatas;
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
folderPath.Clear();
|
||||
folderPathList.Clear();
|
||||
|
||||
var canvas_Popup = EventConnector.instance.GetCanvas<Canvas_Popup>();
|
||||
var fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
|
||||
@@ -30,23 +30,30 @@ namespace Studio
|
||||
|
||||
fbxFileManager.onLoadComplete += OnLoadCustomAsset;
|
||||
onAssetManagerDatas += canvas_Popup.panel_assetmanager.SetAssetManager;
|
||||
onAssetManagerDatas += canvas_Popup.panel_assetsetting.SetAssetManager;
|
||||
onAssetManagerDatas += (data) => projectManager.OpenProjectSettingsDataAfterDataLoad();
|
||||
|
||||
}
|
||||
public void LoadLocalFBXDirectorys(List<string> folderPaths)
|
||||
public void CombineAssetFolderPaths(List<string> folderPaths)
|
||||
{
|
||||
folderPath.Clear();
|
||||
|
||||
var fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
|
||||
|
||||
foreach(var path in folderPaths)
|
||||
foreach(var folderPath in folderPaths)
|
||||
{
|
||||
if (folderPath.Contains(path))
|
||||
if (folderPathList.Contains(folderPath))
|
||||
{
|
||||
continue;
|
||||
|
||||
fbxFileManager.LoadLocalFBXDirectory(path);
|
||||
folderPath.Add(path);
|
||||
}
|
||||
folderPathList.Add(folderPath);
|
||||
}
|
||||
}
|
||||
public void LoadLocalFBXDirectorys()
|
||||
{
|
||||
var fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
|
||||
fbxFileManager.LoadLocalFBXDirectorys(folderPathList);
|
||||
|
||||
var assetManagerData = new AssetManagerData();
|
||||
assetManagerData.localAssetsPaths.AddRange(folderPathList);
|
||||
onAssetManagerDatas?.Invoke(assetManagerData);
|
||||
}
|
||||
|
||||
private void OnLoadCustomAsset()
|
||||
{
|
||||
@@ -80,13 +87,12 @@ namespace Studio
|
||||
{
|
||||
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
|
||||
connector.OnLoadAsset(asset);
|
||||
|
||||
itemDict.Add(asset.id, connector.connectedAssets.Last().hierarchyItem);
|
||||
}
|
||||
|
||||
private void RestoreHierarchy(AssetData asset)
|
||||
{
|
||||
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
|
||||
itemDict.TryAdd(asset.id, connector.connectedAssets.Last().hierarchyItem);
|
||||
|
||||
foreach (int id in asset.children)
|
||||
{
|
||||
|
||||
@@ -38,6 +38,7 @@ namespace Studio.Manage
|
||||
canvas_popup.panel_startsetting.onClickAPISetting += canvas_popup.panel_apisetting.Active;
|
||||
canvas_popup.panel_startsetting.onClickMQTTSetting += canvas_popup.panel_mqttsetting.Active;
|
||||
canvas_popup.panel_startsetting.onClick3DFactorySetting += canvas_popup.panel_3dfactorysetting.Active;
|
||||
canvas_popup.panel_startsetting.onClickAssetSetting += canvas_popup.panel_assetsetting.Active;
|
||||
|
||||
canvas_popup.panel_datafiltersetting.onSaveMQTTFilterData += canvas_popup.panel_mqttconnectmodal.SetFilterData;
|
||||
canvas_popup.panel_datafiltersetting.onSaveAPIFilterData += canvas_popup.panel_apiconnectmodal.SetFilterData;
|
||||
|
||||
@@ -29,16 +29,17 @@ namespace Studio.Manage
|
||||
private void ResetProjectSettingData()
|
||||
{
|
||||
connector = ManagerHub.instance.Get<CustomAssetConnector>();
|
||||
var fbxFileManager = ManagerHub.instance.Get<FBXFileManager>();
|
||||
var assetManager = ManagerHub.instance.Get<AssetManager>();
|
||||
var sceneSettingService = ManagerHub.instance.Get<SceneStartSettingService>();
|
||||
|
||||
var sceneStartSetting = new SceneStartSetting();
|
||||
sceneSettingService.SetSceneStartSetting(sceneStartSetting);
|
||||
|
||||
foreach (var customAssetData in connector.connectedAssets)
|
||||
foreach (var customAssetData in fbxFileManager.dataRepo.assetDatas)
|
||||
{
|
||||
connector.assetScrollView.RemoveItem(customAssetData.assetData.folderName, AssetLibraryItemType.folder);
|
||||
connector.assetScrollView.RemoveItem(customAssetData.assetData.assetName, AssetLibraryItemType.file);
|
||||
connector.assetScrollView.RemoveItem(customAssetData.folderName, AssetLibraryItemType.folder);
|
||||
connector.assetScrollView.RemoveItem(customAssetData.assetName, AssetLibraryItemType.file);
|
||||
}
|
||||
CommandInvoker.instance.Invoke(new RemoveAllObjectCommand());
|
||||
|
||||
@@ -73,7 +74,8 @@ namespace Studio.Manage
|
||||
sceneSettingService.SetAPISettingData(curProjectData.sceneStartSetting.apiSetting);
|
||||
sceneSettingService.SetMQTTSettingData(curProjectData.sceneStartSetting.mqttSetting);
|
||||
|
||||
assetManager.LoadLocalFBXDirectorys(curProjectData.assetManagerData.localAssetsPaths);
|
||||
assetManager.CombineAssetFolderPaths(curProjectData.assetManagerData.localAssetsPaths);
|
||||
assetManager.LoadLocalFBXDirectorys();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
23
Assets/Scripts/Studio/TwinObject/AbstractFunctionObject.cs
Normal file
23
Assets/Scripts/Studio/TwinObject/AbstractFunctionObject.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Studio
|
||||
{
|
||||
public enum ObjectType
|
||||
{
|
||||
None,
|
||||
Dynamic,
|
||||
Static
|
||||
}
|
||||
|
||||
public abstract class AbstractFunctionObject : MonoBehaviour
|
||||
{
|
||||
public virtual Dictionary<string, string> Info { get; set; }
|
||||
public virtual Dictionary<string, string> Label { get; set; }
|
||||
|
||||
public virtual ObjectType ObjectType { get; set; }
|
||||
|
||||
public abstract void OnUpdateData(object sender, StudioServiceIdEventArgs e);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 08be9c7b11ca16a43802b09dcc591a9d
|
||||
@@ -1,13 +1,12 @@
|
||||
using Studio.VirtualFactory;
|
||||
using Studio.VirtualFactory.Info;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using Studio.VirtualFactory.Info;
|
||||
|
||||
namespace Studio.Dynamic.TwinObject
|
||||
{
|
||||
public class AGV : MonoBehaviour, IInfo
|
||||
public class AGV : AbstractFunctionObject
|
||||
{
|
||||
float dp;
|
||||
Vector3 nextPos;
|
||||
@@ -28,7 +27,8 @@ namespace Studio.Dynamic.TwinObject
|
||||
|
||||
private bool isPlay = false;
|
||||
|
||||
public Dictionary<string, string> Info {
|
||||
public override Dictionary<string, string> Info
|
||||
{
|
||||
get
|
||||
{
|
||||
//ToDo 보고싶은 정보 나열한.. 리스트 목록 가져온다..
|
||||
@@ -36,7 +36,8 @@ namespace Studio.Dynamic.TwinObject
|
||||
}
|
||||
}
|
||||
|
||||
public Dictionary<string, string> Label {
|
||||
public override Dictionary<string, string> Label
|
||||
{
|
||||
get
|
||||
{
|
||||
//ToDo 보고싶은 정보 나열한.. 리스트 목록 가져온다..
|
||||
@@ -44,7 +45,20 @@ namespace Studio.Dynamic.TwinObject
|
||||
}
|
||||
}
|
||||
|
||||
public void Init(string type,Vector3 pos)
|
||||
public override ObjectType ObjectType
|
||||
{
|
||||
get
|
||||
{
|
||||
return ObjectType.Dynamic;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Run했을때 생성되면서 배치...
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="pos"></param>
|
||||
public void Init(string type, Vector3 pos)
|
||||
{
|
||||
transform.position = pos;
|
||||
startX = transform.position.x;
|
||||
@@ -57,11 +71,11 @@ namespace Studio.Dynamic.TwinObject
|
||||
StudioService.instance.AddTypeIdListener(type, transform.name, OnUpdateData);
|
||||
}
|
||||
|
||||
internal void OnUpdateData(object sender, StudioServiceIdEventArgs e)
|
||||
public override void OnUpdateData(object sender, StudioServiceIdEventArgs e)
|
||||
{
|
||||
CurrentEntity = e.Entity;
|
||||
var s = "{";
|
||||
foreach(var t in e.Entity)
|
||||
foreach (var t in e.Entity)
|
||||
{
|
||||
s += $"{t.Key}: {t.Value},";
|
||||
}
|
||||
@@ -91,7 +105,7 @@ namespace Studio.Dynamic.TwinObject
|
||||
|
||||
//노드방향으로 회전값알기
|
||||
|
||||
var degree =CurrentEntity.FirstOrDefault(x => x.Key.Equals("DEGREE", StringComparison.OrdinalIgnoreCase));
|
||||
var degree = CurrentEntity.FirstOrDefault(x => x.Key.Equals("DEGREE", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
var deg = float.Parse(degree.Value);
|
||||
deg = 360f - deg;
|
||||
@@ -115,7 +129,7 @@ namespace Studio.Dynamic.TwinObject
|
||||
}
|
||||
void PerforcedMovement()
|
||||
{
|
||||
|
||||
|
||||
xp += Time.deltaTime * moveSpeed;
|
||||
yp += Time.deltaTime * moveSpeed;
|
||||
|
||||
|
||||
@@ -5,30 +5,37 @@ using UnityEngine;
|
||||
using Studio.Dynamic.TwinObject;
|
||||
using Studio.Core;
|
||||
using Studio.Manage;
|
||||
using Studio.Conifg;
|
||||
using Studio.AssetTool;
|
||||
|
||||
namespace Studio.Dynamic.M
|
||||
{
|
||||
public class AGVManager : UnitySingleton<AGVManager>
|
||||
{
|
||||
private AGV prf_AGV;
|
||||
public HashSet<AGV> agvs = new();
|
||||
private GameObject prf_AGV;
|
||||
private HashSet<AGV> agvs = new();
|
||||
public float AGVMoveSpeed;
|
||||
public float AGVRotateSpeed;
|
||||
public Queue<Dictionary<string, Dictionary<string, string>>> createAgvs = new();
|
||||
|
||||
/// <summary>
|
||||
/// MQTT
|
||||
/// </summary>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="id"></param>
|
||||
/// <param name="entity"></param>
|
||||
/// <returns></returns>
|
||||
public void Init()
|
||||
public void Awake()
|
||||
{
|
||||
prf_AGV = Resources.Load<AGV>("TestAGV");
|
||||
StudioService.instance.AddTypeListener("AGV", OnDataUpdate);
|
||||
StudioService.instance.AddTypeIdListener("AGV");
|
||||
|
||||
//이벤트 걸어둔다..
|
||||
//+= OnPlayStart
|
||||
}
|
||||
public void OnPlayStart()
|
||||
{
|
||||
var type = GetComponent<CustomAssetRenderObject>().addTopic;
|
||||
var assets = ConfigConnected.AssetSettings;
|
||||
prf_AGV = assets[type].loadedObject;
|
||||
if (prf_AGV == null)
|
||||
{
|
||||
//todo::팝업메시지 나주엥 설정....
|
||||
return;
|
||||
}
|
||||
StudioService.instance.AddTypeListener(type, OnDataUpdate);
|
||||
StudioService.instance.AddTypeIdListener(type);
|
||||
}
|
||||
/// <summary>
|
||||
/// MQTT
|
||||
@@ -56,6 +63,10 @@ namespace Studio.Dynamic.M
|
||||
{
|
||||
var agv = ManagerHub.instance.Get<CustomAssetConnector>().CreateAsset("AGV").AddComponent<AGV>();
|
||||
//var agv = Instantiate<AGV>(prf_AGV,transform);
|
||||
|
||||
// var agv = Instantiate<GameObject>(prf_AGV,transform).AddComponent<AGV>();
|
||||
// agv.gameObject.SetActive(true);
|
||||
|
||||
agv.transform.position = Vector3.zero;
|
||||
agv.name = id;
|
||||
agv.SetMoveSpeed(AGVMoveSpeed);
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Studio.VirtualFactory.Info;
|
||||
using Studio.AssetTool;
|
||||
using Studio.VirtualFactory.Info;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
@@ -8,10 +9,10 @@ using UnityEngine;
|
||||
|
||||
namespace Studio.Staic.STKC
|
||||
{
|
||||
public class StackerCrane : MonoBehaviour, IInfo
|
||||
public class StackerCrane : AbstractFunctionObject
|
||||
{
|
||||
private Dictionary<string, string> CurrentEntity;
|
||||
public Dictionary<string, string> Info
|
||||
private Dictionary<string, string> CurrentEntity;
|
||||
public override Dictionary<string, string> Info
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -20,7 +21,7 @@ namespace Studio.Staic.STKC
|
||||
|
||||
}
|
||||
|
||||
public Dictionary<string, string> Label
|
||||
public override Dictionary<string, string> Label
|
||||
{
|
||||
get
|
||||
{
|
||||
@@ -28,6 +29,14 @@ namespace Studio.Staic.STKC
|
||||
}
|
||||
}
|
||||
|
||||
public override ObjectType ObjectType
|
||||
{
|
||||
get
|
||||
{
|
||||
return ObjectType.Dynamic;
|
||||
}
|
||||
}
|
||||
|
||||
public string BANK;
|
||||
public string BAY;
|
||||
public string LEVEL;
|
||||
@@ -47,13 +56,20 @@ namespace Studio.Staic.STKC
|
||||
|
||||
private int[] values = new int[3];
|
||||
private string curType;
|
||||
public void Init(string type)
|
||||
|
||||
public override void AfterAwake()
|
||||
{
|
||||
curType = type;
|
||||
bodySpeed = 0.3f;
|
||||
liftSpeed = 0.3f;
|
||||
StudioService.instance.AddTypeIdListener(type, transform.name, OnUpdateData);
|
||||
onMotionStart = StartAnim;
|
||||
//이벤트 걸어둔다..
|
||||
//+= OnPlayStart
|
||||
}
|
||||
public void OnPlayStart()
|
||||
{
|
||||
var type = GetComponent<CustomAssetRenderObject>().addTopic;
|
||||
curType = type;
|
||||
StudioService.instance.AddTypeIdListener(type, transform.name, OnUpdateData);
|
||||
}
|
||||
|
||||
public void AddInit(string type)
|
||||
@@ -107,7 +123,7 @@ namespace Studio.Staic.STKC
|
||||
lift.position = liftPos;
|
||||
}
|
||||
|
||||
private void OnUpdateData(object sender, StudioServiceIdEventArgs e)
|
||||
public override void OnUpdateData(object sender, StudioServiceIdEventArgs e)
|
||||
{
|
||||
CurrentEntity = e.Entity;
|
||||
|
||||
@@ -153,6 +169,8 @@ namespace Studio.Staic.STKC
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (curType == null)
|
||||
return;
|
||||
StudioService.instance.RemoveTypeIdListener(curType, transform.name);
|
||||
onMotionStart -= StartAnim;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
using UnityEngine;
|
||||
using Studio.AssetTool;
|
||||
using Studio.Command;
|
||||
using Studio.Manage;
|
||||
using Studio.UI;
|
||||
using Studio.Util;
|
||||
using Studio.Test;
|
||||
using UnityEngine;
|
||||
using XRLib;
|
||||
using XRLib.UI;
|
||||
using Studio;
|
||||
using Studio.AssetTool;
|
||||
using Studio.Command;
|
||||
using static UnityEngine.Rendering.DebugUI;
|
||||
|
||||
namespace Studio
|
||||
{
|
||||
@@ -25,6 +21,7 @@ namespace Studio
|
||||
public Panel_AuthSetting panel_authsetting;
|
||||
public Panel_APISetting panel_apisetting;
|
||||
public Panel_MQTTSetting panel_mqttsetting;
|
||||
public Panel_AssetSetting panel_assetsetting;
|
||||
public Panel_3DFactorySetting panel_3dfactorysetting;
|
||||
public Panel_DynamicObjectUISetting panel_dynamicobjectuisetting;
|
||||
|
||||
@@ -37,7 +34,8 @@ namespace Studio
|
||||
public Panel_InterferedObjectList panel_interferedobjectlist;
|
||||
public Panel_AssetProperties panel_assetproperties;
|
||||
public Panel_PredefinedType panel_predefinedtype;
|
||||
public Panel_ObjectInfo panel_objectinfo;
|
||||
public Panel_DynamicObjectInfo panel_dynamicobjectinfo;
|
||||
// public Panel_ObjectInfo panel_objectinfo;
|
||||
public Panel_ObjectAlign panel_objectalign;
|
||||
public Panel_Tooltip panel_tooltip;
|
||||
public Panel_PropertyViewer panel_propertyviewer;
|
||||
@@ -56,7 +54,6 @@ namespace Studio
|
||||
|
||||
public Panel_DataConnectModal panel_dataconnectmodal;
|
||||
public Panel_AlarmConnectModal panel_alarmconnectmodal;
|
||||
public Panel_DynamicObjectInfo panel_dynamicobjectinfo;
|
||||
internal Panel_MQTTTestResult panel_mqtttestresult;
|
||||
|
||||
private void Awake()
|
||||
@@ -68,7 +65,7 @@ namespace Studio
|
||||
public override void AfterAwake()
|
||||
{
|
||||
var renderObjectHandler = ManagerHub.instance.Get<RenderObjectHandler>();
|
||||
panel_objectinfo.onTransformChanged += renderObjectHandler.OnTransformChanged;
|
||||
panel_dynamicobjectinfo.onTransformChanged += renderObjectHandler.OnTransformChanged;
|
||||
|
||||
var raycaster = GameObject.FindAnyObjectByType<Raycaster>();
|
||||
raycaster.onUIHoverEvent += panel_tooltip.ActivateTooltip;
|
||||
@@ -91,6 +88,7 @@ namespace Studio
|
||||
panel_newprojectinfo.onClickCreate += () => CommandInvoker.instance.Invoke(new NewProjectCommand());
|
||||
panel_openprojectinfo.onClickOpen += () => CommandInvoker.instance.Invoke(new OpenProjectCommand());
|
||||
panel_assetmanager.onSelectedURLs += () => CommandInvoker.instance.Invoke(new LoadLocalAssetCommand());
|
||||
panel_assetsetting.onSelectedURLs += () => CommandInvoker.instance.Invoke(new LoadLocalAssetCommand());
|
||||
|
||||
panel_topmenunewprojectinfo.onClickCreate += () => CommandInvoker.instance.Invoke(new TopMenuNewProjectCommand());
|
||||
panel_topmenuopenprojectinfo.onClickOpen += () => CommandInvoker.instance.Invoke(new TopMenuOpenProjectCommand());
|
||||
|
||||
@@ -22,7 +22,6 @@ namespace Studio.UVC.UI
|
||||
|
||||
public override void AfterAwake()
|
||||
{
|
||||
base.AfterAwake();
|
||||
//titleKey = "realtime_load_factor";
|
||||
Init();
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Collections.Generic;
|
||||
using System;
|
||||
using Studio.Util;
|
||||
using Studio.AssetTool;
|
||||
using System.Linq;
|
||||
|
||||
namespace Studio
|
||||
{
|
||||
@@ -27,6 +28,30 @@ namespace Studio
|
||||
public Action<UI_DynamicObjectItem> onUISetting;
|
||||
public Action<UI_DynamicObjectItem> onRemoveItem;
|
||||
|
||||
public void SetDataList(List<string> dataList)
|
||||
{
|
||||
this.dataList = dataList;
|
||||
|
||||
var preDataDropdownOption = Dropdown_Data.options[Dropdown_Data.value].text;
|
||||
SetDataDropdown();
|
||||
|
||||
foreach(var option in Dropdown_Data.options)
|
||||
{
|
||||
Dropdown_Data.value = option.text == preDataDropdownOption ? Dropdown_Data.options.IndexOf(option) : 0;
|
||||
}
|
||||
}
|
||||
public void SetModelList(List<CustomAssetData> modelList)
|
||||
{
|
||||
this.modelList = modelList;
|
||||
|
||||
var preDataDropdownOption = Dropdown_Model.options[Dropdown_Model.value].text;
|
||||
SetModelDropdown();
|
||||
|
||||
foreach (var option in Dropdown_Model.options)
|
||||
{
|
||||
Dropdown_Model.value = option.text == preDataDropdownOption ? Dropdown_Model.options.IndexOf(option) : 0;
|
||||
}
|
||||
}
|
||||
public void SetData(List<string> dataList, List<CustomAssetData> modelList)
|
||||
{
|
||||
this.dataList = dataList;
|
||||
@@ -106,7 +131,11 @@ namespace Studio
|
||||
{
|
||||
var dynamic3DModelConnection = new Dynamic3DModelConnection();
|
||||
dynamic3DModelConnection.dataName = Dropdown_Data.options[Dropdown_Data.value].text;
|
||||
dynamic3DModelConnection.modelName = selectedModel.assetName;
|
||||
|
||||
if (selectedModel != null)
|
||||
{
|
||||
dynamic3DModelConnection.modelName = selectedModel.assetName;
|
||||
}
|
||||
dynamic3DModelConnection.modelUISettingData = selectDynamicObjectData;
|
||||
|
||||
return dynamic3DModelConnection;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine;
|
||||
using XRLib.UI;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
@@ -51,7 +51,9 @@ namespace Studio
|
||||
if (mqttSetting == null)
|
||||
return;
|
||||
|
||||
foreach(var mqttConnection in mqttSetting.mqttConnections)
|
||||
dataList.Clear();
|
||||
|
||||
foreach (var mqttConnection in mqttSetting.mqttConnections)
|
||||
{
|
||||
foreach(var mqttTopic in mqttConnection.topics)
|
||||
{
|
||||
@@ -59,11 +61,22 @@ namespace Studio
|
||||
dataList.Add(dataName);
|
||||
}
|
||||
}
|
||||
foreach(var item in dynamicObjectItems)
|
||||
{
|
||||
item.SetDataList(dataList);
|
||||
}
|
||||
}
|
||||
public void SetModelDropdownData(CustomAssetDataRepository customAssetDataRepository)
|
||||
{
|
||||
modelList.Clear();
|
||||
|
||||
var assetDatas = customAssetDataRepository.assetDatas;
|
||||
modelList.AddRange(assetDatas);
|
||||
|
||||
foreach (var item in dynamicObjectItems)
|
||||
{
|
||||
item.SetModelList(modelList);
|
||||
}
|
||||
}
|
||||
private void OnClickAddDynamicObjectButton()
|
||||
{
|
||||
@@ -114,6 +127,18 @@ namespace Studio
|
||||
}
|
||||
return dynamic3DModelSetting;
|
||||
}
|
||||
|
||||
public Dictionary<string,CustomAssetData> GetAssetDatas()
|
||||
{
|
||||
var datas = new Dictionary<string, CustomAssetData>();
|
||||
foreach (var modelData in dynamicObjectItems)
|
||||
{
|
||||
var splitdata = modelData.GetDynamic3DModelConnection().dataName.Split('/');
|
||||
var topic = splitdata[splitdata.Length - 1];
|
||||
datas.Add(topic, modelData.selectedModel);
|
||||
}
|
||||
return datas;
|
||||
}
|
||||
public void SetDynamic3DModelSetting(Dynamic3DModelSetting saveModelDatas)
|
||||
{
|
||||
foreach(var item in dynamicObjectItems)
|
||||
|
||||
115
Assets/Scripts/Studio/UI/Panel/Panel_AssetSetting.cs
Normal file
115
Assets/Scripts/Studio/UI/Panel/Panel_AssetSetting.cs
Normal file
@@ -0,0 +1,115 @@
|
||||
using Studio.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using XRLib.UI;
|
||||
|
||||
namespace Studio.UI
|
||||
{
|
||||
public class Panel_AssetSetting : PanelBase
|
||||
{
|
||||
private ToggleGroup toggleGroup;
|
||||
private Toggle Toggle_ServerAssets;
|
||||
private Toggle Toggle_LocalAssets;
|
||||
private Toggle Toggle_AssetHierarchy;
|
||||
|
||||
private RectTransform TabToggles;
|
||||
private RectTransform ServerAssets;
|
||||
private RectTransform LocalAssets;
|
||||
private RectTransform AssetHierarchy;
|
||||
|
||||
private RectTransform Content_LocalAssets;
|
||||
|
||||
private Button Button_AddFolderPathItem;
|
||||
|
||||
private UI_FolderPathItem prf_folderPathItem;
|
||||
private List<UI_FolderPathItem> folderPathItems = new List<UI_FolderPathItem>();
|
||||
private List<string> selectedURLs = new List<string>();
|
||||
|
||||
public Action onSelectedURLs;
|
||||
|
||||
public override void AfterAwake()
|
||||
{
|
||||
prf_folderPathItem = Resources.Load<UI_FolderPathItem>("Prefabs/UI/PRF_FolderPathItem");
|
||||
|
||||
toggleGroup = TabToggles.GetComponent<ToggleGroup>();
|
||||
Toggle_ServerAssets.onValueChanged.AddListener(OnServerAssetsValueChanged);
|
||||
Toggle_LocalAssets.onValueChanged.AddListener(OnLocalAssetsValueChanged);
|
||||
Toggle_AssetHierarchy.onValueChanged.AddListener(OnSAssetHierarchyValueChanged);
|
||||
|
||||
Toggle_ServerAssets.group = toggleGroup;
|
||||
Toggle_LocalAssets.group = toggleGroup;
|
||||
Toggle_AssetHierarchy.group = toggleGroup;
|
||||
|
||||
Button_AddFolderPathItem.onClick.AddListener(OnClickAddFolderPathItemButton);
|
||||
folderPathItems.Clear();
|
||||
}
|
||||
|
||||
public void Active(bool isOn)
|
||||
{
|
||||
SetActive(isOn);
|
||||
}
|
||||
private void OnServerAssetsValueChanged(bool isOn)
|
||||
{
|
||||
ServerAssets.gameObject.SetActive(isOn);
|
||||
}
|
||||
private void OnLocalAssetsValueChanged(bool isOn)
|
||||
{
|
||||
LocalAssets.gameObject.SetActive(isOn);
|
||||
}
|
||||
private void OnSAssetHierarchyValueChanged(bool isOn)
|
||||
{
|
||||
AssetHierarchy.gameObject.SetActive(isOn);
|
||||
}
|
||||
private void OnClickAddFolderPathItemButton()
|
||||
{
|
||||
selectedURLs.Clear();
|
||||
|
||||
var item = Instantiate(prf_folderPathItem, Content_LocalAssets);
|
||||
folderPathItems.Add(item);
|
||||
item.onEndEditInputFieldURL += LoadAsstsPath;
|
||||
|
||||
Button_AddFolderPathItem.transform.SetAsLastSibling();
|
||||
}
|
||||
private void LoadAsstsPath()
|
||||
{
|
||||
foreach (var item in folderPathItems)
|
||||
{
|
||||
selectedURLs.Add(item.GetURL());
|
||||
}
|
||||
onSelectedURLs?.Invoke();
|
||||
}
|
||||
public AssetManagerData GetAssetManagerData()
|
||||
{
|
||||
var assetManagerData = new AssetManagerData();
|
||||
assetManagerData.localAssetsPaths.AddRange(selectedURLs);
|
||||
|
||||
return assetManagerData;
|
||||
}
|
||||
public void SetAssetManager(AssetManagerData assetManagerData)
|
||||
{
|
||||
selectedURLs.Clear();
|
||||
|
||||
foreach (var item in folderPathItems)
|
||||
{
|
||||
Destroy(item.gameObject);
|
||||
}
|
||||
folderPathItems.Clear();
|
||||
|
||||
if (assetManagerData == null)
|
||||
return;
|
||||
|
||||
foreach (var localPath in assetManagerData.localAssetsPaths)
|
||||
{
|
||||
var item = Instantiate(prf_folderPathItem, Content_LocalAssets);
|
||||
item.onEndEditInputFieldURL += LoadAsstsPath;
|
||||
item.SetData(localPath);
|
||||
folderPathItems.Add(item);
|
||||
selectedURLs.Add(item.GetURL());
|
||||
|
||||
Button_AddFolderPathItem.transform.SetAsLastSibling();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8543d7683b4faae4aabe0ec115c412f3
|
||||
@@ -1,4 +1,4 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using XRLib.UI;
|
||||
@@ -8,11 +8,13 @@ using Studio.Core;
|
||||
using Studio.Command;
|
||||
using UnityEngine.UI;
|
||||
using System;
|
||||
using Studio.AssetTool;
|
||||
using UnityEngine.Rendering.Universal;
|
||||
|
||||
namespace Studio.UI
|
||||
{
|
||||
public class Panel_DynamicObjectInfo : PanelBase
|
||||
{
|
||||
{
|
||||
public enum InputFieldType
|
||||
{
|
||||
none,
|
||||
@@ -30,32 +32,28 @@ namespace Studio.UI
|
||||
this.value = value;
|
||||
}
|
||||
}
|
||||
private TextMeshProUGUI Text_Name;
|
||||
|
||||
public TextMeshProUGUI Text_Name;
|
||||
private TMP_InputField InputField_PositionX;
|
||||
private TMP_InputField InputField_PositionY;
|
||||
private TMP_InputField InputField_PositionZ;
|
||||
private TMP_InputField InputField_RotationX;
|
||||
private TMP_InputField InputField_RotationY;
|
||||
private TMP_InputField InputField_RotationZ;
|
||||
private TMP_InputField InputField_ScaleX;
|
||||
private TMP_InputField InputField_ScaleY;
|
||||
private TMP_InputField InputField_ScaleZ;
|
||||
private TMP_InputField InputField_Name;
|
||||
private TMP_InputField InputField_ID;
|
||||
|
||||
public TMP_InputField InputField_PositionX;
|
||||
public TMP_InputField InputField_PositionY;
|
||||
public TMP_InputField InputField_PositionZ;
|
||||
public TMP_InputField InputField_RotationX;
|
||||
public TMP_InputField InputField_RotationY;
|
||||
public TMP_InputField InputField_RotationZ;
|
||||
public TMP_InputField InputField_ScaleX;
|
||||
public TMP_InputField InputField_ScaleY;
|
||||
public TMP_InputField InputField_ScaleZ;
|
||||
|
||||
public TextMeshProUGUI Text_DataName;
|
||||
public Button Button_ConnectData;
|
||||
public Button Button_RetouchData;
|
||||
public Button Button_DeleteData;
|
||||
private AddComponetModal addComponetModal;
|
||||
private ConnectionModal connectionModal;
|
||||
|
||||
public TextMeshProUGUI Text_AlarmName;
|
||||
public Button Button_ConnectAlarm;
|
||||
public Button Button_RetouchAlarm;
|
||||
public Button Button_DeleteAlarm;
|
||||
|
||||
public event System.Action<List<GameObject>> onTransformChanged;
|
||||
private List<GameObject> selectedObjects = new List<GameObject>();
|
||||
private SelectedInput lastSelectedInputField = new SelectedInput(InputFieldType.none ,0.0f);
|
||||
private SelectedInput lastSelectedInputField = new SelectedInput(InputFieldType.none, 0.0f);
|
||||
|
||||
public Action onConnectedData;
|
||||
public Action<string> onRetouchData;
|
||||
@@ -65,11 +63,15 @@ namespace Studio.UI
|
||||
public Action<string> onRetouchAlarm;
|
||||
public Action<string> onDeleteAlarm;
|
||||
|
||||
public SaveConnectedData connectedData;
|
||||
public SaveConnectAlarmData connectedAlarmData;
|
||||
|
||||
private SaveConnectedData connectedData;
|
||||
private SaveConnectAlarmData connectedAlarmData;
|
||||
|
||||
private CustomAssetRenderObject singleSelectObject;
|
||||
private AddComponetDataScriptable componetScriptable;
|
||||
|
||||
public override void AfterAwake()
|
||||
{
|
||||
{
|
||||
InputField_PositionX.onValueChanged.AddListener(OnPosXChanged);
|
||||
InputField_PositionY.onValueChanged.AddListener(OnPosYChanged);
|
||||
InputField_PositionZ.onValueChanged.AddListener(OnPosZChanged);
|
||||
@@ -88,21 +90,35 @@ namespace Studio.UI
|
||||
InputField_ScaleX.onDeselect.AddListener(OnDeselectInputField);
|
||||
InputField_ScaleY.onDeselect.AddListener(OnDeselectInputField);
|
||||
InputField_ScaleZ.onDeselect.AddListener(OnDeselectInputField);
|
||||
InputField_ID.onValueChanged.AddListener(OnChangedID);
|
||||
addComponetModal = GetComponentInChildren<AddComponetModal>();
|
||||
connectionModal = GetComponentInChildren<ConnectionModal>();
|
||||
addComponetModal.Init();
|
||||
connectionModal.Init();
|
||||
connectionModal.gameObject.SetActive(false);
|
||||
|
||||
addComponetModal.onSelectComponet = ChangeCompoentItem;
|
||||
connectionModal.onTopicItem = ChangeTopicItem;
|
||||
connectionModal.onIsAuto = ChangeToggleItem;
|
||||
|
||||
componetScriptable = Resources.Load<AddComponetDataScriptable>("Scriptable/AddComponetData");
|
||||
componetScriptable.SetItem();
|
||||
ResetObjectInfo();
|
||||
Text_DataName.SetText("없음");
|
||||
Button_ConnectData.onClick.AddListener(OnClickConnectDataButton);
|
||||
Button_RetouchData.onClick.AddListener(OnClickRetouchDataButton);
|
||||
Button_DeleteData.onClick.AddListener(OnClickDeleteDataButton);
|
||||
Text_AlarmName.SetText("없음");
|
||||
Button_ConnectAlarm.onClick.AddListener(OnClickConnectAlarmButton);
|
||||
Button_RetouchAlarm.onClick.AddListener(OnClickRetouchAlarmButton);
|
||||
Button_DeleteAlarm.onClick.AddListener(OnClickDeleteAlarmButton);
|
||||
//Text_DataName.SetText("없음");
|
||||
//Button_ConnectData.onClick.AddListener(OnClickConnectDataButton);
|
||||
//Button_RetouchData.onClick.AddListener(OnClickRetouchDataButton);
|
||||
//Button_DeleteData.onClick.AddListener(OnClickDeleteDataButton);
|
||||
//Text_AlarmName.SetText("없음");
|
||||
//Button_ConnectAlarm.onClick.AddListener(OnClickConnectAlarmButton);
|
||||
//Button_RetouchAlarm.onClick.AddListener(OnClickRetouchAlarmButton);
|
||||
//Button_DeleteAlarm.onClick.AddListener(OnClickDeleteAlarmButton);
|
||||
}
|
||||
|
||||
void OnPosXChanged(string input)
|
||||
{
|
||||
{
|
||||
OnTransformChanged(InputFieldType.posX, input);
|
||||
}
|
||||
|
||||
void OnPosYChanged(string input)
|
||||
{
|
||||
OnTransformChanged(InputFieldType.posY, input);
|
||||
@@ -153,7 +169,7 @@ namespace Studio.UI
|
||||
lastSelectedInputField.value = value;
|
||||
foreach (GameObject gb in selectedObjects)
|
||||
{
|
||||
ChangeTransformValue(gb.transform, type, value);
|
||||
ChangeTransformValue(gb.transform, type, value);
|
||||
}
|
||||
onTransformChanged?.Invoke(selectedObjects);
|
||||
}
|
||||
@@ -205,11 +221,11 @@ namespace Studio.UI
|
||||
case InputFieldType.scaZ: origValues = transformsChanged.Select(t => t.transform.localScale.z).ToList(); break;
|
||||
default: origValues = new List<float>(transformsChanged.Count); break;
|
||||
}
|
||||
|
||||
|
||||
ActionCommand command = new ActionCommand(
|
||||
() =>
|
||||
{
|
||||
for (int i = 0; i< transformsChanged.Count; i++)
|
||||
{
|
||||
for (int i = 0; i < transformsChanged.Count; i++)
|
||||
{
|
||||
ChangeTransformValue(transformsChanged[i].transform, type, saveSelectedInput.value);
|
||||
}
|
||||
@@ -225,6 +241,7 @@ namespace Studio.UI
|
||||
});
|
||||
CommandInvoker.instance.Invoke(command);
|
||||
}
|
||||
|
||||
void ChangeTransformValue(Transform t, InputFieldType type, float v)
|
||||
{
|
||||
switch (type)
|
||||
@@ -240,6 +257,7 @@ namespace Studio.UI
|
||||
case InputFieldType.scaZ: t.localScale = new Vector3(t.localScale.x, t.localScale.y, v); break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnDeselectInputField(string lastInput)
|
||||
{
|
||||
Debug.Log("Deselect Input Field");
|
||||
@@ -248,6 +266,12 @@ namespace Studio.UI
|
||||
lastSelectedInputField = new SelectedInput(InputFieldType.none, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void OnChangedID(string Id)
|
||||
{
|
||||
var searchAsset = GetConnectAsset(singleSelectObject);
|
||||
searchAsset.renderObject.ID = Id;
|
||||
}
|
||||
public void SetObjectInfo(string name, List<GameObject> selectedObjects)
|
||||
{
|
||||
ResetObjectInfo();
|
||||
@@ -256,24 +280,63 @@ namespace Studio.UI
|
||||
return;
|
||||
}
|
||||
if (selectedObjects.Count == 0)
|
||||
{
|
||||
{
|
||||
return;
|
||||
}
|
||||
addComponetModal.Open();
|
||||
connectionModal.gameObject.SetActive(false);
|
||||
if (selectedObjects.Count == 1)
|
||||
{
|
||||
var renderObject = selectedObjects[0].GetComponent<CustomAssetRenderObject>();
|
||||
if (renderObject != null)
|
||||
{
|
||||
singleSelectObject = renderObject;
|
||||
var searchAsset = GetConnectAsset(renderObject);
|
||||
var compKey = searchAsset.renderObject.componetKey;
|
||||
addComponetModal.ChangeItem(searchAsset.renderObject.componetKey);
|
||||
InputField_ID.SetTextWithoutNotify(searchAsset.renderObject.ID);
|
||||
|
||||
if (!string.IsNullOrEmpty(compKey))
|
||||
{
|
||||
connectionModal.gameObject.SetActive(true);
|
||||
|
||||
var topic = searchAsset.renderObject.addTopic;
|
||||
var isAuto = searchAsset.renderObject.isAutoId;
|
||||
if (!string.IsNullOrEmpty(topic))
|
||||
{
|
||||
connectionModal.SetAutoId(isAuto);
|
||||
connectionModal.Open();
|
||||
connectionModal.ChangeItem(topic,isAuto);
|
||||
}
|
||||
}
|
||||
InputField_Name.text = searchAsset.assetData.assetName;
|
||||
}
|
||||
|
||||
}
|
||||
string append = "";
|
||||
if (!name.Equals("-"))
|
||||
{
|
||||
append = string.Format(" ({0})", selectedObjects.Count);
|
||||
}
|
||||
Text_Name.text = name + append;
|
||||
//InputField_Name.
|
||||
//Text_Name.text = name + append;
|
||||
OnTransformChanged(selectedObjects);
|
||||
if (lastSelectedInputField.type != InputFieldType.none)
|
||||
{
|
||||
lastSelectedInputField = new SelectedInput(InputFieldType.none, 0.0f);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private ConnectedAsset GetConnectAsset(CustomAssetRenderObject renderObject)
|
||||
{
|
||||
var connector = ManagerHub.instance.Get<CustomAssetConnector>();
|
||||
ConnectedAsset searchAsset = connector.connectedAssets.FirstOrDefault(x => x.renderObject == renderObject);
|
||||
return searchAsset;
|
||||
}
|
||||
public void ResetObjectInfo()
|
||||
{
|
||||
Text_Name.text = "-";
|
||||
InputField_PositionX.SetTextWithoutNotify("-");
|
||||
InputField_PositionY.SetTextWithoutNotify("-");
|
||||
InputField_PositionZ.SetTextWithoutNotify("-");
|
||||
@@ -288,53 +351,83 @@ namespace Studio.UI
|
||||
lastSelectedInputField = new SelectedInput(InputFieldType.none, 0.0f);
|
||||
}
|
||||
}
|
||||
private void Update()
|
||||
{
|
||||
if (Text_DataName.text == "없음")
|
||||
{
|
||||
Button_ConnectData.gameObject.SetActive(true);
|
||||
Button_RetouchData.gameObject.SetActive(false);
|
||||
Button_DeleteData.gameObject.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
Button_ConnectData.gameObject.SetActive(false);
|
||||
Button_RetouchData.gameObject.SetActive(true);
|
||||
Button_DeleteData.gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
if (Text_AlarmName.text == "없음")
|
||||
/// <summary>
|
||||
/// 추가
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
private void AddCompoent(string key)
|
||||
{
|
||||
var component = componetScriptable.compoenets.FirstOrDefault(x => x.key.Equals(key));
|
||||
var type = component.comp.GetType();
|
||||
|
||||
if (!singleSelectObject.TryGetComponent(type, out var com))
|
||||
{
|
||||
Button_ConnectAlarm.gameObject.SetActive(true);
|
||||
Button_RetouchAlarm.gameObject.SetActive(false);
|
||||
Button_DeleteAlarm.gameObject.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
Button_ConnectAlarm.gameObject.SetActive(false);
|
||||
Button_RetouchAlarm.gameObject.SetActive(true);
|
||||
Button_DeleteAlarm.gameObject.SetActive(true);
|
||||
singleSelectObject.gameObject.AddComponent(component.comp.GetType());
|
||||
var obj = component.comp as AbstractFunctionObject;
|
||||
var isAuto = obj.ObjectType.Equals(ObjectType.Dynamic) ? true : false;
|
||||
connectionModal.SetAutoId(isAuto);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 제거
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
private void RemoveAddCompoent(string key)
|
||||
{
|
||||
if (string.IsNullOrEmpty(key))
|
||||
return;
|
||||
|
||||
var component = componetScriptable.compoenets.FirstOrDefault(x => x.key.Equals(key));
|
||||
var type = component.comp.GetType();
|
||||
if (singleSelectObject.TryGetComponent(type, out var com))
|
||||
Destroy(com);
|
||||
}
|
||||
|
||||
private void ChangeCompoentItem(string key)
|
||||
{
|
||||
var searchObject = GetConnectAsset(singleSelectObject);
|
||||
var prevKey = searchObject.renderObject.componetKey;
|
||||
if (!string.IsNullOrEmpty(prevKey) && !prevKey.Equals(key))
|
||||
{
|
||||
RemoveAddCompoent(searchObject.renderObject.componetKey);
|
||||
}
|
||||
bool isConnect = string.IsNullOrEmpty(key) ? false : true;
|
||||
//이전의 키값을 가져와야 함.
|
||||
//RemoveAddCompoent();
|
||||
|
||||
connectionModal.gameObject.SetActive(isConnect);
|
||||
if (isConnect == false)
|
||||
{
|
||||
searchObject.renderObject.addTopic = null;
|
||||
searchObject.renderObject.isAutoId = false;
|
||||
searchObject.renderObject.componetKey = key;
|
||||
return;
|
||||
}
|
||||
|
||||
AddCompoent(key);
|
||||
connectionModal.Open();
|
||||
searchObject.renderObject.componetKey = key;
|
||||
}
|
||||
|
||||
private void ChangeTopicItem(string key)
|
||||
{
|
||||
var searchObject = GetConnectAsset(singleSelectObject);
|
||||
searchObject.renderObject.addTopic = key;
|
||||
}
|
||||
|
||||
private void ChangeToggleItem(bool isAuto)
|
||||
{
|
||||
var searchObject = GetConnectAsset(singleSelectObject);
|
||||
searchObject.renderObject.isAutoId = isAuto;
|
||||
}
|
||||
|
||||
private void OnClickConnectDataButton()
|
||||
{
|
||||
onConnectedData?.Invoke();
|
||||
}
|
||||
private void OnClickRetouchDataButton()
|
||||
{
|
||||
onRetouchData?.Invoke(Text_DataName.text);
|
||||
}
|
||||
private void OnClickDeleteDataButton()
|
||||
{
|
||||
onDeleteData?.Invoke(Text_DataName.text);
|
||||
Text_DataName.SetText("없음");
|
||||
}
|
||||
|
||||
public void OnConnectData(string saveDataName, SaveConnectedData saveData)
|
||||
{
|
||||
Text_DataName.SetText(saveDataName);
|
||||
connectedData = saveData;
|
||||
}
|
||||
|
||||
private void OnClickConnectAlarmButton()
|
||||
{
|
||||
@@ -342,18 +435,72 @@ namespace Studio.UI
|
||||
}
|
||||
private void OnClickRetouchAlarmButton()
|
||||
{
|
||||
onRetouchAlarm?.Invoke(Text_AlarmName.text);
|
||||
}
|
||||
private void OnClickDeleteAlarmButton()
|
||||
{
|
||||
onDeleteAlarm?.Invoke(Text_AlarmName.text);
|
||||
Text_AlarmName.SetText("없음");
|
||||
//onRetouchAlarm?.Invoke(Text_AlarmName.text);
|
||||
}
|
||||
|
||||
public void OnConnectAlarm(string saveAlarmName, SaveConnectAlarmData saveData)
|
||||
{
|
||||
Text_AlarmName.SetText(saveAlarmName);
|
||||
connectedAlarmData = saveData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//private TextMeshProUGUI Text_DataName;
|
||||
//private Button Button_ConnectData;
|
||||
//private Button Button_RetouchData;
|
||||
//private Button Button_DeleteData;
|
||||
|
||||
//private TextMeshProUGUI Text_AlarmName;
|
||||
//private Button Button_ConnectAlarm;
|
||||
//private Button Button_RetouchAlarm;
|
||||
//private Button Button_DeleteAlarm;
|
||||
//private void Update()
|
||||
//{
|
||||
// if (Text_DataName.text == "없음")
|
||||
// {
|
||||
// Button_ConnectData.gameObject.SetActive(true);
|
||||
// Button_RetouchData.gameObject.SetActive(false);
|
||||
// Button_DeleteData.gameObject.SetActive(false);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Button_ConnectData.gameObject.SetActive(false);
|
||||
// Button_RetouchData.gameObject.SetActive(true);
|
||||
// Button_DeleteData.gameObject.SetActive(true);
|
||||
// }
|
||||
|
||||
// if (Text_AlarmName.text == "없음")
|
||||
// {
|
||||
// Button_ConnectAlarm.gameObject.SetActive(true);
|
||||
// Button_RetouchAlarm.gameObject.SetActive(false);
|
||||
// Button_DeleteAlarm.gameObject.SetActive(false);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Button_ConnectAlarm.gameObject.SetActive(false);
|
||||
// Button_RetouchAlarm.gameObject.SetActive(true);
|
||||
// Button_DeleteAlarm.gameObject.SetActive(true);
|
||||
// }
|
||||
//}
|
||||
//private void OnClickRetouchDataButton()
|
||||
//{
|
||||
// onRetouchData?.Invoke(Text_DataName.text);
|
||||
//}
|
||||
//private void OnClickDeleteDataButton()
|
||||
//{
|
||||
// onDeleteData?.Invoke(Text_DataName.text);
|
||||
// Text_DataName.SetText("없음");
|
||||
//}
|
||||
|
||||
//public void OnConnectData(string saveDataName, SaveConnectedData saveData)
|
||||
//{
|
||||
// Text_DataName.SetText(saveDataName);
|
||||
// connectedData = saveData;
|
||||
//}
|
||||
//private void OnClickDeleteAlarmButton()
|
||||
//{
|
||||
// onDeleteAlarm?.Invoke(Text_AlarmName.text);
|
||||
// Text_AlarmName.SetText("없음");
|
||||
//}
|
||||
|
||||
//public void OnConnectAlarm(string saveAlarmName, SaveConnectAlarmData saveData)
|
||||
//{
|
||||
// Text_AlarmName.SetText(saveAlarmName);
|
||||
// connectedAlarmData = saveData;
|
||||
//}
|
||||
@@ -16,7 +16,7 @@ namespace Studio.UI
|
||||
Dictionary<UI_ObjectDistance, LineRenderer> distanceLines = new();
|
||||
|
||||
[SerializeField]
|
||||
float lineThickness = 1;
|
||||
float lineThickness = 0.1f;
|
||||
|
||||
CustomAssetRenderObject selectedObject;
|
||||
|
||||
@@ -101,7 +101,6 @@ namespace Studio.UI
|
||||
distanceUI.SetText(distance);
|
||||
distanceUI.SetPos(distanceCenterPoint);
|
||||
|
||||
//SetLineLength(distanceLines[distanceUI], distanceCenterPoint, direction, distance);
|
||||
distanceLines[distanceUI].SetPosition(0, hitPoint);
|
||||
distanceLines[distanceUI].SetPosition(1, hitPoint - (direction * distance));
|
||||
distanceLines[distanceUI].enabled = true;
|
||||
@@ -113,12 +112,5 @@ namespace Studio.UI
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void SetLineLength(GameObject line, Vector3 centerPoint, Vector3 direction, float length)
|
||||
{
|
||||
line.transform.position = centerPoint;
|
||||
line.transform.rotation = Quaternion.LookRotation(direction) * Quaternion.Euler(new Vector3(90, 0, 0));
|
||||
line.transform.localScale = new Vector3(lineThickness, length / 2, lineThickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,12 +19,14 @@ namespace Studio
|
||||
private Toggle Toggle_APISetting;
|
||||
private Toggle Toggle_MQTTSetting;
|
||||
private Toggle Toggle_3DFactorySetting;
|
||||
private Toggle Toggle_AssetSetting;
|
||||
|
||||
public Action<bool> onClickAppSetting;
|
||||
public Action<bool> onClickAuthSetting;
|
||||
public Action<bool> onClickAPISetting;
|
||||
public Action<bool> onClickMQTTSetting;
|
||||
public Action<bool> onClick3DFactorySetting;
|
||||
public Action<bool> onClickAssetSetting;
|
||||
|
||||
#region TestButton
|
||||
private Button Button_Load;
|
||||
@@ -73,6 +75,7 @@ namespace Studio
|
||||
Toggle_APISetting.onValueChanged.AddListener(OnClickAPISettingButton);
|
||||
Toggle_MQTTSetting.onValueChanged.AddListener(OnClickMQTTSettingButton);
|
||||
Toggle_3DFactorySetting.onValueChanged.AddListener(OnClick3DFactorySettingButton);
|
||||
Toggle_AssetSetting.onValueChanged.AddListener(OnClickAssetSettingButton);
|
||||
|
||||
Button_Load.onClick.AddListener(OnClickLoadButton);
|
||||
Button_Save.onClick.AddListener(OnClickSaveButton);
|
||||
@@ -108,6 +111,11 @@ namespace Studio
|
||||
SetToggleChanged(Toggle_3DFactorySetting, isOn);
|
||||
onClick3DFactorySetting?.Invoke(isOn);
|
||||
}
|
||||
private void OnClickAssetSettingButton(bool isOn)
|
||||
{
|
||||
SetToggleChanged(Toggle_AssetSetting, isOn);
|
||||
onClickAssetSetting?.Invoke(isOn);
|
||||
}
|
||||
private void OnClickSaveButton()
|
||||
{
|
||||
onClickSaveButton?.Invoke();
|
||||
|
||||
8
Assets/Scripts/Studio/UI/Panel_3DDy.meta
Normal file
8
Assets/Scripts/Studio/UI/Panel_3DDy.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f6a080ddfc6d49e44a7493846995fc01
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,39 @@
|
||||
using NUnit.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Studio
|
||||
{
|
||||
[CreateAssetMenu(fileName = "AddComponetData", menuName = "Scriptable Objects/AddComponetData")]
|
||||
public class AddComponetDataScriptable : ScriptableObject
|
||||
{
|
||||
public List<AddComponetData> compoenets;
|
||||
|
||||
[ContextMenu("SetItem")]
|
||||
public void SetItem()
|
||||
{
|
||||
//디렉토리 경로 가져오고
|
||||
compoenets.Clear();
|
||||
var allObject = Resources.LoadAll<AbstractFunctionObject>("Prefabs/FunctionObject");
|
||||
foreach(var obj in allObject)
|
||||
{
|
||||
var key = obj.name;
|
||||
var item = new AddComponetData(key, obj);
|
||||
compoenets.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
[Serializable]
|
||||
public class AddComponetData
|
||||
{
|
||||
public AddComponetData(string key, Component comp)
|
||||
{
|
||||
this.key = key;
|
||||
this.comp = comp;
|
||||
}
|
||||
public string key;
|
||||
public Component comp;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 654aed6b109dc4b4da05e7feaa681bf0
|
||||
58
Assets/Scripts/Studio/UI/Panel_3DDy/AddComponetModal.cs
Normal file
58
Assets/Scripts/Studio/UI/Panel_3DDy/AddComponetModal.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Studio
|
||||
{
|
||||
public class AddComponetModal : MonoBehaviour
|
||||
{
|
||||
private TextMeshProUGUI Text_Componet;
|
||||
private ConnectionItem connectionItem;
|
||||
private List<string> componetentKeyTable =new();
|
||||
|
||||
public Action<string> onSelectComponet;
|
||||
public void Init()
|
||||
{
|
||||
connectionItem = GetComponentInChildren<ConnectionItem>();
|
||||
connectionItem.Init();
|
||||
|
||||
SetItem();
|
||||
SetConnectionItem();
|
||||
}
|
||||
public void Open()
|
||||
{
|
||||
SetItem();
|
||||
}
|
||||
|
||||
public void ChangeItem(string key)
|
||||
{
|
||||
var index = connectionItem.GetValue(key);
|
||||
connectionItem.AddConnection.SetValueWithoutNotify(index);
|
||||
}
|
||||
|
||||
private void SetConnectionItem()
|
||||
{
|
||||
connectionItem.SetItem(componetentKeyTable);
|
||||
connectionItem.onValueChange = SelectAddComponent;
|
||||
}
|
||||
|
||||
private void SelectAddComponent(string key)
|
||||
{
|
||||
onSelectComponet?.Invoke(key);
|
||||
}
|
||||
|
||||
private void SetItem()
|
||||
{
|
||||
var item = Resources.Load<AddComponetDataScriptable>("Scriptable/AddComponetData");
|
||||
item.SetItem();
|
||||
componetentKeyTable.Clear();
|
||||
componetentKeyTable.Add(string.Empty);
|
||||
foreach (var comp in item.compoenets)
|
||||
{
|
||||
componetentKeyTable.Add(comp.key);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5cfe3b7d939673e4987cd66a44c8560d
|
||||
49
Assets/Scripts/Studio/UI/Panel_3DDy/ConnectionItem.cs
Normal file
49
Assets/Scripts/Studio/UI/Panel_3DDy/ConnectionItem.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using NUnit.Framework;
|
||||
using Studio.Dynamic.TwinObject;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Studio
|
||||
{
|
||||
public class ConnectionItem : MonoBehaviour
|
||||
{
|
||||
private Button button;
|
||||
private TMP_Dropdown addConnection;
|
||||
|
||||
public TMP_Dropdown AddConnection { get { return addConnection; } }
|
||||
public Button Button { get { return button; } }
|
||||
|
||||
public Action<string> onValueChange;
|
||||
public void Init()
|
||||
{
|
||||
button = GetComponentInChildren<Button>();
|
||||
addConnection = GetComponentInChildren<TMP_Dropdown>();
|
||||
addConnection.onValueChanged.AddListener(OnSelectDropDownItem);
|
||||
}
|
||||
|
||||
private void OnSelectDropDownItem(int arg0)
|
||||
{
|
||||
var selectItem = addConnection.options[arg0];
|
||||
var result = selectItem.text;
|
||||
onValueChange?.Invoke(result);
|
||||
}
|
||||
|
||||
public int GetValue(string key)
|
||||
{
|
||||
var item = addConnection.options.FirstOrDefault(x => x.text.Equals(key));
|
||||
var value = addConnection.options.IndexOf(item);
|
||||
return value;
|
||||
}
|
||||
|
||||
public void SetItem(List<string> options)
|
||||
{
|
||||
addConnection.ClearOptions();
|
||||
addConnection.AddOptions(options);
|
||||
addConnection.SetValueWithoutNotify(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 215f675b2b4c8ca448046c83f3c179d7
|
||||
97
Assets/Scripts/Studio/UI/Panel_3DDy/ConnectionModal.cs
Normal file
97
Assets/Scripts/Studio/UI/Panel_3DDy/ConnectionModal.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using Studio.Conifg;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Studio
|
||||
{
|
||||
public class ConnectionModal : MonoBehaviour
|
||||
{
|
||||
private TextMeshProUGUI Text_Connection;
|
||||
|
||||
private Toggle autoIDCheck;
|
||||
private ConnectionItem connectionItem;
|
||||
|
||||
public Action<string> onTopicItem;
|
||||
public Action<bool> onIsAuto;
|
||||
|
||||
private bool isAuto;
|
||||
public void Init()
|
||||
{
|
||||
autoIDCheck = GetComponentInChildren<Toggle>();
|
||||
autoIDCheck.isOn = false;
|
||||
autoIDCheck.onValueChanged.AddListener(OnAutoCheck);
|
||||
connectionItem = GetComponentInChildren<ConnectionItem>();
|
||||
connectionItem.Init();
|
||||
connectionItem.onValueChange = SelectTopic;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 토픽 데이터 변경했을때
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
private void SelectTopic(string key)
|
||||
{
|
||||
ActiveToggle(key);
|
||||
onTopicItem?.Invoke(key);
|
||||
}
|
||||
|
||||
private void ActiveToggle(string key =null)
|
||||
{
|
||||
if (isAuto == false)
|
||||
{
|
||||
autoIDCheck.gameObject.SetActive(isAuto);
|
||||
return;
|
||||
}
|
||||
|
||||
var isAutoID = string.IsNullOrEmpty(key) ? false : true;
|
||||
autoIDCheck.gameObject.SetActive(isAutoID);
|
||||
}
|
||||
public void SetAutoId(bool isAuto)
|
||||
{
|
||||
this.isAuto = isAuto;
|
||||
}
|
||||
/// <summary>
|
||||
/// Moadl창 켜졌을때
|
||||
/// </summary>
|
||||
/// <param name="isAuto"></param>
|
||||
public void Open()
|
||||
{
|
||||
SetItem();
|
||||
ActiveToggle();
|
||||
}
|
||||
|
||||
private void OnAutoCheck(bool isbool)
|
||||
{
|
||||
onIsAuto?.Invoke(isbool);
|
||||
}
|
||||
|
||||
public void ChangeItem(string key,bool isOn)
|
||||
{
|
||||
var index = connectionItem.GetValue(key);
|
||||
connectionItem.AddConnection.SetValueWithoutNotify(index);
|
||||
autoIDCheck.SetIsOnWithoutNotify(isOn);
|
||||
ActiveToggle();
|
||||
}
|
||||
|
||||
|
||||
public void SetItem()
|
||||
{
|
||||
var mqttsetting = ConfigConnected.MQTTSettings;
|
||||
var topics = new List<string>();
|
||||
topics.Add("");
|
||||
foreach (var setting in mqttsetting.mqttConnections)
|
||||
{
|
||||
foreach (var topic in setting.topics)
|
||||
topics.Add(topic.topic);
|
||||
}
|
||||
|
||||
connectionItem.SetItem(topics);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 93a7f8a195f788649886e3a765382621
|
||||
Reference in New Issue
Block a user