유니티와아두이노를활용한 -...
Transcript of 유니티와아두이노를활용한 -...
![Page 1: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/1.jpg)
㈜헬로앱스 코딩교육
유니티와 아두이노를 활용한
VR 컨트롤러 개발
김영준
공학박사, 목원대학교 겸임교수前 Microsoft 수석연구원
[email protected]://www.helloapps.co.kr
![Page 2: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/2.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
목차 1. 툴 설치
2. 아두이노 컨트롤러 개발 실습
3. 유니티 기본 명령어 실습
4. 유니티 VR 콘텐츠 개발 실습
5. 블루투스를 이용한 아두이노 컨트롤러 연동 실습
![Page 3: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/3.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
SW 설치
![Page 4: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/4.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
SW 설치
Java SE (JDK) 설치
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Google Android Studio 설치
https://developer.android.com/studio/index.html
유니티 설치
http://www.unity3d.com (회원 가입후 로그인 필요)
아두이노 코딩 SW 설치
(초보자) http://www.helloapps.co.kr/download
(전문가) http://www.arduino.cc
![Page 5: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/5.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
아두이노 컨트롤러 개발 실습
![Page 6: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/6.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
조이스틱 연결하기
Y축
X축
버튼
아날로그 0번
아날로그 1번
디지털 2번
아두이노 보드
![Page 7: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/7.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
아두이노 명령어
• digitalWrite (핀번호, 값)
• d = digitalRead(핀번호)
• a = analogRead(핀번호)
• delay(밀리초)
• a = map(a, 0, 1023, 0, 500)
![Page 8: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/8.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
LED 점멸 제어 실습
void setup()
{
}
void loop()
{
DigitalWrite(13, HIGH)
Delay(1000)
DigitalWrite(13, LOW)
Delay(1000)
}
실습)• LED 점멸 간격을 더 짧게 조절하기void setup()
{
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
![Page 9: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/9.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
버튼값 읽기
void setup(){
}
void loop(){
d2 = DigitalRead(2)PrintLine(d2)Delay(100)
}
실습)• 버튼이 눌려지면 LED 켜기
void setup(){
pinMode(2, INPUT);Serial.begin(115200);
}
void loop(){
int d2 = digitalRead(2);Serial.println(d2);delay(100);
}
![Page 10: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/10.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
구구단 출력하기
Print와 PrintLine 명령어를 이용하여 다음과 같이 출력하시오
7 x 1 = 77 x 2 = 147 x 3 = 217 x 4 = 287 x 5 = 357 x 6 = 427 x 7 = 497 x 8 = 567 x 9 = 63
Print와 PrintLine 명령어를 이용하여 원하는문자열을 생성해 낼 수 있어야 함
![Page 11: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/11.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
조이스틱값 읽기
void setup(){
}
void loop(){
x = AnalogRead(0)y = AnalogRead(1)Print(x)Print(" / ")PrintLine(y)Delay(100)
}
조이스틱의 Y축 -> 아날로그 0번에 연결
조이스틱의 X축 -> 아날로그 1번에 연결
조이스틱을 옆으로 회전하여 사용하기 때문에
프로그램에서는 X축과 Y축을 변경하여 사용
Y축
X축
버튼
아날로그 0번
아날로그 1번
디지털 2번
void setup(){
Serial.begin(115200);}
void loop(){
int x = analogRead(0);int y = analogRead(1);Serial.print(x);Serial.print(" / ");Serial.println(y);delay(100);
}
![Page 12: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/12.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
Map 함수를 이용하여 값 변환하기
void setup(){
}
void loop(){
x = AnalogRead(0)y = AnalogRead(1)
x = map(x, 0, 1023, -500, 500)y = map(y, 0, 1023, -500, 500)
Print(x)Print(" / ")PrintLine(y)Delay(100)
}
void setup(){
Serial.begin(115200);}
void loop(){
int x = analogRead(0);int y = analogRead(1);
x = map(x, 0, 1023, -500, 500);y = map(y, 0, 1023, -500, 500);
Serial.print(x);Serial.print(" / ");Serial.println(y);delay(100);
}
![Page 13: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/13.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
Map 함수를 이용하여 값 변환하기
void setup(){
}
void loop(){
x = AnalogRead(0)y = AnalogRead(1)
x = map(x, 0, 1023, -500, 500)y = map(y, 0, 1023, -500, 500)
if (abs(x) < 30)x = 0
if (abs(y) < 30)y = 0
Print(x)Print(" / ")PrintLine(y)Delay(100)
}
void setup(){
Serial.begin(115200);}
void loop(){
int x = analogRead(0);int y = analogRead(1);
x = map(x, 0, 1023, -500, 500);y = map(y, 0, 1023, -500, 500);
if (abs(x) < 30)x = 0;
if (abs(y) < 30)y = 0;
Serial.print(x);Serial.print(" / ");Serial.println(y);delay(100);
}
![Page 14: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/14.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
외부 전송 데이터 생성하기
void loop(){
d = DigitalRead(2)x = AnalogRead(0)y = AnalogRead(1)
x = map(x, 0, 1023, -500, 500)y = map(y, 0, 1023, -500, 500)
if (abs(x) < 30)x = 0
if (abs(y) < 30)y = 0
Print("<")Print(d)Print(",")Print(x)Print(",")Print(y)PrintLine(">")Delay(100)
}
<d,x,y>
void setup(){
pinMode(2, INPUT);Serial.begin(115200);
}
void loop(){
int d = digitalRead(2);int x = analogRead(0);int y = analogRead(1);x = map(x, 0, 1023, -500, 500);y = map(y, 0, 1023, -500, 500);if (abs(x) < 30)
x = 0;if (abs(y) < 30)
y = 0;Serial.print("<");Serial.print(d);Serial.print(",");Serial.print(x);Serial.print(",");Serial.print(y);Serial.println(">");delay(100);
}
![Page 15: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/15.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
유니티 기본 명령어 실습
![Page 16: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/16.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
3D물체 생성하기
Object Component
Component
Component
Component
CubeTransform
Box Collider
Mesh Renderer
![Page 17: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/17.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
물체 제어하기
• Scene_Main으로 씬 저장
• Cube 오브젝트 추가
• Scripts 폴더 생성
• 새로운 C# 스크립트 생성
• 스크립트 이름은 RotateObject 로 수정
• Cube 오브젝트에 스크립트 연결
![Page 18: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/18.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
물체 제어하기
using System.Collections;using System.Collections.Generic;using UnityEngine;
public class RotateObject : MonoBehaviour {
Transform TR;
void Start () {TR = transform;
}
void Update () {TR.Rotate( new Vector3(0, 1, 0) );
}}
![Page 19: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/19.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
키보드로 물체 제어하기 (회전)
using System.Collections;using System.Collections.Generic;using UnityEngine;
public class RotateObject : MonoBehaviour {
Transform TR;
void Start () {TR = transform;
}
void Update () {float h = Input.GetAxis("Horizontal");TR.Rotate(new Vector3(0, h, 0));
}}
using System.Collections;using System.Collections.Generic;using UnityEngine;
public class RotateObject : MonoBehaviour {
Transform TR;
void Start () {TR = transform;
}
void Update () {float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");TR.Rotate(new Vector3(v, h, 0));
}}
![Page 20: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/20.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
키보드로 물체 제어하기 (이동)
using System.Collections;using System.Collections.Generic;using UnityEngine;
public class RotateObject : MonoBehaviour {
Transform TR;
void Start () {TR = transform;
}
void Update () {float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");
TR.Rotate(new Vector3(0, h, 0));TR.Translate(TR.forward * v);
}}
![Page 21: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/21.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
에셋 추가하기
• 유니티 에셋스토어 접속
• Free Sci-Fi Textures 검색
• Download 및 설치
![Page 22: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/22.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
에셋 추가하기
• Plane 추가
• 바닥에 텍스처 추가
• Cube에 텍스처 추가
![Page 23: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/23.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
키보드로 물체 생성하기
• Cube 오브젝트에서 RotateObject 스크립트 제거
• Cube 오브젝트에 질량을 추가해 준다.
• 빈 오브젝트 생성
• 이름을 GameControlObject로 수정
• 새로운 C# 스크립트 생성
• 스크립트 이름은 MainControlScript 로 수정
• 빈 오브젝트에 스크립트 연결
![Page 24: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/24.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
키보드로 물체 생성하기
public class MainControlScript : MonoBehaviour {
public GameObject CubeObject;
void Start () {
}
void Update () {
if (Input.GetKeyDown(KeyCode.Space)){
Instantiate(CubeObject, new Vector3(0, 5, 0), Quaternion.identity);}
}}
![Page 25: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/25.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
랜덤 위치에 물체 생성하기
public class MainControlScript : MonoBehaviour {
public GameObject CubeObject;
void Start () {
}
void Update () {
if (Input.GetKeyDown(KeyCode.Space)){
float x = Random.Range(-10f, 10f);float z = Random.Range(-10f, 10f);Instantiate(CubeObject, new Vector3(x, 10, z), Quaternion.identity);
}
}}
![Page 26: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/26.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
임의의 방향으로 떨어지도록 하기
public class MainControlScript : MonoBehaviour {
public GameObject CubeObject;
void Start () {
}
void Update () {
if (Input.GetKeyDown(KeyCode.Space)){
float x = Random.Range(-10f, 10f);float z = Random.Range(-10f, 10f);
float o_x = Random.Range(-45f, 45f);float o_y = Random.Range(-45f, 45f);float o_z = Random.Range(-45f, 45f);
GameObject new_object = Instantiate(CubeObject, new Vector3(x, 10, z), Quaternion.identity);new_object.transform.eulerAngles = new Vector3(o_x, o_y, o_z);
}
}}
![Page 27: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/27.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
유니티 VR 콘텐츠 개발 실습
![Page 28: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/28.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
탄성 기능 추가
• 바닥에 RigidBody 컴포넌트 추가
• IsKinematic 선택
![Page 29: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/29.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
탄성 기능 추가
• Asset -> Create -> Physical Materials 생성
• Cube와 Plane에 할당
![Page 30: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/30.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
일정한 간격으로 자동으로 떨어지도록 기능 수정
public class MainControlScript : MonoBehaviour {
public GameObject CubeObject;
float temp_time = 0;
void Start () {
}
void Update () {
if ((Time.time - temp_time) > 1){
temp_time = Time.time;
float x = Random.Range(-10f, 10f);float z = Random.Range(-10f, 10f);
float o_x = Random.Range(-45f, 45f);float o_y = Random.Range(-45f, 45f);float o_z = Random.Range(-45f, 45f);
GameObject new_object = Instantiate(CubeObject, new Vector3(x, 10, z), Quaternion.identity);new_object.transform.eulerAngles = new Vector3(o_x, o_y, o_z);
}}
}
![Page 31: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/31.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
종료기능 추가
public class MainControlScript : MonoBehaviour {
public GameObject CubeObject;float temp_time = 0;void Start () {
}
void Update () {
if ((Time.time - temp_time) > 1){
temp_time = Time.time;
float x = Random.Range(-10f, 10f);float z = Random.Range(-10f, 10f);
float o_x = Random.Range(-45f, 45f);float o_y = Random.Range(-45f, 45f);float o_z = Random.Range(-45f, 45f);
GameObject new_object = Instantiate(CubeObject, new Vector3(x, 10, z), Quaternion.identity);new_object.transform.eulerAngles = new Vector3(o_x, o_y, o_z);
}
if (Input.GetKeyDown(KeyCode.Escape))Application.Quit();
}}
![Page 32: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/32.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
실행 파일 빌드 테스트 (윈도우 버전)
![Page 33: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/33.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
VR 세팅
![Page 34: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/34.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
AR 카메라 추가
![Page 35: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/35.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
AR 카메라 설정
![Page 36: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/36.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
AR 카메라 설정
![Page 37: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/37.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
AR 카메라 설정
![Page 38: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/38.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
안드로이드 빌드하기
![Page 39: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/39.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
안드로이드 배포하기
• 생성된 APK 파일을 USB 케이블로 복사 후 설치
• 케이블이 없는 경우, 본인의 이메일로 파일 배포후 설치
![Page 40: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/40.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
블루투스를 이용한 아두이노
컨트롤러 연동 실습
![Page 41: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/41.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
아두이노 보드에 블루투스 연결하기
• 아두이노 보드의 디지털 0번과 1번에 각각 블루투스 Rx, Tx 케이블을 연결한다.
• GND와 5V 케이블도 아두이노의 GND와 5V 핀에 연결한다.
![Page 42: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/42.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
블루투스 패키지 설치하기
• 강사를 통해 배포된 HelloApps 블루투스 커스텀 패키지 복사 및 설치
HelloAppsBT.unitypackage
![Page 43: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/43.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
블루투스 패키지 설치하기
![Page 44: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/44.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
블루투스 패키지 설치하기
![Page 45: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/45.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
블루투스 패어링하기
• 안드로이드 스마트폰에서 블루투스 켜기
• 장치 추가한 후, 아두이노에 연결되어 있는 블루투스 이름 검색후 추가
• 비밀번호는 “1234” 입력
![Page 46: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/46.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
블루투스 디바이스 이름 추가하기using UnityEngine;using System.Collections;
public class BTBasicScript : MonoBehaviour{
string fromArduino = "" ;
void Start (){
BtConnector.moduleName ("SPL V3 B0015");BtConnector.connect();
}
void Update(){
if (Input.GetKeyDown(KeyCode.Escape)){
BtConnector.close();}
if (BtConnector.isConnected() && BtConnector.available()){
fromArduino = BtConnector.readLine();}
}
void OnGUI(){
GUI.Label(new Rect(0, 20, Screen.width, Screen.height*0.1f),"Arduino : " + fromArduino);GUI.Label(new Rect(Screen.width * 0.5f, 20, Screen.width, Screen.height * 0.1f), “Status : " + BtConnector.readControlData());
}}
![Page 47: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/47.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
디바이스 연결 테스트
• 앱 빌드후 배포
• 아두이노 보드 전원 재연결
• 앱 실행
프로그램 상단에 연결 및 메시지 정보 표시되는 지 확인
![Page 48: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/48.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
카메라 이동과 회전 제어
using System.Collections;using System.Collections.Generic;using UnityEngine;
public class BTControl_Sample_01 : MonoBehaviour{
public GameObject AR_Camera_Container;public GameObject Cube_Object;
string fromArduino = "";
Transform TR = null;
void Start(){
TR = AR_Camera_Container.transform;
BtConnector.moduleName("SPL V3 B0015");BtConnector.connect();
}
…}
void Update(){
if (Input.GetKeyDown(KeyCode.Escape)){
BtConnector.close();}
if (BtConnector.isConnected() && BtConnector.available()){
fromArduino = BtConnector.readLine();
if (fromArduino.StartsWith("<") && fromArduino.EndsWith(">")){
string data = fromArduino.TrimStart('<').TrimEnd('>');string[] arr = data.Split(new char[] { ',' });
string btn = arr[0];float x = float.Parse(arr[1]);float y = float.Parse(arr[2]);
x = x / 500f;y = y / 500f;
TR.Translate(transform.forward * Time.deltaTime * y * 5);TR.Rotate(new Vector3(0, Time.deltaTime * x * -10, 0));
}}
}
![Page 49: 유니티와아두이노를활용한 - vulkan.co.krvulkan.co.kr/doc_lectures/유니티_아두이노_VR_컨트롤러_개발_헬로앱스... · ㈜헬로앱스코딩교육 유니티와아두이노를활용한](https://reader030.fdocuments.net/reader030/viewer/2022041302/5e11bb6a19c84a0e2d254fa1/html5/thumbnails/49.jpg)
유니티와 아두이노를 활용한 VR 컨트롤러 개발
박스 발사하는 기능 추가
using System.Collections;using System.Collections.Generic;using UnityEngine;
public class BTControl_Sample_02 : MonoBehaviour {
public GameObject AR_Camera_Container;public GameObject AR_Camera;public GameObject Cube_Object;
string fromArduino = "";
Transform TR = null;
void Start(){
TR = AR_Camera_Container.transform;
BtConnector.moduleName("SPL V3 B0015");BtConnector.connect();
}
}
void Update(){
if (Input.GetKeyDown(KeyCode.Escape)){
BtConnector.close();}
if (BtConnector.isConnected() && BtConnector.available()){
fromArduino = BtConnector.readLine();
if (fromArduino.StartsWith("<") && fromArduino.EndsWith(">")){
string data = fromArduino.TrimStart('<').TrimEnd('>');string[] arr = data.Split(new char[] { ',' });
string btn = arr[0];float x = float.Parse(arr[1]);float y = float.Parse(arr[2]);
x = x / 500f;y = y / 500f;
TR.Translate(transform.forward * Time.deltaTime * y * 5);TR.Rotate(new Vector3(0, Time.deltaTime * x * -10, 0));
if (btn == "0"){
GameObject new_object = Instantiate<GameObject>(Cube_Object, TR.position, TR.rotation);
Rigidbody rb = new_object.transform.GetComponent<Rigidbody>();
rb.AddForce(AR_Camera.transform.forward * 1000);}
}}
}