//구글콘솔 광고 추가가
유니티에서 포스트 프로세싱을 추가시켰는데 화면에 안 나올 경우 

 

메인 카메라의 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
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
프로젝트 초기 설정


허브실행 >> 3D(URP)프로젝트 실행 >> read me에셋 파일 삭제 >> 윈도우 >> 패키지 매니저 클릭 >>

InputSystem (1.3.0) , XR Plugin Managerment (4.2.1) , Oculus XR Plugin (1.11.2) 설치 >>

좌측위 Add plackage from git URL버튼 클릭 >> com.unity.xr.interaction.toolkit 입력 add 클릭 (2.0.0)

728x90

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

VR 프로젝트 빌드하는 방법  (0) 2023.12.28
VR 프로젝트 기본 설정  (0) 2023.12.28
유니티 UI버튼 클릭 안될 때  (0) 2022.09.13
Layer Mask 와 Layer Tag  (0) 2022.08.16
Raycast에 대해 알아보자. + Input.mousePosition  (0) 2022.08.12

1. ui 부모 객체에 Grapic RayCast 컴포넌트 추가

2. 버튼위에서 다른 무언가로 버튼을 가려진게 없는지 확인

3. 씬안에 이벤트 시스템이 없는 지 확인

728x90

Layer Mask 와 Layer Tag 둘다 유니티에서 추가 해서 사용할 수 있다.


Tag : 각 게임 오브젝트를 구분하는 용도로 사용. OnCollision 과 OnTrigger에서 tag를 이용해 충돌한 오브젝트를 검사할수 있다.

Layer : 충돌 체크를 할수 있다. 또한 카메라 컴포넌트에서 컬링 마스크를 설정하기 위한 용도로 사용될수 있다.


int layerMask = (1 << 레이어 번호);   ex >> int layerMask = (1 << 8);

LayerMask layerMask = LayerMask.GetMask("레이어 이름");  

int layerMask = (1 << 레이어 번호) | (1 << 레이어 번호);

LayerMask layerMask = LayerMask.GetMask("레이어 이름") | LayerMask.GetMask("레이어 이름"); 

  •  | 를 사용하여 또는 이라는 의미로 레이어를 추가 할 수 있음

if (Input.GetMouseButtonDown(0)) //왼쪽 마우스 클릭시
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 1.0f);

            LayerMask layerMask = LayerMask.GetMask("Monster") | LayerMask.GetMask("Wall");

            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100f , layerMask))
            {
                Debug.Log($"Raycast Camera : {hit.collider.gameObject.name}");
            }
        }

 

728x90

   // transform.position = 좌표를 변환할때 씀

   // 방향을 가지고 연산을 할때는 transform.TransformDirection() 사용. >> 로컬에서 월드로 변환
  Vector3 look = transform.TransformDirection(Vector3.forward); // 플레이어가 바라보고 있는 방향을 월드로 표현한 벡터.
  Debug.DrawRay(transform.position + Vector3.up, look * 10 ,Color.green); // screen에서 플레이어 레이케스트 그려주기.


< 두가지의 레이케스트 구현 >
        1. 모든애들을 관통하는 레이케스트
        RaycastHit[] hits;
        hits = Physics.RaycastAll(transform.position + Vector3.up, look * 10, 10);
        foreach (RaycastHit _hit in hits)
        {
            Debug.Log($"Raycast : {_hit.collider.gameObject.name} !");
        }

        2. 하나만 타겟팅하는 레이케스트
        RaycastHit hit;
        if (Physics.Raycast(transform.position + Vector3.up , transform.forward * 10, out hit, 10))
        {
            Debug.Log($"Raycast : {hit.collider.gameObject.name} !");
        }


       if (Input.GetMouseButtonDown(0)) //왼쪽 마우스 클릭시
        {
           //클릭한 좌표의 월드좌표를 구하자 //레이가 쏴지는 과정
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane)); //마우스의 월드포지션
            Vector3 dir = mousePos - Camera.main.transform.position; //카메라 위치에서 화면까지 가는 방향벡터.
            dir = dir.normalized; //크기를 강제로 1로 해줘서 방향은 똑같지만 크기는 1로 만들어 둔다.


            //  dir * 100f >> Debug.DrawRay( , 방향 * 거리)를 넣어줘야 하니까 레이케스트에서 max 거리해준 만큼 곱하자
            Debug.DrawRay(Camera.main.transform.position, dir * 100f, Color.red, 1.0f);
         

            if (Physics.Raycast(Camera.main.transform.position, dir, out hit, 100.0f))  // 값이 true 일경우 무언가 충돌한거지
            {
                Debug.Log($"Raycast Camera : {hit.collider.gameObject.name}");
            }
        }


   < 마우스 좌표 확인 >

        // 최종적으로 화면안에 나오게 하려면 
        // Local <-> World <-> Viewport <-> Screen (2D 화면) Viewport 와 Screen 는 거의 비슷

       

        // Input.mousePosition >> 현재 마우스 좌표를 픽셀 좌표로 뽑아온다.
        Debug.Log(Input.mousePosition); // screen 좌표 출력(픽셀좌표가 곧 screen) 

 

        // Viewport 좌표 출력(픽셀과 상관없이 화면 비율의 좌표)
        Debug.Log(Camera.main.ScreenToViewportPoint(Input.mousePosition)); 
       


< 이미 유니티에 만들어 져있는 Ray를 이용해서 깔끔하게 작업하기 >

if (Input.GetMouseButtonDown(0)) //왼쪽 마우스 클릭시
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            Debug.DrawRay(Camera.main.transform.position, ray.direction * 100f, Color.red, 1.0f);

            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 100f))
            {
                Debug.Log($"Raycast Camera : {hit.collider.gameObject.name}");
            }       
        }


 

728x90

< RigidBody >

게임 오브젝트가 물리제어로 동작하게 한다. (중력의 영향을 받을수 있고 충돌체크를 할수있다.)

프로퍼티 : 

  • Mass : 오브젝트의 질량. ( 디폴트값은 킬로그램 )
  • Drag : 오브젝트가 힘에 의해 움직일 때, 공기저항의 영향을 미치는 정도. (0이면 공기저항 X, 무한대라면 오브젝트 즉시 정지)
  • Angular Drag : 오브젝트가 토크로 회전할 때 공기저항이 영향을 미치는 정도. (0이면 공기저항 X, 무한대라 하더라도 오브젝트의 회전이 멈추지 않음)
  • Use Gravity : 오브젝트가 중력의 영향을 받게 할지 안할지 체크.
  • Is Kinematic : 체크시 물리 시스템 무효(충돌체크 혹은 트리거 체크를 확인 하려면 체크 해제)
  • Freeze Position : 월드좌표계의 x, y, z축에서 이동하는 리지드바디를 선택적으로 중지.
  • Freeze Rotation : 로컬좌표계의 x, y, z축에서 회전하는 리지드바디를 선택적으로 중지

< Collision >

  1. 충돌 체크를 하기위해 사용하며, 충돌체크를 확인 하려면 오브젝트안에 RigidBody 컴포넌트가 붙어있어야 한다. (isKinematic은 체크 해제)
  2. 체크할 오브젝트들 안에 Collider 컴포넌트가 붙어있어야 한다.(isTrigger 체크를 해제 해줘야 Collision 확인 가능)

Collision 사용 예시 : 

- 플레이어와 충돌되는 모든 오브젝트 확인 ( 건물, 몬스터 등)

- 몬스터에게 닿는 플레이어의 피격 오브젝트 (총알 등)


< Trigger >

  1. 물리와 전혀 상관없이 범위안에 들어왔는지를 확인하기 위해 사용하며, 체크할 오브젝트들 안에 Collider 컴포넌트가 붙어있어야 한다.
  2. 체크할 오브젝트들 중 하나에는 isTrigger 체크가 되어있어야 하며, RigidBody 컴포넌트가 붙어있어야 한다.

Trigger 사용 예시 :

- 플레이어의 스킬 관련(무기나, 스킬에 Trigger를 붙여 체크)

- 플레이어의 이동 관련 (순간이동 위치, 씬 이동 등)

728x90

+ Recent posts