VR/AR/MR
https://www.youtube.com/watch?v=K0DKilyNClM&t=1s
HMD (Head Mounted Display)
fov가 인간의 인지각인 120도 이상이면 현실성 높다.
Google Card Board
모바일 기반 HMD인 Google Card Board를 사용해 실습
ar cube는 앱스토어에서 "for merge cube" 앱 아무거나 다운받고 실행해 사용 가능
C# Language
유니티는 c# 언어라는 객체 언어 사용
순서대로의 진행이 아닌 특성별 진행 가능함
유니티는 .NET Framework 라는 가상환경을 통해 진행되는 운영체제라고 생각하면 쉬움
안드로이드폰과의 연결
Download Module for VR(Virtual Reality)
유니티 허브- INSTALLS에서 점 세개 아이콘 눌러서 위 그림처럼 다운로드
과거에는 jdk(java development kit)로 안드로이드 동작 환경을 만들어주고
sdk(sw development kit)로 안드로이드 앱 개발환경을 위해 설치 +android studio까지 설치해야했었음..
유니티와 Visual Studio 연동
Create C# Script
project-asset에서 우클릭으로 create-c# script 만들고
스크립트를 1,2,3 에 드래그해서 놓기로 적용(cube에 적용)
script 이름 설정이 중요함
클래스명 맨앞에 숫자가 먼저 나오면 error!
(rename해도 코드 상 파일명이 바뀌지 않는다면 삭제하고 다시 만들어야함)
console 창에서 실행 결과 확인
Method Test
그림 2)에서 ClassTest(스크립트 이름) : MonoBehaviour (최상위 부모 클래스에서 상속)
Start() : 초기값 설정
Update() : 업데이트마다 반복되는 값
3) int x, int y라는 변수
method call -> 호출
MonoBehaviour 클래스 안에 OnMouseEnter() 등등 method들 이미 들어있는 것
조건문 사용해보기
왼쪽처럼 start() 안에 int score=95; 하면 유효하지 않다는 error 발생
오른쪽처럼 start() 위에 전역변수로 설정해 변수 선언해줘야함
기본 설정값이 private(외부에서 접근 못한다)
변수 선언할 때
start 함수 위에 전역변수로 설정이 되어야함
int score; score=95; 이렇게 나눠서하면 error 발생
class 안에서는 대입이 안됌. 선언 동시에 해줘야함 ->문법의 문제
Making a Cube that increase number when it clicked
OnMouseDown()보다는 OnMouseUp()을 쓰는 것이 더 확실함
Down은 누르는 동안은 계속 출력되는데 Up은 마우스를 뗄 때에만 출력되므로
반복문 사용해보기
C# Script (Moving Object) 큐브를 움직여보자
새로운 창켜서 game object - 3d -plane과 cube를 불러온다.
스크립트 실행시 앞뒤로 이동한다.
speed라는 변수 설정, Update 안에 position이라는 변수 설정
~.~는 class의 method나 property 가져오는 것
~.~()면 함수 호출방식이라서 method / ~.~이면 propery
float position = Input.GetAxis("Vertical")
Input이라는 클래스의 GetAxis라는 method 값을 가져오는 것. 그 중 "Vertical"이라는 값 호출
position = 위로 가는 방향키 누르면 +1 / 아래방향키 -1/ 아무것도 누르지 않을 때는 0
position = position*speed*Time.deltaTime 에서 position +1/-1/0 되는것
transform.Translate(Vector3.forward*position)
Transform이라는 컴포넌트로 위치 및 크기 모두 변형
transform.Translate: transform에서 이동하는 Translate라는 method를 호출하는것
Translate 함수 의 인자로 넣어준 Vector3 는 누구의 좌표를 말하는 건가요
(Vector3.forward*position) :3차원 좌표의 x축*position
스크립트를 적용할 게임 오브젝트의 좌표를 의미해요 어떤 게임 오브젝트에 적용하느냐에 따라 달라집니다.
*Time.deltaTime 곱하는 이유
프레임이 늘어날수록 더 빠름 = 성능이 빠를수록 더 값이 커짐
성능좋은 폰에서는 빠르게 움직이고 나쁜 폰에서는 느리게 동작하므로
프레임을 곱해줘서 성능 좋은 폰에서는 좀 느려지고, 나쁜 폰에서는 좀 빨라지도록 처리.
프레임 수에 관련없이 일정하게 맞춰주기 위함
Making a Cube that can move
forward,backward,left and right with Arrow keys
오브젝트이동 기본노트 (Vector3 / Transform / Update() / Frame / Time.DeltaTime)
유니티에서 오브젝트를 움직이려면 기본적으로 알아야하는 것들이 있는데, 그 중에서 가장 이해가 잘 안되...
blog.naver.com
Manual
여기서 관련 정보/ 매뉴얼 얻기
Unity - Scripting API: MonoBehaviour
docs.unity3d.com
Material
매터리얼: 객체의 표면이나 질감 표현
색 입히기
Asset Store
금속, 나무 등 질감 표현 asset 가져오기
다운로드 하고 import 해줘야함
asset은 다운받아도 내 asset 창에 있을 뿐 거기서 매번 작업할 때마다 import 해야 작업에 가져와서 쓸수 있음
밑의 project 창에 새로운 asset 생긴거 확인 가능
나무질감 asset 다운 받고 적용한 모습
공이 통통 튀기도록 만들어보자
Sphere 구 만들고 선택, 높이 변경해 바닥 기준 위로 떠있도록
밑의 Add Component - physic - rigidbody
use gravity 체크하고
실행시켜보면 중력이 적용되서 떠있던 공이 바닥으로 툭 떨어짐을 확인할 수 있다.
이 때 바닥면 plane에 mesh collider 가 없으면
충돌을 인식하지 못하게 되어 공이 바닥을 통과하게 된다. 바닥에서 멈추도록 하려면 mesh collider 컴포넌트 추가
component 마다 설정값이 너무 많음. 다 외울 수 없음 -> manual에서 이름쳐서 확인
https://docs.unity3d.com/kr/current/Manual/class-Rigidbody.html
리지드바디 - Unity 매뉴얼
Rigidbody 는 GameObject 가 물리 제어로 동작하게 합니다. 리지드바디는 힘과 토크를 받아 오브젝트가 사실적으로 움직이도록 해줍니다. 리지드바디가 포함된 모든 게임 오브젝트는 중력의 영향을 ��
docs.unity3d.com
공이 통통 튀기도록 만들어보자 - Physics Material
sphere- sphere collider에 physics material이 적용됨을 확인
https://docs.unity3d.com/kr/current/Manual/class-PhysicMaterial.html
물리 머티리얼 - Unity 매뉴얼
Physic Material 은 충돌하는 오브젝트의 마찰 또는 바운스 효과를 조정하는 데 사용합니다.
docs.unity3d.com
bounciness =1
bounce combine = maximum으로 하면 공이 계속 통통 무한히 튕김
Transform
Vector3 v3; Vector3라는 클래스에 v3라는 변수를 설정함. class는 값을 직접적으로 넣지못함
그래서 일단 변수 클래스 안에 변수 설정해주고 new라는 값으로 Start() 안에 대입
Vector3=v3; 라고 쓰면 안되는 이유
int num; 처럼 Vector3는 (어떤 클래스인지 알려주는)클래스명이라고 생각하면 된다.
v3=new Vector3(0,0,1); 초기값에 넣어서 한번만 선언. Update()에 넣으면 매 프레임마다 선언되어 느려짐
new는 사전에 정의된 키워드로 변수나 클래스명으로 쓰일 수 없음
new는 항상 새 변수 설정할 때 써줘야 하나요?
#동적 클래스와 정적 클래스
정적 클래스(이미 메모리에 올라가있기 때문에 new 필요없이 사용하자마자 바로 사용가능. input 처럼)
ex. Input.GetAxis("Vertical");
동적 클래스 (쓸 때마다 메모리에 할당해줘야하는 클래스로 new라는 키워드로 변수 설정. Vector3 처럼)
ex. Vector3 v3; v3=new Vector3(0,0,1);
Update() 에 transform.Translate(v3); -> 매 프레임마다 z 쪽으로 1만큼 이동
클래스의 정적 특성: 속성 attribute / 동적 특성: 기능 method
붕어빵틀 : 클래스
붕어빵 : 인스턴스화 (메모리에 올리기) -> new를 이용해서 인스턴스를 만든다.
1 양의 값 -> 시계방향
-1 음의 값 ->시계반대방향
카메라와 위치를 기준으로 생각해야함
특정부위만 크기를 변경할 때 localScale
전체적인 크기를 변경할 때 lossyScale
키 입력받기
getAxis 처럼 특정키를 눌렀을 때 반응할 수 있도록
임의의 키는 KeyCode라는 정적 클래스를 이용해서 키에 대한 변수 값을 가져와 사용
둘 다 큐브가 왼쪽, 오른쪽 키를 눌렀을 때 각 방향으로 돌아가도록 하는 코드임
방법은 조금 다름
왼쪽은 인스턴스인 v3 안의 속성 값을 직접 바꿔준 것
오른쪽은 인스턴스를 아예 여러개 만들어서 넣어준 것
이 두 코드도 같은 결과를 나타냄
큐브가 왼쪽, 오른쪽 키를 눌렀을 때 각 방향으로 돌아가도록 하고
위, 아래키 눌렀을 때 앞 뒤로 움직이도록 하는 코드
스페이스바로 점프하도록 만들어보자 : Input Key - Jump
edit-project setting - input manager - axes - horizontal / jump/ ire1.......
fire1,2,3 -> 설정 커스터마이징 가능한 것들
안의
negative button, positive button 세팅되어있고 이 대체가 alt negative button, positive button
type -> joystick axis 있는 것처럼 키나 마우스 외에 조이스틱을 연결해 설정도 가능
점프를 시키려면 물리적인 무언가이여야 힘을 줄 수 있으므로
컴포넌트에서 physics - rigidbody 추가하고 jump 스크립트 넣어주기
GetButton은 우리가 커스터마이징한 "Jump"를 가져온것임
#getaxis랑 getkey의 차이
getaxis : 가운데를 기준으로 축을 구분. 중심을 기준으로 앞뒤(vertical)와 / 양옆(horizontal)을 구분할 때 사용
예를 들면 조이스틱에서의 앞 뒤 이동 /양 옆 이동
getkey: 의미를 부여한 임의의 키를 가져올 때 사용 (edit-project setting - input manager 로 키 매핑)
예를 들면 i 키를 누르면 item 창이 열리도록
1인칭 시점의 이동 : FPV(First Person View)
plane에서 scale: x 3 y 1 z 3으로 x,z 값 3배씩 늘려주고
기존에 있던 cube 이름을 Player로 바꾼다
새로운 cube를 만들고 이름을 Wall로 바꾸고
Wall에서 scale 조정해서 벽같은 모양으로 만들어준다
Main Camera를 Player의 안에 소속되도록 드래그해서 만들고
Camera 위치를 move tool을 이용해 이동시킨다. Player 오브젝트의 약간 뒤쪽에 위치하도록해 1인칭 시야를 확보한다.
rotate tool을 이용해 위 그림처럼 시야각도 변형가능
자주쓰는 Movement Script
public 을 넣어주면
오른쪽 그림처럼 unity 상에서 직접 값을 변경 가능해진다.
Time.deltaTime 곱해줘서 속도 조절
스크립트 asset 에 추가해놓으면 다른 작업에서 그대로 가져가 쓸 수 있음
Translate을 Rotate로 바꾸면 축을 x 축에서 y축으로 바꿔줘야함
충돌효과 Collision
새로운 큐브 만들어주고
wall 위에서 부딪히도록 만들어보자
큐브에 rigidbody 컴포넌트 추가해서 use gravity로 중력값 주어 실행했을 때 아래로 떨어지도록 만든다.
부딪혔을 때 "collision is detected!!"가 출력되도록 하는 c# script
왼 실행전/ 우 실행후
벽에 한번+바닥에 한번 부딪혀서 콘솔창에 collision is detected 두번 출력된다.
Sound Effect
밑의 asset directory - 우클릭에서 import new asset 하면 다운받은 파일 import 가능
큐브에 add component - audio -audio source
넣어줬다고 오디오가 재생되는게 아님 재생하는 스크립트 넣어줘야함
실행시키게 되면 충돌은 두번 나는데 소리는 세번 나게 된다.
audio source 컴포넌트에 Play on Awake가 디폴트로 체크되어있는데 이를 체크해지하면 충돌 때에만 소리가 난다.
Skybox 배경 바꾸기
박스 안에서 지켜보는 관점
만들어져있는 skybox와 커스터마이징법 알아보기
큐브 하나만 만들기
scale을 저런 길쭉한 형태로 만든 이유는 방향 파악 쉽게 보기 위해서
create- material
inspector 창에서 shader -standard로 되어있는 것을 skybox - 6 sided로 설정
실제로 실제사진(집사진,풍경 등)을 넣을 수도 있음. 대신 이어져야함 파노라마
Terrain 지형만들기
인터페이스가 자주 바뀜.. 바뀐다면 manual로 사용
단점은 컴퓨터 자원을 너무 잡아먹어서 컴이 느려짐
rpg 맵같은거에서 지형 탐험할 때 동굴, 산 등 만들 수 있는 것
set height에서 설정한 height 값이 최대 높이가 되도록 한다.
위 그림은 height 100으로 평평하게 고산지대를 만들어놓고 height 0으로 구멍 만들어서 분화구처럼 표현한 것
world Builder이라는 asset 다운받아서 나무를 심어보자
terrain에서 나무아이콘 누르고 밑의 edit trees - add tree 누르면 다음과 같은 창이 뜬다
prefab= 재사용할 수 있는 게임 오브젝트
드래그 해서 맵에 넣으면 된다!
브러쉬 사이즈 크기만큼 여러그루 생기는 것을 확인가능
asset store에서 캐릭터 가져오고 다른 에셋들도 가져와서 자신만의 세계만들어봅시다
prefab
3d object - sphere
project window -> create -> folder:prefabs 이라는 임의의 이름 부여 (파일로 관리가 유용)
폴더 안에 sphere를 드래그해서 넣으면 오브젝트의 색상이 바뀜
다시 폴더 안에 위치된 sphere를 다시 scene에 드래그하면 여러개 생성가능
project window -> create -> folder:material
prefab으로 생성된 오브젝트들 옆의 꺽쇠를 누르거나 prefab 안의 오브젝 더블클릭해 선택
선택한것에 material 먹이면..! 다음과 같다.
prefab으로 생성한 모든 오브젝들이 한번에 변형된다.
각기의 크기 조절도 가능하니 한번에 여러개 만들 때 매우매우 유용
안드로이드폰과의 연결
Download Module for VR(Virtual Reality)
유니티 허브- INSTALLS에서 점 세개 아이콘 눌러서 위 그림처럼 다운로드
과거에는 jdk(java development kit)로 안드로이드 동작 환경을 만들어주고
sdk(sw development kit)로 안드로이드 앱 개발환경을 위해 설치 +android studio까지 설치해야했었음..
Build and rUN unity app for android
안드로이드 플랫폼으로 바꿔주고 switch platform 버튼 누르면 import 시작
->안드로이드폰 디버그 모드 활성화
갤럭시 S6 "개발자 모드" 활성화 하기.
안드로이드 기기를 사용하다보면 "개발자 모드"를 켜야할 상황이 있습니다. 개발자 모드는 프로그램, 스마트기기관련 개발을 하는 사람들만 사용하는 메뉴가 아닙니다. 일반 사용자도 개발자 ��
hobby.tw
단말기마다 설정 방법이 다르기 때문에 구글링해서 찾아줘야함
갤럭시S6 USB디버깅 쉽게 설정하기
갤럭시S6 USB디버깅 쉽게 설정하기초간단 설정하기 입니다.. 사진보면서 잘 따라 오세요. 사진에 보이...
blog.naver.com
import 끝나면 run device에서 연결된 안드로이드폰으로 설정해준다.
player setting 누르면 새 창이 뜨고
com.[company name].[product name] -> 임의로 바꿔줌
api level check
uncheck the Android Tv Compatibility
끝내고 창 끈 후 build and run 버튼 누르기
VR : google sdk 다운 받아서 vr 환경 세팅하기
developers.google.com/vr/develop/unity/get-started-android#download_the_google_vr_sdk_for_unity
Quickstart for Google VR SDK for Unity with Android
This guide shows you how to set up Google VR development with Unity and build a demo Daydream or Cardboard app for Android. Set up your development environment Hardware requirements: Software requirements: Install Unity: Recommended version: LTS release 20
developers.google.com
github.com/googlevr/gvr-unity-sdk/releases
Releases · googlevr/gvr-unity-sdk
Google VR SDK for Unity. Contribute to googlevr/gvr-unity-sdk development by creating an account on GitHub.
github.com
package 다운받아서 import 하고
import package -custom package
edit - build setting - player setting - xr settings-virual reality sdks 체크 -플러스 눌러서 cardboard와 연결
-> build and run 하면 안드로이드에서 두개로 나눠진 창 보기 가능
이때 폰화면 켜있도록
sdk 다운받은거 package로 import하면 생기는 파일인 GvrEditorEmulator 찾아서 위쪽 오브젝창에 드래그
->카메라를 시점대로 이동할수 있도록 감지하는 역할
pitch = 야구 투수 = 위아래
roll = 옆으로
위 그림처럼 ALT, CTRL과 마우스로 시점이동
카메라 시점에 따라 보이도록 하는 script 추가해야 작동함
모델하우스 만들기
simple home asset 다운받고
이어서 독학해나가기
you-rang.tistory.com/2?category=798464
[Unity]02.인터페이스 알아보기
안녕하세요 유랑입니다. 오늘은 Unity3d에 쓰이는 기본적인 인터페이스에 대해 알아보겠습니다. 처음에는 깊게 들어가기보다는 얕게 알아가니 대강 파악하는 용도로만 쓰셔도 됩니다. 1. Tutorial P
you-rang.tistory.com
'T.I.L' 카테고리의 다른 글
아두이노 워크숍 2 (0) | 2021.03.27 |
---|---|
20201030 융복합 (0) | 2020.10.30 |
20201004_jsp 와 웹 상태유지 기법 (0) | 2020.10.04 |
20200929 융복합 아이디에이션 (0) | 2020.09.29 |
20200919_Lottie + AfterEffect 공부 시작 (0) | 2020.09.19 |