<feat> 프로그램 진입 시 로봇 모터 ON/OFF 표시

This commit is contained in:
2025-10-15 10:39:44 +09:00
parent 9729128a8b
commit c6cba07b65
20 changed files with 197 additions and 8 deletions

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 443 B

After

Width:  |  Height:  |  Size: 443 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 952 B

After

Width:  |  Height:  |  Size: 952 B

View File

Before

Width:  |  Height:  |  Size: 515 B

After

Width:  |  Height:  |  Size: 515 B

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: bcb92e77bd548574f8f4b48f5fd1e3c1
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,136 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &-8305441673117509560
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 9
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Mat_Red
m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap:
RenderType: Opaque
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0
- _AlphaToMask: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Cull: 2
- _Cutoff: 0.5
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _EnvironmentReflections: 1
- _GlossMapScale: 0
- _Glossiness: 0
- _GlossyReflections: 0
- _Metallic: 0
- _OcclusionStrength: 1
- _Parallax: 0.005
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Smoothness: 0.5
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _WorkflowMode: 1
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 0.6666667, b: 0.6666667, a: 1}
- _Color: {r: 1, g: 0.6666667, b: 0.6666667, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: df96bbc2c295a7d4bbb26fdeab9193dd
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -3,13 +3,15 @@ using UnityEngine;
public class AppManager : MonoBehaviour
{
[SerializeField] private ProgramView view;
[SerializeField] private RobotController robotController;
void Start()
{
ProgramModel model = new ProgramModel();
ProgramPresenter presenter = new ProgramPresenter(model, view);
presenter.RegisterControlledRobot(robotController);
view.DisplayProgram(null);
}
}

View File

@@ -7,10 +7,12 @@ public class RobotProgram
{
public string programId;
public List<Vector3> endpointPositions;
private bool motorState;
public RobotProgram(string id)
{
programId = id;
endpointPositions = new List<Vector3>();
motorState = true;
}
}

View File

@@ -4,6 +4,7 @@ public class ProgramPresenter
{
private ProgramModel model;
private ProgramView view;
private RobotController controlledRobot;
public ProgramPresenter(ProgramModel model, ProgramView view)
{
@@ -17,11 +18,31 @@ public class ProgramPresenter
this.view.OnAddPointClicked += HandleAddPoint;
}
public void RegisterControlledRobot(RobotController robot)
{
this.controlledRobot = robot;
}
public void OnApplicationStart()
{
if (controlledRobot != null)
{
Debug.Log("로봇 모터를 ON 상태로 설정합니다.");
controlledRobot.SetMotorState(true);
}
else
{
Debug.LogError("제어할 로봇이 등록되지 않았습니다");
}
}
private void HandleCreateProgram(string programId)
{
if (model.CreateNewProgram(programId))
{
view.DisplayProgram(model.CurrentProgram);
view.HideProgramSelectPanel();
OnApplicationStart();
}
else
{
@@ -40,8 +61,11 @@ public class ProgramPresenter
if (model.LoadProgram(programId))
{
view.DisplayProgram(model.CurrentProgram);
view.HideProgramSelectPanel();
view.HideProgramList();
OnApplicationStart();
}
view.HideProgramList();
}
private void HandleSaveProgram()

View File

@@ -15,6 +15,7 @@ public class ProgramView : MonoBehaviour
//[SerializeField] private TextMeshProUGUI endpointListText;
// --- 프로그램 목록 패널 ---
[SerializeField] private GameObject programSelectPanel;
[SerializeField] private GameObject programListPanel;
[SerializeField] private Transform programButtonContent;
[SerializeField] private GameObject programButtonPrefab;
@@ -49,6 +50,7 @@ public class ProgramView : MonoBehaviour
loadIconButton.onClick.AddListener(HandleLoadIconClick);
closeProgramListButton.onClick.AddListener(HideProgramList);
programSelectPanel.SetActive(true);
programListPanel.SetActive(false);
loadProgramButton.gameObject.SetActive(false);
programIdText.text = string.Empty;
@@ -86,12 +88,14 @@ public class ProgramView : MonoBehaviour
public void DisplayProgram(RobotProgram program)
{
//if (program == null)
//{
// currentProgramIdText.text = "No Program Loaded";
// endpointListText.text = "";
// return;
//}
if (program == null)
{
//currentProgramIdText.text = "No Program Loaded";
//endpointListText.text = "";
Debug.Log("No Program Loaded");
return;
}
Debug.Log($"연결된 프로그램: {program.programId}.job");
//currentProgramIdText.text = "Current: " + program.programId;
@@ -137,4 +141,9 @@ public class ProgramView : MonoBehaviour
{
programListPanel.SetActive(false);
}
public void HideProgramSelectPanel()
{
programSelectPanel.SetActive(false);
}
}