반응형
전시장에 설치된 모터가 달린 장비와 이전에 유니티로 제작한 키오스크 컨텐츠와 연동해야하는 일이 생겼다.
아래 사진처럼 키오스크+프로젝터 2면으로 제작되었었으나 중앙의 청동거울이 회전할 수 있도록 개선(?)되었다.
전시 업체에서 회전하는 기능을 만들어 주었고, 간단히 시리얼로 메세지만 보내면 동작하도록 제공해주었다.
현장에 있는 장비를 뜯어올 수도없고...
뭐 일단 메세지 들어오는 것만 확인만하면 되기 때문에 전송되는 메세지값(180도 회전(앞), 180도 회전(뒤)) 만 확인하고 후퇴.
준비
- 가상 시리얼 포트 프로그램(VSPE)
유니티에서 신호만 보내는 것만 확인하면 된다.
https://eterlogic.com/ 에서 다운로드 가능하다.
64비트는 라이센스가 필요하다고하니 32비트로 받자.
- 설치 후 실행
라이센스 없다고 하는데 가볍게 패스(No~!)
실행 후 연결을 생성하고
디바이스 타입 : Connector
포트번호 : 활용할(연결된) 번호
실행 버튼을 누르면 상태창에 "Ready"가 뜬다.
간혹, 다른 장비(블루투스 등)이 이미지 사용중일 경우에는 활성화가 안되니 미리 확인합시다.(장치관리자에서 확인가능)
![]() |
![]() |
![]() |
![]() |
- Unity 연동
Update에서 전송을 받는 부분이 있으나 실제로 사용하지는 않음.
(테스트를 목적으로 인풋박스와 버튼 오브젝트 만들어서 테스트용으로 연결해놓음)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO.Ports;
public class SerialConn : MonoBehaviour
{
// 시리얼 연결을 위한 기본 설정
public string deviceName = "COM1"; // 기기 이름
public int baudRate = 9600; // 보드레이트
private SerialPort serialPort; // 시리얼 포트 객체
// 시작 시 시리얼 포트 초기화
void Start()
{
InitializeSerialPort();
}
// 시리얼 포트를 찾고 초기화합니다.
private void InitializeSerialPort()
{
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
if (port.Contains(deviceName))
{
serialPort = new SerialPort(port, baudRate);
serialPort.ReadTimeout = 1000; // 읽기 타임아웃 설정
serialPort.Open();
break;
}
}
}
// 매 프레임마다 시리얼 데이터 확인
void Update()
{
ReadSerialData();
}
// 시리얼 포트에서 데이터를 읽습니다.
private void ReadSerialData()
{
if (serialPort != null && serialPort.IsOpen && serialPort.BytesToRead > 0)
{
string data = serialPort.ReadLine();
Debug.Log("전송받은 데이터: " + data);
}
}
// 데이터를 시리얼 포트로 보냅니다.
public void SendData(string data)
{
if (serialPort != null && serialPort.IsOpen)
{
serialPort.Write(data);
}
}
// 객체 소멸 시 포트 닫기
void OnDestroy()
{
CloseSerialPort();
}
// 시리얼 포트를 닫습니다.
private void CloseSerialPort()
{
if (serialPort != null && serialPort.IsOpen)
{
serialPort.Close();
}
}
}
끝! 내일 아침가서 테스트해야지.(집앞이라 다행임)
반응형
'개발 > Unity3D' 카테고리의 다른 글
[shader] 오로라 (0) | 2024.07.01 |
---|---|
Unity Busy for... 버그? 오류 해결방법을 찾아보다. (0) | 2024.04.24 |
오브젝트 드래그/드롭 기능에 스냅을 붙여 퍼즐 만들기 (0) | 2024.04.23 |
Unity3D 전역변수 사용방법 3가지 (0) | 2024.04.22 |
동적 UI와 정적 UI의 정의 (0) | 2024.04.21 |