TIL 40 3D

qkrrlcks00·2024년 10월 23일

이제까지 2D로 진행햇을때는 X축과 Y축밖에 없었는데요, 이제 3D로 진행하면서 Z축이 생기고 입체적인 공간에 하늘이라는 공간이 생겼습니다.
6Sided 정육면체를 선택해주면 큐브모양의 공간이 됩니다.
반구형태의 Skybox를 만들겁니다 색갈도 바꾸고 수평선,지평선에 해당되는부분의 색갈도 바꿀겁니다
Unity에서는 씬의 배경으로 사용되며, 게임 환경을 확장시키는데 활용됩니다.
주로 하늘,구름,산 등의 자연적인 배경을 표현하는데 사용됩니다.
미리 만들어진 스카이박스를 사용하거나 직접 만들어서 Unity에서 적용할 수 있습니다.
게임 중 스카이박스를 동적으로 변경하여 낮과 밤 등의 시간대나 특정 이벤트에 맞게 배경을 변화시킬 수 있습니다.
성능에 영향을 미치므로 최적화에 주의해야 합니다.

Rigidbody ForceMode

게임 오브젝트에 물리적인 힘을 가할때 사용한다

  1. Force : 힘을 지속적으로 적용합니다
    0인 플레이어에게 힘을 1 준다면 꾸준히 1 .. 1 .. 1 .. 씩 증가하여
    60번 동작했다면 60의 거리를 이동할겁니다.
  2. Accelration : 가속도를 적용합니다. 이전 힘의 누적에 따라서 점진적으로 더 빠르게 움직이게 됩니다.
    차에 있는 엑셀을 생각하면 됩니다.
  3. Impulse : 순간적인 힘을 적용합니다. 짧은 시간에 갑작스러운 움직임이 발생합니다.
    점프를 생각하면 됩니다.
  4. VeolcityChange : 변화하는 속도를 적용합니다. 물체의 현재 속도를 변경하면서 움직입니다.
    걷고있다가 뛰려고 하면 속도가 변화합니다. 이럴때 사용하면 됩니다.

Raycast

보통 오브젝트를 탐지할때 Collider를 설정한후 isTrigger체크해서 OntriggerEnter 혹은 OnCollisonEnter를 통해서 어떤물체가 내주변에 있다를 확인했었는데요 Ray를 통한 확인 방법도 있습니다. Ray는 일종의 광선이라고 생각해주시면 됩니다.
플레이어가 있다면 플레이어를 기준으로 Ray의 방향을 정해줍니다. (Ray Direction)얼마나 긴 광선을 뽑아낼것인지도 (Ray Distance) 정해줍니다. 그렇게 가상의 광선을 발사한 후 어떤 물체가 있는지, 그 광선에 맞은 물체가 있다면 그 물체 정보를 가져올 수 있게끔 코드를 작성해 판별해낼수 있습니다.

Ray : 직선의 시작점(Origin)과 방향(diretion)

Ray ray = new Ray(transform.postion, transform.foward) 오브젝트
Ray ray = Camera.main.ViewportPointToRay(new Vector3(0.5f,0.5f,0)) 카메라 중심
Ray ray = Camera.main.SreenPointToRay(Input.mouse.Position) 마우스

Raycast : 눈에 보이지 않는 광선(Ray)에 맞은 물체가 무엇인지 여부를 판단한 뒤 여러가지 후처리를 하는 방식.
Ray,RaycastHit(Raycast에 의해 검출된 오브젝트의 정보를 넣어주는 변수),MaxDistance(얼마나 멀리있는지 (최대거리)),LayerMask(필터링) 등의 옵션
Ray는 물체 하나를 마주친다고 막히는게 아니고 거리만큼 쭉 뚫고 갑니다.

RaycastHit : Raycast에 의해 검출된 객체의 정보가 담겨있다.
RaycastHit.point - 레이캐스팅이 감지된 위치
RaycastHit.distance - Ray의 원점에서 충돌 지점까지의 거리
RaycastHit.transform - 충돌 객체의 transform에 대한 참조
광선(Ray)에 맞은 오브젝트의 트랜스폼을 가져올수 있습니다. 그 오브젝트의 컴포넌트에 접근해 여러가지로 활용할 수 있습니다.

2D때는 SendMessage를 사용해서
On Action + Action name인함수를 찾아서 호출하는 방식
전에는 OnMovement 이런식으로 사용했다.

Invoke Event - 버튼에 함수를 집어넣는방식처럼 사용하는것
Inspector상에서 Action 함수를 설정하고 키 입력이 들어왔을 때 호출.

Invoke C sharp Events - C# 스크립트에서 Invoke Event 과정을 수행.
조금더 세부적으로 해당되는 이벤트를 등록할 수 있습니다.
예를들어 키 입력을 받았을때, 키 입력을 받고 거기에 해당되는 함수 호출까지 끝낫을 때, 키 입력이 해제되었을 때, 그 순간순간 맞은 이벤트를 등록할 수 있습니다.


Create Meterial - Meterial을 클릭해보면 Shader가 standard로 되있습니다. 이걸 Skybox - Procedural로 맞춰줍니다.
그 후에 Sky Tint와 Ground값을 조절해 줄건데 값이 변하는걸 실시간으로 확인할겁니다.


Window - Rendering -Lighting에 들어가서 Environment에 Skybox Meterial에 방금만든 Skybox를 넣어줍니다

이제 Sky Tint와 Ground값을 조절해보면 하늘과 땅색이 변하는걸 볼 수 있습니다.

Exposure : 채도

복습

Update문에서 Vector에 Time.deltatime을 곱하면 1초에 1만큼만 움직인다. 이를통해 시간초를 잴수도잇다

원과 사각형이 있을때 사각형에만 rigidbody를 넣으면
원은 물리현상을 받지않아서 밀려나지않고 사각형만 밀려난다.
리지드바디가 없는애가 움직이고 리지드바디가 있는애한테 부딪히면
통과한다.

Collision - 충돌하면 감지 물리법칙 O
istrigger - 충돌하면 감지만하고 물리법칙 X

Mass : 질량 무게
Drag : 공기 저항 (높을수록 늦게떨어짐)

is Kinematic : 켜져있으면 물리법칙을 안받는다 (거의 리지드바디를 껏다켯다하는느낌) 하지만 외부적인 물리현상은 받지않지만 나는 줄수잇어 하는 느낌 > 폴가이즈에 장애물 막대기로 밀쳐내는거

밸로시티 : 물리적인 힘으로 밀어준다
포지션 : 신의 힘으로 밀어준다

벡터는 방향과 힘의 크기가 있다
(0,5,0) 방향 * 크기

OnEnable = Object가 활성화될때 실행되는거
OnDisable = Object가 비활성화될떄 실행되는거

0개의 댓글