//구글콘솔 광고 추가가
고급 언어와 저급 언어란?

 

고급언어 : 개발자가 이해하기 쉽게 만든 언어

 

저급언어: 컴퓨터가 이해하고 실행하는 언어

  • 기계어 : 이진수(0과1)로 이루어진 명령어
  • 어셈블리어 : 0과 1로 이루어진 기계어를 읽기 편한 형태로 번역한 저급 언어

 

고급언어를 저급언어로 변환 하는 과정에는 컴파일방식과 인터프리터방식이 있음.
  • 컴파일 언어: 고급언어에서 쓴 소스 코드를 컴파일러에 의해 컴파일이 되어 저급언어인 목적코드로 변환이 됨. 컴파일러에 의해 소스코드를 전부 훑어보고 전체를 목적코드로 컴파일함. 이로 인해 소스코드 컴파일 중간에 오류가 발생하면 소스전체가 실행되지 않음.
  • 인터프리트 언어: 인터프리터에 의해 한 줄씩 실행. 소스코드 전체가 저급언어로 변환되기까지 기다릴 필요 X. 한줄씩 실행하기 때문에 소스코드 인터프리트 중 오류가 발생하면 오류 발생 전까지 코드는 실행됨.

** 컴파일과 인터프리트 과정을 살펴보려면

: https://godbolt.org/ 여기서 고급언어를 선택한 후 소스코드를 적어보면 저급언어로 어떻게 변환되는지 확인 가능.

 

728x90
문자 집합과 인코딩

  • 문자 집합(Character set) : 컴퓨터가 이해(표현)할 수 있는 문자의 모음
  • 인코딩(encoding) : 코드화하는 과정, 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정.
  • 디코딩(decoding) : 코드를 해석하는 과정, 0과 1로 표현된 문자 코드로 문자로 변환하는 과정, 인코딩의 반대

 

대표적이고, 대중적인 문자 집합, 인코딩 방법인
" 아스키 코드 "
  • 초창기 문자 집합 중 하나.
  • 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자.
  • 7비트로 하나의 문자 표현(실제로는 8비트를 쓰지만 1비트는 오류 검출을 위해 사용되는 패리티 비트(parity bit)) == 0부터 127개의 아스키코드가 있으며 총개수는 2의 7승인 128개.
  • A는 65로 인코딩, a는 97로 인코딩.
  • 장점 : 간단한 인코딩.
  • 단점 : 한글을 포함한 다른 언어 문자, 다양한 특수 문자 표현 불가 - 아스키 코드는 7비트로 하나의 문자를 표현하기에 128개보다 많은 문자를 표현할 수 없음. 8비트 확장 아스키가 등장했지만, 여전히 부족함.

한글 인코딩: 완성형 인코딩(ex: 남) vs 조합형(ex: ㄴ + ㅏ + ㅁ) 인코딩

  • 초성, 중성, 종성의 조합으로 이루어진 한글은 전체를 하나로 묶어 글자 하나를 인코딩할지(완성형 인코딩), 다 나눠서 각각 인코딩할지(조합형 인코딩)로 나뉨.
  • EUC-KR : KS X 1001 KS X 1003 문자집합 기반의 한글 인코딩 방식, 완성형 인코딩이며 글자 하나하나에 2바이트 크기의 코드 부여(dencode.com에서 테스트확인 가능). 하지만 모든 한글을 표현할 순 없음.
하지만 모든 한글을 표현할순 없다. >> 그래서 만들어진 유니코드 문자집합
  • 이걸 해결 하기 위해 통일된 문자 집합인 유니코드 문자 집합이 만들어짐. - 한글, 영어, 화살표와 같은 특수 문자들이 포함되어 있으며 현대 문자 표현에 있어 매우 중요한 위치에 있다.
  • 유니코드의 인코딩 방식은 utf-8, utf-16, utf-32 ...이 있음. 여기서 utf의 뜻은 Unicode Transformation Format의 줄임말로 유니코드 인코딩 방법이란 뜻임. - 가장 대중적인 방식인 utf-8 인코딩 : 가변 길이 인코딩으로 인코딩 결과가 1바이트 ~ 4바이트가 될 수 있음(인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름.).
  •  https://onlineutf8tools.com/convert-utf8-to-binary직접 눈으로 확인 가능.

예전에 회사에서 프로젝트 안에서 가상 키보드를 띄워서 아이디나 닉네임을 저장하는 부분을 구현한 적이 있었는데 그때도 한글 키보드를 구현하기 어려워서 시간을 많이 쏟았던 기억이 있다. 지금의 공부를 하고나서 구글링 했을때 나왔던 방법 이해했으면 이해하기 더 쉬웠을 거란 생각이 든다. 

 

++ 추가로 한글 인코딩에 대해 더 자세하게 나온 블로그

https://www.vbflash.net/192

 

참고 : 인프런 < 개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제 >

728x90

컴퓨터 구조

컴퓨터가 이해하는 정보
  • 데이터 : 숫자, 문자, 이미지, 동영상과 같은 정적인 정보, 컴퓨터와 주고받는/ 내부에 저장된 정보를 데이터라 통칭, 0과 1로 숫자, 문자를 표현하는 방법
  • 명령어 : 컴퓨터는 결국 명령어를 처리하는 기계, 명령어란 컴퓨터를 실질적으로 움직이는 정보이며, 데이터는 명령어를 위한 일종의 재료
컴퓨터의 네 가지 핵심 부품
  • CPU
  • 메모리
  • 보조기억장치
  • 입출력 장치
CPU(== 컴퓨터의 두뇌) : 메모리에 저장된 명령어를 읽어 들이고, 해석하고, 실행하는 부품.
1. CPU는 메모리에 저장된 값을 읽어 들이고, 해석하고, 실행하는 장치.
2. CPU 내부에는 ALU(계산하는 장치),레지스터(임시저장 장치), 제어장치(제어신호를 발생시키고 명령어를 해석하는 장치)가 있다.
- CPU의 핵심부품 3가지
1. ALU : 계산기(계산을 위한 회로들의 모임)
2. 제어장치 : CPU 내부의 작은 저장장치
3. 레지스터 : 제어 신호(컴퓨터 부품들을 관리하고 작동시키기 위한 전기신호)를 내보내고, 명령어를 해석하는 장치.( ++ CPU가 메모리에 저장된 값을 읽고 싶을 떈 메모리를 향해 메모리 읽기 라는 제어 신호를 보내고. CPU가 메모리에 어떤 값을 저장하고 싶을 땐 메모리를 향해 메모리 쓰기라는 제어 신호를 보냄)
메모리(== 주기억장치(RAM, ROM), 메인메모리) : 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품. 
1. 프로그램이 실행되기 위해서는 메모리에 저장되어 있어야 한다. 2. 메모리는 실행되는 프로그램의 명령어와 데이터를 저장한다. 3. 메모리에 저장된 값의 위치는 주소로 알 수 있다. * 메모리는 전원이 꺼지면 저장된 내용을 잃는다. 
보조기억장치(usb, sd카드, ssd, cd롬 등 백업용 저장장치) : 전원이 꺼져도 보관될 프로그램을 저장하는 부품. 실행되지 않는 부분 저장
입출력장치(컴퓨터 외부에서 컴퓨터로 정보를 주고받을 수 있는 장치 >> 키보드, 마이크, 마우스, 모니터, 프린터, 와콤 등등) :
컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환할 수 있는 부품.

 

메모리는 실행할 정보(실행할 프로그램)를 저장하고, 보조 기억장치는 보관할 정보(보관할 프로그램)를 저장한다.

 

이 모든게 부착되는 곳이 메인보드 혹은 마더보드(mainboard 또는 motherboard)라 함. 이 메인보드 안에서 CPU, 메모리, 보조기억장치, 입출력 장치들이 버스란 걸 통해 서로 정보를 주고받을 수 있음. 그중 가장 중요한 시스템 버스(== 인간의 척추정도)라는 통로를 통해서 정보를 주고받을 수 있다.
메인보드 :
1. 메인보드에 연결된 부품은 버스를 통해 정보를 주고 받음.
2. 버스는 컴퓨터의 부품끼리 정보를 주고 받는 일종의 통로.
3. 타양한 종류의 버스가 있음.
4. 컴퓨터의 핵심 부품을 연결하는 버스는 시스템 버스.(*시스템 버스의 내부 구성 : 주소버스(주소를 주고받는 통로), 데이터버스(명령어와 데이터를 주고받는 통로), 제어버스(제어신호를 주고받는 통로))
728x90
유니티에서 포스트 프로세싱을 추가시켰는데 화면에 안 나올 경우 

 

메인 카메라의 camera 컴포넌트에서

  1. Rendering >> Post Processing 켜져있는지 확인 필수
  2. Environment >> Volumes >> Volume Mask >> 레이어 체크

두개 다 확인했는데도 안 되는 경우, 호오옥시라도 메인카메라가 두 개가 아닌지 체크. 계속 바꾸고 있던 카메라가 전혀 쓰이고 있지 않던 카메라 일수도 있음.

728x90

'유니티' 카테고리의 다른 글

VR 프로젝트 빌드하는 방법  (0) 2023.12.28
VR 프로젝트 기본 설정  (0) 2023.12.28
VR 프로젝트 초기 셋팅  (0) 2023.12.28
유니티 UI버튼 클릭 안될 때  (0) 2022.09.13
Layer Mask 와 Layer Tag  (0) 2022.08.16

 

 

XR Interaction ToolKit개념과 핵심 기능 2

6. Locomotion System, Provider

 

  • Locomotion System, ProviderLocomotion System : 프로바이더 관련 컴포넌트들의 이동 기능을 작동하도록 관리해주는 컴포넌트. provider컴포넌트를 작동하려면 씬 어딘가에 반드시 하나가 있어야 함.  + 딱 하나만 존재.
  • 한 게임오브젝트에 프로바이더컴포넌트와 로코모션시스템컴포넌트가 같이 있을 필요는 없지만 보통은 그냥 같이 둠.
프로바이더 관련 컴포넌트를 사용하여 작동하게 할수 있는 대표적 기능들
  • 일정거리를 한번에 이동할 수 있는 Teleportation 기능
  • 좌우나 뒤로 회전할 수 있는 Snap Turn
  • 지속적으로 이동할 수 있는 Continuous Move
  • 지속적으로 회전할 수 있는 Continuous Turn

이 provider들은 Locomotion Provider 클래스를 상속받은 클래스로, 만약 시스템 전역에서 사용하는 독특한 이동관련 제스처가 있다면 상속받아서 Custom Provider를 만들어서 사용하는 걸 추천.


 

7. Teleportation 

  • 현재 위치에서 지정한 위치로 즉각 이동하는 기능(직선이나 곡선을 그리는 광선으로 목표 위치를 선택하여 이동) 
  • XR Ray Interator : 직선 또는 곡선의 광선을 발사하여 부딪치는 대상에 원거리에서 인터랙션을 시도하는 컴포넌트. 같이 붙어있는 LineRenderer와 XR Interactor Line Visual컴포넌트를 이용해 ray를 시각화 함. Raycast Configuuration 옵션을 통해 광선을 어떤 모양으로 시각화 할지 선택 가능(라인 타입 : 직선, 곡선, 포물선)
XR Interactive Toolkit의 텔레포테이션 기능
  1. Teleportation Area : 설정한 영역 전체에 아무곳에나 텔레포테이션을 할 수 있게 해주는 컴포넌트.(설정한 컬라이더의 모든 표면의 위치로 이동할수 있는 기능.)
  2. Teleportation Anchor : 특정 지점으로만 텔레포트 할 수 있게 해주는 컴포넌트.(대상 오브젝트의 위치로 이동할 수 있는 기능.)

상황에 맞게 적절히 설치해두고 사용하게 되면 시나리오나 구역을 진행하는 형태로 게임을 만드는데 유용하게 쓰일 수 있음.


 

8. UI Interation

  • 유니티의 ui와 인터랙션 할 수 있는 기능. 기존의 유니티 ui를 만들고 추가로 약간의 설정만 하면 아주 쉽게 사용 가능.
  • 손 컨트롤러에 있는 XR Ray Interactor컴포넌트에 Enable Interation With Ui GameObject옵션 활성화 되어 있으면 유니티 ui와 인터랙션 시도함.
  • 캔버스 또한 Render Mode를 World Space로 설정.
  • Tracked Device Graphic Raycaster컴포넌트가 VR디바이스에 광선으로 캔버스를 인터랙션 해주는 애라 있어야 진행됨.(캔버스를 레이캐스팅을 해주는 컴포넌트)
정리 >> VR 디바이스의 광선으로 인터랙션 할 수 있는 설정
  1.  XR UI Input Module컴포넌트가 Event System에 같이 붙어있어야 함.
  2. 인터랙션을 원하는 캔버스에는 Tracked Device Graphic Raycaster컴포넌트를 붙여야 함.
  3. 손 컨트롤러의 XR Ray Interactor 컴포넌트에서 Enable Interaction with UI GameObject옵션을 활성화 함.

 

9. Haptic (진동)

  • 손 컨트롤러에 있는 XR Interactor컴포넌트에서 Haptic Events에서 활성화시키던지 스크립트에서 XR Controller컴포넌트를 찾아서 SendHapticImpulse() 함수 실행해서 실행해주면 됨.

 

10. XR Socket Interactor

  • 일반적으로 컨트롤러와 같이 사용하지 않고 별도의 공간에 설치하는 식으로 사용하는 Interactable을 꽂았다가 뺏다가 할 수 있는 Interactor.
  • Interactor를 가까이 가져다 대면 자동으로 select됬다가, 다시 집어서 빼면 Deselect가 되는 형태로 작동 함.
  • 보통 방탈출 게임같은 컨텐츠를 만들 때 열쇠(interactable)를 찾아서 열쇠구멍(XR Socket Interactor) 에다가 꽂는 형태로 사용.

 

 

728x90

XR Interaction ToolKit개념과 핵심 기능 1


  1. HMD, Controller Tracking

new scene >> standard(URP) create >> 씬이름 만들어서 씬폴더에 저장 >> 하이어라키에 우클릭 >> xr >> xr origin(Action-based) 게임오브젝트 생성

xr origin(Action-based) 게임오브젝트

  • xr origin오브젝트에 붙어있는 xr origin컴포넌트는 hdm이나 컨트롤러등 연동된 장비의 기준이 되는 오브젝트. 주로 VR이나 AR세계의 중심이나 헤드셋의 기준 높이 등을 설정할 때 사용됨. 일반적으로 HDM과 연동된 메인 카메라 게임오브젝트와 양손 컨트롤러와 연동된 게임 오브젝트 등을 자식으로 배치함.
  • 메인 카메라 오브젝트에 붙어 있는 Tracked Pose Driver 컴포넌트== Unity XR의 컴포넌트 선택한 디바이스의 위치와 방향을 가져옴(여기서는 HMD의 pos를 가져와 Transform에 적용. 즉 HMD의 pos가 메인 카메라의 pos와 동기화되는 상태.)
  • LeftHand, RightHand Controller오브젝트에 붙어있는 XR Controller 컴포넌트 == Unity XR Interaction ToolKit의 주요 컴포넌트 중 하나. 컨트롤러의 pos를 동기화하고, 그립버튼이나 트리거버튼 등의 액션이 발생하는 것을 연결해 주는 기능.(왼손 오른손 preset 연결 잘 돼 잇는지 확인 필요)  

2. Custom Controller Model

  • XR Origin 오브젝트의 자식 오브젝트 왼쪽 컨트롤러와 오른쪽 컨트롤러의 XR Controller컴포넌트 안에 모델프리팹에 원하는 프리팹을 연결시켜주면 화면에서 뜸.

3. Interactor & Interactable

  • Interactor : 인터랙션을 시도하는 쪽
  • Interactable : 인터랙션이 되어지는 쪽
  • Interaction Manager: 이 기능들을 주관해서 실행해 줌.

Interactor

  1. XR Direct Interactor : 직접적인 상호작용을 할 수 있게 해주는 컴포넌트(컨트롤러를 대상에 가져다 대어 집거나 하는 등의 인터랙션을 시도할 수 있는 컴포넌트). HIde Controller On Select옵션 체크 >> 오브젝트를 집었을 때(Select 했을 때) 컨트롤러 모델을 비활성화해 주는 옵션. Select Action Trigger를 state에서 Toggle이나 Sticky로 변경하면 Grip키를 누르고 있을 때 집히는 게 아니라 누르는 순간 집히고 다시 눌렀다, 뗄 때 떨어짐.

Interactable

  1. XR Grab Interactable : 이 컴포넌트가 붙어있는 게임오브젝트들은 집을수 있음. 기본적으로 rigidbody와 collider가 붙어있어야 함. **오브젝트를 잡으면 interactor의 Attach Point(Interactor 쪽으로 당겨져 오는 기능)의 거리를 집을 당시의 위치 그대로 유지하고 싶을 때 XR Offset Grab Interactable를 만들어서 사용하면 됨.

혹시나 새로운 기능을 추가 하고 싶어서 interactor와 Interactable을 커스터 마이징 해야 한다면 XR Base Interactor나 XR Base Interactable 등 기존의 클래스들을 상속받아서 재정의 하는 것을 추천.

 

5. Events

  • 어떠한 상황이 되었을 때 실행할 수 있는 기능을 연결할 수 있음.

XR Grab Interactable의 컴포넌트에서 Interactable Events

  • First, Last이벤트 :
  • 퍼스트 이벤트들은 여러 인터랙터들이 순차적으로 인터랙터를 했을 때 가장 먼저 들어온 인터랙터만 처리하는 이벤트고 거꾸로 라스트 이벤트들은 가장 마지막에 나간 인터랙터만 처리하는 이벤트.
  • Hover이벤트 : Interactor와 Interactable이 Overlap 되는 상황을 의미
  • Select이벤트 : Overlap상태에서 Select제스처를 하면 일반적으로는 Grip키를 누르면 Interactor가 Interactable을 Select 하게 됨.
  • Activate이벤트 : Select상태에서 Grip키를 누르고 있는 상태에서 Activate제스처를 하게 되면 발새하는 이벤트. 일반적으론 Trigger 키로 설정돼있음.

XR Interactor컴포넌트의 Interactor Events

(사용할 수는 없고(Activate 할 수 없음) Hover와 Select계열의 이벤트들만 연결할 수 있는 걸 볼 수 있음)

  • Hover Entered, Hover Exited
  • Select Entered, Select Exited
728x90
vr 프로젝트 빌드 설정 방법

vr기기 사용해서 빌드하려면 >> 해당 컴퓨터에 vr장비가 연동되어 있어야 함.

안드로이드 기반 플랫폼에 독립형으로 설치하여 실행하고 싶다면 >> Android 플랫폼으로 빌드하듯이 설정하여 빌드하면 됨.

빌드셋팅 >> Android플랫폼 클릭 switch Platform 클릭 >>
player Settings >> Android탭 >> Other Settings >> Auto Graphics Api 체크 >> Identification에서 Minimum Apl Level을 Android 10.0버전으로 설정(자기가 가지고 있는 vr기기의 Android 최소버전으로 설정해두면 됨 == 오큘러스 퀘스트2는 Android 10.0버전) >>
XR Plug-in Management >> 안드로이드 모양 클릭 >> Plug-in Providers에 Oculus클릭.

빌드셋팅 >> Android >> Run Device >> 오큘러스퀘스트 장비 선택 >> 빌드엔 런클릭 >> APK파일 생성됨.

728x90

'유니티' 카테고리의 다른 글

유니티 Post Processing 적용이 안되는 경우  (0) 2024.01.23
VR 프로젝트 기본 설정  (0) 2023.12.28
VR 프로젝트 초기 셋팅  (0) 2023.12.28
유니티 UI버튼 클릭 안될 때  (0) 2022.09.13
Layer Mask 와 Layer Tag  (0) 2022.08.16
초기 설정 후 기본 설정 하기

메뉴바 edit >> Project Settings >> XR Plugin Management >> Oculus 체크 >>

(독립형으로 Oculus를 실행시키고 싶다면 안드로이드모양 클릭 >> Oculus체크 ==> PC버전이나 시뮬레이터로만 진행할거라면 체크할 필요 ㄴㄴ) >>

player탭 >> Resolution and Presentation 클릭 >> Run in Background 체크(시뮬레이터로 작업할 때 오작동 막기 위해)

프로젝트 매니저 >> XR Interaction ToolKit >> Samples >> 두개(Starter Assets, XR Device Simulator) 다 임포트

 

Starter Assets

  • XRI Default Actions 파일 >> HMD와 왼손, 오른손 컨트롤러의 기본적인 액션들이 설정되어 있는 Input Action파일들.
  • Starter Assets 파일 안 preset들(move,turn,controller등등)은 Add to ActionBasedContinuousTurnProvider default 클릭해줘서 나중에 컴퍼넌트들 사용할 때 자동으로 연결 되도록 해줌.

edit >> project settings 클릭 >> Preset Manager >> 위에서 추가해둔 preset들 중 ActionBasedController >>

오른손 컨트롤러엔 Right, 왼손 컨트롤러엔 Left 입력 >>Hierarchy창 +버튼 클릭 >> XR 메뉴 있는지 확인

 

XR메뉴 없거나, 콘솔창에 클리어 버튼을 클릭해도 버그가 있거나, 이외에 문제가 있으면 XR 제대로 깔리지 않은거니까

다시 깔아야됨. 패키지 버전이 문제 일 수 있으니 알아서 체크 

 

오큘러스 셋팅하기

oculus.com/setup url 페이지에서 자기 기기 소프트웨어 다운로드 클릭

오큘러스 소프트웨어 >> 헤드셋 추가 클릭해서 기기 연결

설정 탭 >> 일반 >> 알 수 없는 출처 활성화 >> OpenXR Runtime 클릭

728x90

'유니티' 카테고리의 다른 글

유니티 Post Processing 적용이 안되는 경우  (0) 2024.01.23
VR 프로젝트 빌드하는 방법  (0) 2023.12.28
VR 프로젝트 초기 셋팅  (0) 2023.12.28
유니티 UI버튼 클릭 안될 때  (0) 2022.09.13
Layer Mask 와 Layer Tag  (0) 2022.08.16

+ Recent posts