diff --git a/Assets/Models/StackerCrane_01.fbx b/Assets/Models/StackerCrane_01.fbx new file mode 100644 index 00000000..af5d3db7 Binary files /dev/null and b/Assets/Models/StackerCrane_01.fbx differ diff --git a/Assets/Models/StackerCrane_01.fbx.meta b/Assets/Models/StackerCrane_01.fbx.meta new file mode 100644 index 00000000..d05d8dec --- /dev/null +++ b/Assets/Models/StackerCrane_01.fbx.meta @@ -0,0 +1,107 @@ +fileFormatVersion: 2 +guid: a567352e336933243b131db7eb5907dd +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/StackerCrane.meta b/Assets/Prefabs/StackerCrane.meta new file mode 100644 index 00000000..d9157779 --- /dev/null +++ b/Assets/Prefabs/StackerCrane.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eef66bc97c459c94b96c86701663c244 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/StackerCrane/StackerCrane.prefab b/Assets/Prefabs/StackerCrane/StackerCrane.prefab new file mode 100644 index 00000000..2471716e --- /dev/null +++ b/Assets/Prefabs/StackerCrane/StackerCrane.prefab @@ -0,0 +1,551 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &84151496267335565 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3781143750337797595} + - component: {fileID: 8454460130121961209} + - component: {fileID: 2956972442784000634} + m_Layer: 0 + m_Name: StackerCrane_01_Lift + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3781143750337797595 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84151496267335565} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000008146034, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6817145635011239913} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8454460130121961209 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84151496267335565} + m_Mesh: {fileID: 6996815353524655726, guid: a567352e336933243b131db7eb5907dd, type: 3} +--- !u!23 &2956972442784000634 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 84151496267335565} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 7074121452861381994, guid: a567352e336933243b131db7eb5907dd, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &211059046321003065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3684655462316590942} + - component: {fileID: 269198741979494856} + m_Layer: 0 + m_Name: StackerCrane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3684655462316590942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 211059046321003065} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6862055124170816977} + - {fileID: 6817145635011239913} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &269198741979494856 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 211059046321003065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0671ba3dd5120d84fa95f82f0b7004ca, type: 3} + m_Name: + m_EditorClassIdentifier: + BANK: + BAY: + LEVEL: + lift: {fileID: 0} + bodyStart: {x: 0, y: 0, z: 0} + bodyEnd: {x: 0, y: 0, z: 0} +--- !u!1 &3264042907083275313 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 577450798675427556} + - component: {fileID: 7961661491815865467} + - component: {fileID: 2712123774187242948} + m_Layer: 0 + m_Name: StackerCrane_01_Fork_Rear + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &577450798675427556 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3264042907083275313} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000008146034, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6817145635011239913} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7961661491815865467 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3264042907083275313} + m_Mesh: {fileID: -5305828669847631536, guid: a567352e336933243b131db7eb5907dd, type: 3} +--- !u!23 &2712123774187242948 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3264042907083275313} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 7074121452861381994, guid: a567352e336933243b131db7eb5907dd, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &4457033642086699872 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6817145635011239913} + m_Layer: 0 + m_Name: lift + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6817145635011239913 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4457033642086699872} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 997135621247390612} + - {fileID: 577450798675427556} + - {fileID: 3781143750337797595} + - {fileID: 535361768049989532} + m_Father: {fileID: 3684655462316590942} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5293074118394098060 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 535361768049989532} + m_Layer: 0 + m_Name: StackerCrane_01_Lift_Glass + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &535361768049989532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293074118394098060} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000008146034, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6817145635011239913} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5452977827811288836 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7376213727696736814} + - component: {fileID: 6866658327068374132} + - component: {fileID: 49057592000795527} + m_Layer: 0 + m_Name: StackerCrane_01_Glass + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7376213727696736814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5452977827811288836} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6862055124170816977} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6866658327068374132 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5452977827811288836} + m_Mesh: {fileID: 1898404254780704084, guid: a567352e336933243b131db7eb5907dd, type: 3} +--- !u!23 &49057592000795527 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5452977827811288836} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 8556262120643298411, guid: a567352e336933243b131db7eb5907dd, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8798365256392938815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6862055124170816977} + - component: {fileID: 8357980336019159288} + - component: {fileID: 4682494491370198293} + m_Layer: 0 + m_Name: StackerCrane_01 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6862055124170816977 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8798365256392938815} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000008146034, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7376213727696736814} + m_Father: {fileID: 3684655462316590942} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8357980336019159288 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8798365256392938815} + m_Mesh: {fileID: -2303676918162449301, guid: a567352e336933243b131db7eb5907dd, type: 3} +--- !u!23 &4682494491370198293 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8798365256392938815} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 4586366901725999179, guid: a567352e336933243b131db7eb5907dd, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &9062100363697913999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 997135621247390612} + - component: {fileID: 7246941432848583091} + - component: {fileID: 7792230706349749481} + m_Layer: 0 + m_Name: StackerCrane_01_Fork_Front + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &997135621247390612 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9062100363697913999} + serializedVersion: 2 + m_LocalRotation: {x: 0.00000008146034, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6817145635011239913} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &7246941432848583091 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9062100363697913999} + m_Mesh: {fileID: 3567267625800323532, guid: a567352e336933243b131db7eb5907dd, type: 3} +--- !u!23 &7792230706349749481 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9062100363697913999} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 7074121452861381994, guid: a567352e336933243b131db7eb5907dd, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} diff --git a/Assets/Prefabs/StackerCrane/StackerCrane.prefab.meta b/Assets/Prefabs/StackerCrane/StackerCrane.prefab.meta new file mode 100644 index 00000000..8bef4e12 --- /dev/null +++ b/Assets/Prefabs/StackerCrane/StackerCrane.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 057179c23841fd344ad9ab4e6e66c496 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/TestAGV.prefab b/Assets/Resources/TestAGV.prefab new file mode 100644 index 00000000..e2217d08 --- /dev/null +++ b/Assets/Resources/TestAGV.prefab @@ -0,0 +1,238 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1505508720499862715 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 421374873455346910} + - component: {fileID: 802422837581587047} + m_Layer: 0 + m_Name: TestAGV + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &421374873455346910 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505508720499862715} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3909547189796084948} + - {fileID: 1627652318861080814} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &802422837581587047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1505508720499862715} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 84ad40885a5aaa04e85eb7de0489cc8d, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &4488530822671186643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1627652318861080814} + - component: {fileID: 5506305391979457121} + - component: {fileID: 4473865689154435547} + m_Layer: 0 + m_Name: Sensor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1627652318861080814 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4488530822671186643} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 421374873455346910} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &5506305391979457121 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4488530822671186643} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 1 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 10 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &4473865689154435547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4488530822671186643} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a65fe5e7ae0d6a74dbe40d269a1cb6f7, type: 3} + m_Name: + m_EditorClassIdentifier: + obstacleLayer: + serializedVersion: 2 + m_Bits: 256 +--- !u!1 &7175446550791974323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8278436267998297966} + m_Layer: 0 + m_Name: Pallet_Socket + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8278436267998297966 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7175446550791974323} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7020894527220248915} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &154300052577553464 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 421374873455346910} + m_Modifications: + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4046099219731300723, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + propertyPath: m_Name + value: Palletrobot + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 7154835845995298155, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + insertIndex: -1 + addedObject: {fileID: 8278436267998297966} + 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: + m_CorrespondingSourceObject: {fileID: 3775616689855107308, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + m_PrefabInstance: {fileID: 154300052577553464} + m_PrefabAsset: {fileID: 0} +--- !u!1 &6204755932358581132 stripped +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 &7020894527220248915 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7154835845995298155, guid: 586ca79ec44844746b347929276fc0e6, type: 3} + m_PrefabInstance: {fileID: 154300052577553464} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Resources/TestAGV.prefab.meta b/Assets/Resources/TestAGV.prefab.meta new file mode 100644 index 00000000..ecca647f --- /dev/null +++ b/Assets/Resources/TestAGV.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 53db74a6e1101d2438a0c0083c5c232b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ExternalExamples/AutoFactory/VirtualFactoryManager.cs b/Assets/Scripts/ExternalExamples/AutoFactory/VirtualFactoryManager.cs index 1c75754d..1ac73bcb 100644 --- a/Assets/Scripts/ExternalExamples/AutoFactory/VirtualFactoryManager.cs +++ b/Assets/Scripts/ExternalExamples/AutoFactory/VirtualFactoryManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using UnityEditor; diff --git a/Assets/Scripts/Studio/Connect/ConfigConnected.cs b/Assets/Scripts/Studio/Connect/ConfigConnected.cs new file mode 100644 index 00000000..13026583 --- /dev/null +++ b/Assets/Scripts/Studio/Connect/ConfigConnected.cs @@ -0,0 +1,29 @@ +using Studio.Manage; +using Studio.Util; +using System.Collections.Generic; +using UnityEngine; + +namespace Studio.Conifg +{ + public class ConfigConnected + { + public static APISetting APISettings + { + get + { + var canvas_Popup = EventConnector.instance.GetCanvas(); + var result = canvas_Popup.panel_apisetting.GetAPISetting(); + return result; + } + } + public static MQTTSetting MQTTSettings + { + get + { + var canvas_Popup = EventConnector.instance.GetCanvas(); + var result = canvas_Popup.panel_mqttsetting.GetMQTTSetting(); + return result; + } + } + } +} diff --git a/Assets/Scripts/Studio/Connect/ConfigConnected.cs.meta b/Assets/Scripts/Studio/Connect/ConfigConnected.cs.meta new file mode 100644 index 00000000..c375313c --- /dev/null +++ b/Assets/Scripts/Studio/Connect/ConfigConnected.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e8082f730ac49974286f2c71561152dd \ No newline at end of file diff --git a/Assets/Scripts/Studio/Connect/Constants.cs b/Assets/Scripts/Studio/Connect/Constants.cs deleted file mode 100644 index aa4978cf..00000000 --- a/Assets/Scripts/Studio/Connect/Constants.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; - -namespace Studio.Conifg -{ - public class Constants - { - public static string APIDomain; - public static int APIPort; - public static string MQTTDomain; - public static int MQTTPort; - } -} diff --git a/Assets/Scripts/Studio/Connect/Constants.cs.meta b/Assets/Scripts/Studio/Connect/Constants.cs.meta deleted file mode 100644 index 0f8a6e61..00000000 --- a/Assets/Scripts/Studio/Connect/Constants.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: dcc5387e9d1cf9943b3e1d36a9b2bf17 \ No newline at end of file diff --git a/Assets/Scripts/Studio/Connect/RestAPI.cs b/Assets/Scripts/Studio/Connect/RestAPI.cs index 8b74687a..1687c8fe 100644 --- a/Assets/Scripts/Studio/Connect/RestAPI.cs +++ b/Assets/Scripts/Studio/Connect/RestAPI.cs @@ -39,7 +39,7 @@ namespace Studio.Conifg bodyString = JsonUtility.ToJson(body); } } - url = $"http://{Constants.APIDomain}:{Constants.APIPort}{url}"; + // url = $"http://{ConfigConnected.APIDomain}:{ConfigConnected.APIPort}{url}"; var request = SelectHTTPRequest(method, url); // diff --git a/Assets/Scripts/Studio/Connect/StudioRepoistory.cs b/Assets/Scripts/Studio/Connect/StudioRepoistory.cs index 00d68326..ec032dfd 100644 --- a/Assets/Scripts/Studio/Connect/StudioRepoistory.cs +++ b/Assets/Scripts/Studio/Connect/StudioRepoistory.cs @@ -32,26 +32,30 @@ namespace Studio //MQTTCreateConnect(); Application.quitting += OnDestroy; } + private Dictionary clients =new(); - public void MQTTCreateConnect() + public void MQTTCreateConnect(string MQTTDomain,string MQTTPort) { - Debug.Log($"MQTT Domain{Constants.MQTTDomain} , MQTTPORT{Constants.MQTTPort}"); + var conntedInfo = $"MQTT Domain : {MQTTDomain} , MQTTPORT :{MQTTPort}"; + Debug.Log(conntedInfo); + var port = int.Parse(MQTTPort); var options = new ConnectionOptionsBuilder() - .WithTCP(Constants.MQTTDomain, Constants.MQTTPort) + .WithTCP(MQTTDomain, port) .Build(); - if (client != null) + if(clients.ContainsKey(conntedInfo)) { - client.OnConnected -= OnConnectedMQTT; - client.OnStateChanged -= OnStateChangedMQTT; - client.OnDisconnect -= OnDisconnectedMQTT; - client.OnError -= OnErrorMQTT; + clients[conntedInfo].OnConnected -= OnConnectedMQTT; + clients[conntedInfo].OnStateChanged -= OnStateChangedMQTT; + clients[conntedInfo].OnDisconnect -= OnDisconnectedMQTT; + clients[conntedInfo].OnError -= OnErrorMQTT; } - client = new MQTTClient(options); - client.OnConnected += OnConnectedMQTT; - client.OnStateChanged += OnStateChangedMQTT; - client.OnDisconnect += OnDisconnectedMQTT; - client.OnError += OnErrorMQTT; + + clients[conntedInfo] = new MQTTClient(options); + clients[conntedInfo].OnConnected += OnConnectedMQTT; + clients[conntedInfo].OnStateChanged += OnStateChangedMQTT; + clients[conntedInfo].OnDisconnect += OnDisconnectedMQTT; + clients[conntedInfo].OnError += OnErrorMQTT; } private ConnectPacketBuilder ConnectPacketBuilderCallback(MQTTClient client, ConnectPacketBuilder builder) { @@ -78,9 +82,9 @@ namespace Studio } } - public void MQTTConnect() + public void MQTTConnect(string key) { - client.BeginConnect(ConnectPacketBuilderCallback); + clients[key].BeginConnect(ConnectPacketBuilderCallback); } private void OnErrorMQTT(MQTTClient client, string error) @@ -96,6 +100,7 @@ namespace Studio } } + private void OnStateChangedMQTT(MQTTClient client, ClientStates oldState, ClientStates newState) { Debug.Log($"{oldState} => {newState}"); @@ -104,6 +109,12 @@ namespace Studio private void OnConnectedMQTT(MQTTClient client) { + var conntedInfo = $"MQTT Domain : {client.Options.Host} , MQTTPORT :{client.Options.Port}"; + var topics = StudioService.instance.TopciTable[conntedInfo]; + foreach(var topic in topics) + { + Subscribe(client, topic.topic); + } Debug.Log($"MQTT OnConnected"); } @@ -111,7 +122,7 @@ namespace Studio /// 구독 /// /// - public void Subscribe(string topic) + private void Subscribe(MQTTClient client,string topic) { client.CreateBulkSubscriptionBuilder() .WithTopic(new SubscribeTopicBuilder(topic).WithMessageCallback(OnTopic)) @@ -122,7 +133,7 @@ namespace Studio /// 구독 취소 /// /// - public void UnSubscibe(string topic) + public void UnSubscibe(MQTTClient client, string topic) { client.CreateUnsubscribePacketBuilder(topic) .WithAcknowledgementCallback((client, topicFilter, reasonCode) => Debug.Log($"Unsubscribe request to topic filter '{topicFilter}' returned with code: {reasonCode}")) @@ -139,13 +150,12 @@ namespace Studio { string key = prop.Name.ToString(); string value = prop.Value.ToString(); - // Debug.Log($"kEY : {key}, Value:{value}"); } var T = json["data"]; var split = T.ToString().Split('['); var t = $"[{split[1]}"; - //Debug.Log(T.ToString()); + JArray jarray = JArray.Parse(t); var list = new Dictionary>(); foreach (JObject obj in jarray.Children()) @@ -181,10 +191,14 @@ namespace Studio private void OnDestroy() { - client?.CreateDisconnectPacketBuilder() - .WithReasonCode(DisconnectReasonCodes.NormalDisconnection) - .WithReasonString($"{Constants.MQTTDomain} Disconnecting") - .BeginDisconnect(); + foreach(var client in clients) + { + client.Value?.CreateDisconnectPacketBuilder() + .WithReasonCode(DisconnectReasonCodes.NormalDisconnection) + .WithReasonString($"{client.Value.Options.Host} Disconnecting") + .BeginDisconnect(); + } + } } } diff --git a/Assets/Scripts/Studio/Connect/StudioService.cs b/Assets/Scripts/Studio/Connect/StudioService.cs index c9cf6889..232be1cd 100644 --- a/Assets/Scripts/Studio/Connect/StudioService.cs +++ b/Assets/Scripts/Studio/Connect/StudioService.cs @@ -1,44 +1,71 @@ -using Newtonsoft.Json.Linq; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using NUnit.Framework; +using Studio.Conifg; +using Studio.Core; using Studio.Setting.Connect; +using Studio.Util; using System; using System.Collections.Generic; +using System.Linq; +using System.Threading; using System.Threading.Tasks; using UnityEngine; -using Studio; -using Studio.Core; -using Studio.Conifg; namespace Studio { + public class StudioServiceIdEventArgs : EventArgs + { + public readonly string Type; + public Dictionary Entity; + + public StudioServiceIdEventArgs(string type, Dictionary entity) + { + Type = type; + Entity = entity; + } + } + public class StudioServiceTypeEventArgs : EventArgs { public readonly string Type; - Dictionary Entitis; + public Dictionary> Entitis; - public StudioServiceTypeEventArgs(string type, Dictionary entity) + public StudioServiceTypeEventArgs(string type, Dictionary> entitis) { Type = type; - Entitis = entity; + Entitis = entitis; } } public class StudioService : UnitySingleton { - private Dictionary>> listenerIdMap; + private Dictionary>> listenerIdMap; + private Dictionary> listenerTypeMap; + private StudioRepoistory repository; private Dictionary updateTime = new(); + public bool isConnected + { + get + { + return repository.isConnected; + } + } + + #region 패킷계산 private int totalRequestPacket; private int totalResponsePacket; private long maxElapsedTime; private long totalElapsedTime; private int maxReponesSize; private int maxReuqestSize; - private string maxReuqestApi; private string maxResponseApi; private string maxResponseTimeApi; + #endregion - public Dictionary> apiData = new(); + public Dictionary>>> apiData = new(); public Dictionary>, TimeSpan)> mqttData = new(); private Dictionary lastUpdateTime = new(); @@ -46,26 +73,27 @@ namespace Studio public event Action> onAPIDataLoaded; public event Action>, TimeSpan> onMQTTDataLoaded; - public void ConnectMQTT() + private Dictionary> topicTable = new(); + public Dictionary> TopciTable { get { return topicTable; } } + + public void ConnectMQTT(string domain, string port, List topics) { this.repository = new StudioRepoistory(); - - // ✅ 명시적으로 필요한 Dictionary들 초기화 - listenerIdMap = new Dictionary>>(); - lastUpdateTime = new Dictionary(); - updateTime = new Dictionary(); - apiData = new Dictionary>(); - mqttData = new Dictionary>, TimeSpan)>(); + listenerIdMap = new Dictionary>>(); + listenerTypeMap = new Dictionary>(); repository.OnTopicList += OnTopicList; - repository.MQTTConnect(); + + var conntedInfo = $"MQTT Domain : {domain} , MQTTPORT :{port}"; + if (!topicTable.ContainsKey(conntedInfo)) + topicTable.Add(conntedInfo, new()); + topicTable[conntedInfo] = topics; + + repository.MQTTCreateConnect(domain, port); + + repository.MQTTConnect(conntedInfo); } - public void SubscribeMQTT(string topic) - { - repository.Subscribe(topic); - } - //Que에 담아둔다? private void OnTopicList(string type, Dictionary> entities) { DateTime now = DateTime.Now; @@ -97,29 +125,24 @@ namespace Studio { mqttData[type] = (entities, elapsedTime); } - - onMQTTDataLoaded?.Invoke(type, entities, elapsedTime); // 나중에 클래스 밖으로 이동 필요 } - private async Task UpdateTopicData(string type, string id, Dictionary entity) + private void UpdateTopicData(string type, string id, Dictionary entity) { if (!updateTime.ContainsKey(type)) updateTime.Add(type, 0.5f); var time = updateTime[type]; - - var task = Task.Run(async () => + var task = Task.Factory.StartNew(async () => { - var st = string.Empty; - st = $"{type}:"; int delayTime = (int)(time * 1000); await Task.Delay(delayTime); DispatchMachineEvent(type, id, entity); - }); + }, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()); + } private Dictionary>> timelineEntity = new(); - public bool TryGetRecentTimelineEntity(string type, string id, out Dictionary result) { result = null; @@ -137,13 +160,16 @@ namespace Studio return result != null; } - public void AddTypeListener(string type, string id, EventHandler listener) + public void AddTypeIdListener(string type, string id = null, EventHandler listener = null) { if (!listenerIdMap.ContainsKey(type)) { listenerIdMap.Add(type, new()); - //Debug.LogError($"Key Value is missing!!!! -Key:{type}-"); } + + if (id == null) + return; + if (!listenerIdMap[type].ContainsKey(id)) { listenerIdMap[type][id] = listener; @@ -153,6 +179,23 @@ namespace Studio listenerIdMap[type][id] += listener; } } + public void AddTypeListener(string type, EventHandler listener =null) + { + listenerTypeMap[type] = listener; + } + public void RemoveTypeListener(string type) + { + if (!listenerTypeMap.ContainsKey(type)) + return; + listenerTypeMap.Remove(type); + } + public void RemoveTypeIdListener(string type,string id) + { + if (!listenerIdMap[type].ContainsKey(id)) + return; + + listenerIdMap[type].Remove(id); + } public async Task LoadBaseData(string url) { @@ -169,13 +212,14 @@ namespace Studio { if (!apiData.ContainsKey(url)) apiData.Add(url, new()); - + data.lastRequestTime = startTime; data.lastResponseTime = endTime; data.elapsedTime = sw.Elapsed; - apiData[url] = data; CheckAPIBoarder(data.Entity.ToString(), data.ReqSize, url, t); - UpdateEntity(url, data.Entity.ToString()); + var entity = UpdateEntity(url, data.Entity.ToString()); + StudioEntityWithState>> convertData = new(data.State, entity, data.ReqSize, data.Message); + apiData[url] = convertData; } else if (data.State == APIState.Error) { @@ -223,10 +267,9 @@ namespace Studio boardEntity.MaximumResponsePacketAPI = maxResponseApi; boardEntity.MaximumResponseTimeAPI = maxResponseTimeApi; return boardEntity; - //JsonUtility.ToJson() } - public void UpdateEntity(string type, string data) + public List> UpdateEntity(string type, string data) { //Dcitionary 형으로 바꿈 JObject json = JObject.Parse(data); @@ -238,38 +281,56 @@ namespace Studio } var datas = json["rows"].ToString(); + var list = new List>(); JArray jarray = JArray.Parse(datas); foreach (JObject obj in jarray.Children()) { Dictionary keyvalue = new(); - int index = 0; string id = string.Empty; foreach (JProperty prop in obj.Children()) { string key = prop.Name.ToString(); string value = prop.Value.ToString(); - if (index == 0) - { - id = value; - index = 1; - } keyvalue.Add(key, value); } - DispatchMachineEvent(type, id, keyvalue); + list.Add(keyvalue); } + + return list; } private void DispatchMachineEvent(string type, string id, Dictionary entity) { if (!listenerIdMap.ContainsKey(type)) { - Debug.LogError($"Key Value is missing!!!! -Key:{type}-"); + Debug.Log($"Key Value is missing!!!! -Key:{type}-"); } if (listenerIdMap[type].ContainsKey(id)) { - listenerIdMap[type][id].Invoke(this, new StudioServiceTypeEventArgs(type, entity)); + listenerIdMap[type][id].Invoke(this, new StudioServiceIdEventArgs(type, entity)); + } + else + { + if (!listenerTypeMap.ContainsKey(type)) + return; + var data = new Dictionary>(); + data.Add(id, entity); + + if (entity == null) + return; + DispatchTypeMachineEvent(type, data); + } + } + + private void DispatchTypeMachineEvent(string type, Dictionary> entities) + { + + + if (listenerTypeMap.ContainsKey(type)) + { + listenerTypeMap[type].Invoke(this, new(type, entities)); } } } -} +} \ No newline at end of file diff --git a/Assets/Scripts/Studio/Interfaces/IInfo.cs b/Assets/Scripts/Studio/Interfaces/IInfo.cs new file mode 100644 index 00000000..45266fb5 --- /dev/null +++ b/Assets/Scripts/Studio/Interfaces/IInfo.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Studio.VirtualFactory.Info +{ + public interface IInfo + { + public abstract Dictionary Info + { + get; + } + public abstract Dictionary Label + { + get; + } + + } +} diff --git a/Assets/Scripts/Studio/Interfaces/IInfo.cs.meta b/Assets/Scripts/Studio/Interfaces/IInfo.cs.meta new file mode 100644 index 00000000..d5d3fe26 --- /dev/null +++ b/Assets/Scripts/Studio/Interfaces/IInfo.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0ae6ca4b2f15db14998f98d2baeb01c5 \ No newline at end of file diff --git a/Assets/Scripts/Studio/Machine/AGV/AGV.cs b/Assets/Scripts/Studio/Machine/AGV/AGV.cs index 4dfd6394..dd13afcf 100644 --- a/Assets/Scripts/Studio/Machine/AGV/AGV.cs +++ b/Assets/Scripts/Studio/Machine/AGV/AGV.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using UnityEngine; @@ -340,5 +340,7 @@ namespace Studio.Test { updateAction.Invoke(); } + + } } \ No newline at end of file diff --git a/Assets/Scripts/Studio/Machine/AGV/AGVManager.cs b/Assets/Scripts/Studio/Machine/AGV/AGVManager.cs index dcf7931e..4e2c08f6 100644 --- a/Assets/Scripts/Studio/Machine/AGV/AGVManager.cs +++ b/Assets/Scripts/Studio/Machine/AGV/AGVManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using UnityEngine; using Studio.Test; @@ -15,7 +15,7 @@ namespace Studio.Manage public override void Init() { - + } public bool TryGetIdleAGV(out AGV result) diff --git a/Assets/Scripts/Studio/Machine/DataReader.cs b/Assets/Scripts/Studio/Machine/DataReader.cs index b7e43c7e..2d199040 100644 --- a/Assets/Scripts/Studio/Machine/DataReader.cs +++ b/Assets/Scripts/Studio/Machine/DataReader.cs @@ -1,3 +1,4 @@ + using System.Collections; using UnityEngine; using System; @@ -26,7 +27,7 @@ public class DataReader : MonoBehaviour void Start() { //ReplayTimer.gameObject.SetActive(true); - // Resources ҷɴϴ. + // Resources 폴더에서 파일을 불러옵니다. csvFile = Resources.Load($"LogData/DataLog"); if (csvFile != null) @@ -38,7 +39,7 @@ public class DataReader : MonoBehaviour } else { - Debug.LogError("CSV ã ϴ."); + Debug.LogError("CSV 파일을 찾을 수 없습니다."); } } diff --git a/Assets/Scripts/Studio/TwinObject/DynamicObject.meta b/Assets/Scripts/Studio/TwinObject/DynamicObject.meta new file mode 100644 index 00000000..30224588 --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/DynamicObject.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5a2cf3d76009c0d41babf08313abbd91 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Studio/TwinObject/DynamicObject/AGV.cs b/Assets/Scripts/Studio/TwinObject/DynamicObject/AGV.cs new file mode 100644 index 00000000..161976d7 --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/DynamicObject/AGV.cs @@ -0,0 +1,138 @@ +using Studio.VirtualFactory; +using System; +using System.Linq; +using System.Collections.Generic; +using UnityEngine; +using Studio.VirtualFactory.Info; + +namespace Studio.Dynamic.TwinObject +{ + public class AGV : MonoBehaviour, IInfo + { + float dp; + Vector3 nextPos; + float startX; + float endX; + float startY; + float endY; + float rotSpeed; + float moveSpeed; + float xp; + float yp; + + Vector3 endPos; + Quaternion startRot; + Quaternion endRot; + + private Dictionary CurrentEntity; + + private bool isPlay = false; + + public Dictionary Info { + get + { + //ToDo 보고싶은 정보 나열한.. 리스트 목록 가져온다.. + return CurrentEntity; + } + } + + public Dictionary Label { + get + { + //ToDo 보고싶은 정보 나열한.. 리스트 목록 가져온다.. + return CurrentEntity; + } + } + + public void Init(string type,Vector3 pos) + { + transform.position = pos; + startX = transform.position.x; + startY = transform.position.z; + endX = transform.position.x; + endY = transform.position.z; + startRot = Quaternion.identity; + endRot = Quaternion.identity; + isPlay = true; + StudioService.instance.AddTypeIdListener(type, transform.name, OnUpdateData); + } + + internal void OnUpdateData(object sender, StudioServiceIdEventArgs e) + { + CurrentEntity = e.Entity; + var s = "{"; + foreach(var t in e.Entity) + { + s += $"{t.Key}: {t.Value},"; + } + s += "}"; + Debug.Log(s); + SetPos(); + } + + + private void SetPos() + { + dp = 0f; + xp = 0f; + yp = 0f; + + var xpos = CurrentEntity.FirstOrDefault(x => x.Key.Equals("x", StringComparison.OrdinalIgnoreCase)); + var ypos = CurrentEntity.FirstOrDefault(x => x.Key.Equals("y", StringComparison.OrdinalIgnoreCase)); + + + var x = float.Parse(xpos.Value) * 0.001f; + var z = float.Parse(ypos.Value) * 0.001f; + endPos = new Vector3(x, transform.position.y, z); + startX = transform.position.x; + startY = transform.position.z; + endX = endPos.x; + endY = endPos.z; + + //노드방향으로 회전값알기 + + var degree =CurrentEntity.FirstOrDefault(x => x.Key.Equals("DEGREE", StringComparison.OrdinalIgnoreCase)); + + var deg = float.Parse(degree.Value); + deg = 360f - deg; + startRot = transform.rotation; + endRot = Quaternion.AngleAxis(deg, Vector3.up); + } + + void PerforcedRotation() + { + if (dp >= 1f) + return; + dp += Time.deltaTime * rotSpeed; + transform.rotation = Quaternion.Lerp(startRot, endRot, dp); + } + private void Update() + { + if (isPlay == false) + return; + PerforcedMovement(); + PerforcedRotation(); + } + void PerforcedMovement() + { + + xp += Time.deltaTime * moveSpeed; + yp += Time.deltaTime * moveSpeed; + + var nx = Mathf.Lerp(startX, endX, xp); + var ny = Mathf.Lerp(startY, endY, yp); + nextPos = new Vector3(nx, 0, ny); + transform.position = nextPos; + } + + public void SetMoveSpeed(float speed) + { + moveSpeed = speed; + } + + public void SetRotateSpeed(float aGVRotateSpeed) + { + rotSpeed = aGVRotateSpeed; + } + } +} diff --git a/Assets/Scripts/Studio/TwinObject/DynamicObject/AGV.cs.meta b/Assets/Scripts/Studio/TwinObject/DynamicObject/AGV.cs.meta new file mode 100644 index 00000000..a2cead0a --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/DynamicObject/AGV.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 84ad40885a5aaa04e85eb7de0489cc8d \ No newline at end of file diff --git a/Assets/Scripts/Studio/TwinObject/DynamicObject/AGVManager.cs b/Assets/Scripts/Studio/TwinObject/DynamicObject/AGVManager.cs new file mode 100644 index 00000000..75946f11 --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/DynamicObject/AGVManager.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Studio.Dynamic.TwinObject; +using Studio.Core; + +namespace Studio.Dynamic.M +{ + public class AGVManager : UnitySingleton + { + private AGV prf_AGV; + public HashSet agvs = new(); + public float AGVMoveSpeed; + public float AGVRotateSpeed; + public Queue>> createAgvs = new(); + + public void Init() + { + prf_AGV = Resources.Load("TestAGV"); + StudioService.instance.AddTypeListener("AGV", OnDataUpdate); + StudioService.instance.AddTypeIdListener("AGV"); + } + /// + /// MQTT + /// + /// + /// + private void OnDataUpdate(object sender, StudioServiceTypeEventArgs e) + { + var entities = e.Entitis; + foreach(var entity in entities) + { + var key = entity.Key; + var value = entity.Value; + if (agvs.FirstOrDefault(x => x.name.Equals(key))) + { + Debug.Log($"중복된 ID {key}"); + continue; + } + var item = CreateAGV(e.Type, key,value); + agvs.Add(item); + } + } + + private AGV CreateAGV(string type, string id ,Dictionary entity) + { + var agv = Instantiate(prf_AGV,transform); + agv.transform.position = Vector3.zero; + agv.name = id; + agv.SetMoveSpeed(AGVMoveSpeed); + agv.SetRotateSpeed(AGVRotateSpeed); + var xPos = entity.FirstOrDefault(x => x.Key.Equals("X", StringComparison.OrdinalIgnoreCase)); + var yPos = entity.FirstOrDefault(x => x.Key.Equals("Y", StringComparison.OrdinalIgnoreCase)); + float.TryParse(xPos.Value, out var x); + float.TryParse(yPos.Value, out var y); + + var pos = new Vector3(x * 0.001f, 0, y * 0.001f); + agv.Init(type,pos); + return agv; + } + + /// + /// API 연결했을때 + /// + private void SetBaseUpdate() + { + var baseDatas = StudioService.instance.apiData; + var agvKey = baseDatas.Keys.FirstOrDefault(x => x.Contains("AGV", StringComparison.OrdinalIgnoreCase)); + var agvDatas = baseDatas[agvKey].Entity; + + foreach(var data in agvDatas) + { + var id = data.FirstOrDefault(x => x.Key.Equals("ID", StringComparison.OrdinalIgnoreCase)); + CreateAGV("AGV", id.Value, data); + } + + } + + + + } +} diff --git a/Assets/Scripts/Studio/TwinObject/DynamicObject/AGVManager.cs.meta b/Assets/Scripts/Studio/TwinObject/DynamicObject/AGVManager.cs.meta new file mode 100644 index 00000000..39b647c7 --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/DynamicObject/AGVManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1af5890e725b4a74397a6abcbc5c8b43 \ No newline at end of file diff --git a/Assets/Scripts/Studio/TwinObject/StaticObject.meta b/Assets/Scripts/Studio/TwinObject/StaticObject.meta new file mode 100644 index 00000000..f3151524 --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/StaticObject.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2597203444f235d43a8c02da446c3ff8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Studio/TwinObject/StaticObject/StackerCrane.cs b/Assets/Scripts/Studio/TwinObject/StaticObject/StackerCrane.cs new file mode 100644 index 00000000..71a04ffb --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/StaticObject/StackerCrane.cs @@ -0,0 +1,160 @@ +using Studio.VirtualFactory.Info; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using Unity.Mathematics; +using UnityEngine; + +namespace Studio.Staic.STKC +{ + public class StackerCrane : MonoBehaviour, IInfo + { + private Dictionary CurrentEntity; + public Dictionary Info + { + get + { + return CurrentEntity; + } + + } + + public Dictionary Label + { + get + { + return CurrentEntity; + } + } + + public string BANK; + public string BAY; + public string LEVEL; + + private float liftSpeed; + private float bodySpeed; + private float bodyProcess; + private float liftProcess; + + private float liftStartY; + private float liftEndY; + public Transform lift; + public Vector3 bodyStart; + public Vector3 bodyEnd; + + private Action onMotionStart; + + private int[] values = new int[3]; + private string curType; + public void Init(string type) + { + curType = type; + bodySpeed = 0.3f; + liftSpeed = 0.3f; + StudioService.instance.AddTypeIdListener(type, transform.name, OnUpdateData); + onMotionStart = StartAnim; + } + + public void AddInit(string type) + { + StudioService.instance.AddTypeIdListener(type, transform.name, OnAddOtherUpdateData); + } + + private void OnAddOtherUpdateData(object sender, StudioServiceIdEventArgs e) + { + } + + private void StartAnim() + { + StopAllCoroutines(); + StartCoroutine(MotionStart()); + } + + IEnumerator MotionStart() + { + while (liftProcess < 1f) + { + Sliding(); + Lifiting(); + yield return null; + } + } + void Sliding() + { + bodyProcess += Time.deltaTime * bodySpeed; + + if (bodyProcess >= 1f) + bodyProcess = 1f; + + var pos = math.lerp(bodyStart, bodyEnd, bodyProcess); + + transform.localPosition = pos; + } + + void Lifiting() + { + liftProcess += Time.deltaTime * liftSpeed; + if (liftProcess >= 1f) + { + liftProcess = 1f; + + } + + var liftY = math.lerp(liftStartY, liftEndY, liftProcess); + var liftPos = lift.position; + liftPos.y = liftY; + lift.position = liftPos; + } + + private void OnUpdateData(object sender, StudioServiceIdEventArgs e) + { + CurrentEntity = e.Entity; + + + BANK = CurrentEntity.FirstOrDefault(x => x.Key.Equals(nameof(BANK), StringComparison.OrdinalIgnoreCase)).Value; + BAY = CurrentEntity.FirstOrDefault(x => x.Key.Equals(nameof(BAY), StringComparison.OrdinalIgnoreCase)).Value; + LEVEL = CurrentEntity.FirstOrDefault(x => x.Key.Equals(nameof(LEVEL), StringComparison.OrdinalIgnoreCase)).Value; + + var x = int.Parse(BANK); + var y = int.Parse(LEVEL); + var z = int.Parse(BAY); + + if (IsSameValue(x, y, z)) + return; + + bodyProcess = 0f; + liftProcess = 0f; + bodyStart = transform.localPosition; + bodyEnd = bodyStart; + bodyEnd.z = z; + + liftStartY = lift.position.y; + liftEndY = y; + + onMotionStart?.Invoke(); + } + + private bool IsSameValue(int bank, int bay, int level) + { + + var sameBank = values[0].Equals(bank); + var sameLevel = values[1].Equals(level); + var sameBay = values[2].Equals(bay); + + if (sameBank && sameLevel && sameLevel) + return true; + + values[0] = bank; + values[1] = level; + values[2] = bay; + return false; + } + + private void OnDestroy() + { + StudioService.instance.RemoveTypeIdListener(curType, transform.name); + onMotionStart -= StartAnim; + } + } +} diff --git a/Assets/Scripts/Studio/TwinObject/StaticObject/StackerCrane.cs.meta b/Assets/Scripts/Studio/TwinObject/StaticObject/StackerCrane.cs.meta new file mode 100644 index 00000000..2411ff70 --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/StaticObject/StackerCrane.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0671ba3dd5120d84fa95f82f0b7004ca \ No newline at end of file diff --git a/Assets/Scripts/Studio/TwinObject/StaticObject/Stocker.cs b/Assets/Scripts/Studio/TwinObject/StaticObject/Stocker.cs new file mode 100644 index 00000000..84a18042 --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/StaticObject/Stocker.cs @@ -0,0 +1,54 @@ +using Studio.VirtualFactory.Info; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Studio.Staic.STK +{ + public class Stocker : MonoBehaviour, IInfo + { + private Dictionary CurrentEntity; + public Dictionary Info + { + get + { + return CurrentEntity; + } + + } + public Dictionary Label + { + get + { + return CurrentEntity; + } + } + + public void Init(string type) + { + StudioService.instance.AddTypeIdListener(type, transform.name, OnUpdateData); + } + + public void AddInit(string type) + { + StudioService.instance.AddTypeIdListener(type, transform.name, OnAddOtherUpdateData); + } + + private void OnAddOtherUpdateData(object sender, StudioServiceIdEventArgs e) + { + foreach(var keyvalue in e.Entity) + { + if (!CurrentEntity.ContainsKey(keyvalue.Key)) + CurrentEntity.Add(keyvalue.Key, ""); + + CurrentEntity[keyvalue.Key] = keyvalue.Value; + } + } + + private void OnUpdateData(object sender, StudioServiceIdEventArgs e) + { + CurrentEntity = e.Entity; + } + + } +} diff --git a/Assets/Scripts/Studio/TwinObject/StaticObject/Stocker.cs.meta b/Assets/Scripts/Studio/TwinObject/StaticObject/Stocker.cs.meta new file mode 100644 index 00000000..28864241 --- /dev/null +++ b/Assets/Scripts/Studio/TwinObject/StaticObject/Stocker.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e66bb97ac5ecbe748b9a207098542b4e \ No newline at end of file diff --git a/Assets/Scripts/Studio/UI/Elements/UI_APIConnection.cs b/Assets/Scripts/Studio/UI/Elements/UI_APIConnection.cs index 4a9e9d66..3fe6848f 100644 --- a/Assets/Scripts/Studio/UI/Elements/UI_APIConnection.cs +++ b/Assets/Scripts/Studio/UI/Elements/UI_APIConnection.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using XRLib.UI; using TMPro; using UnityEngine.UI; @@ -49,9 +49,9 @@ namespace Studio { onTestAPI?.Invoke(); - // API - Constants.APIDomain = InputField_Domain.text; - Constants.APIPort = int.Parse(InputField_Port.text); + // API 연결 + //ConfigConnected.APIDomain = InputField_Domain.text; + // ConfigConnected.APIPort = int.Parse(InputField_Port.text); //StudioService.instance.ConnectMQTT(); await AuthService.Instance.Login("xr", "@dbqlTl1"); diff --git a/Assets/Scripts/Studio/UI/Elements/UI_ButtonDropdown.cs b/Assets/Scripts/Studio/UI/Elements/UI_ButtonDropdown.cs index 0b5d3af9..827c3ee9 100644 --- a/Assets/Scripts/Studio/UI/Elements/UI_ButtonDropdown.cs +++ b/Assets/Scripts/Studio/UI/Elements/UI_ButtonDropdown.cs @@ -1,4 +1,4 @@ -using System.Collections; +using System.Collections; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; diff --git a/Assets/TMPFolder/Modal/UIModalManager.cs b/Assets/TMPFolder/Modal/UIModalManager.cs index ee41b25c..ffcafe7e 100644 --- a/Assets/TMPFolder/Modal/UIModalManager.cs +++ b/Assets/TMPFolder/Modal/UIModalManager.cs @@ -1,6 +1,6 @@ -using UnityEngine; +using Studio.Core; +using UnityEngine; using UnityEngine.SceneManagement; -using Studio.Core; using XRLib; namespace Studio.UI.Modal diff --git a/Assets/TMPFolder/Panel_APIDataInfo.cs b/Assets/TMPFolder/Panel_APIDataInfo.cs index c54afd25..161becb3 100644 --- a/Assets/TMPFolder/Panel_APIDataInfo.cs +++ b/Assets/TMPFolder/Panel_APIDataInfo.cs @@ -1,4 +1,4 @@ -using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; +using Best.HTTP.SecureProtocol.Org.BouncyCastle.Asn1.Pkcs; using Newtonsoft.Json; using Studio.Setting.Connect; using System.Collections.Generic; @@ -29,7 +29,7 @@ namespace Studio.UI RawDataFoldButton.GetComponent