리지드바디 (Rigidbody)
물리 계산을 하는 Component. Collider는 영역 / Rigidbody는 계산
Drag
물체의 공기 저항 또는 유체 저항을 나타내는 값(0~ 이론적으로 무제한)
값이 크면 물체가 빠르게 속도를 잃고, 값이 작으면 물체가 더 오래 이동을 유지
0 : 저항이 없음을 의미. 물체는 초기 힘에 의해 영구히 움직일 수 있음
0.1 ~ 0.5 (일반적인 범위) : 현실적인 움직임을 시뮬레이션할 때 자주 사용되는 값
1 이상 : 저항력이 커지고, 물체가 빠르게 감속하며 짧은 거리만 움직임.
무한대 : Drag 값을 극도로 높게 설정하면 물체가 움직이지 않거나 거의 즉시 멈춤.
Physic Material
충돌하는 물체의 마찰(정지와 움직임)과 튕김(충돌 후 반발력)을 설정
- Dynamic Friction (다이나믹 마찰력)
물체가 움직일 때 적용되는 마찰 계수(0~1사이로 설정가능)
값이 클수록 표면의 저항이 커져서 쉽게 미끄러지지 않음
- Static Friction (정지 마찰력)
물체가 정지 상태에서 움직이기 시작할 때의 마찰 계수 (0~ 이론적으로 무제한)
일반적으로 Dynamic Friction 보다 값이 높음.
- Bounciness (튕김 탄성)
충돌 후 물체가 얼마나 튕길지를 나타냄(0 ~ 1사이로 설정가능)
0: 전혀 튕기지 않음 (비탄성 충돌), 1: 최대한 많이 튕김 (탄성 충돌)
[예제] 문(door) 애니메이션 만들기
* 애니메이션 구현시, 꼭 녹화버튼 누르고 끄기.





- public Animator animi
// Animator 컴포넌트에 접근하기 위한 변수
// public 이기 때문에, Inspector 창에서Animator 타입의 변수 설정 가능
- public void OnTriggerEnter(Collider other)
// OnTriggerEnter(Collider other):
다른 Collider가 이 객체의 Trigger Collider 안으로 들어올 때 실행
(매개변수 other: Trigger에 들어온 물체의 Collider를 나타냄)
- if (other.CompareTag("Player"))
// Trigger에 들어온 물체가 "Player" 태그를 가지고 있는지 확인
// "Player" 태그를 가지고 있다면, 내부 코드 실행
- animi.SetTrigger("Open")
// Animator에서 Trigger 피라미터 "Open" 실행
- public void OnTriggerExit(Collider other)
// OnTriggerExit(Collider other) :
다른 Collider가 이 객체의 Trigger Collider 밖으로 나갈 때 실행
(매개변수 other: Trigger에 들어온 물체의 Collider를 나타냄)
- if (other.CompareTag("Player"))
// Trigger에 들어온 물체가 "Player" 태그를 가지고 있는지 확인
// "Player" 태그를 가지고 있다면, 내부 코드 실행
- animi.SetTrigger("Close")
// Animator에서 Trigger 피라미터 "Close" 실행
[예제] 캐릭터 점프 구현
기존 Input Study 스크립트에 하기의 코드를 추가
- public float jumpPower = 4f;
// jumpPower 의 초기값을 실수값 4f로 설정
// public 이기 때문에, Inspector 창에서Animator 타입의 변수 설정 가능
- public bool isGround = false;
// 캐릭터가 바닥에 있는지 여부를 확인하기 위해 해당 변수를 선언
// 이 변수는 캐릭터가 점프 가능한 상태인지(바닥에 닿아 있는지)
또는 공중에 있는지를 구분하는 데 사용
- private void Update() 에 Jump(); 함수 추가
// Update() 메서드에 Jump 함수를 추가시켜서 하기의 Jump() 메서드도
매 프레임이 시작할 떄 적용될수 있도록 함
- private void Jump()
// Jump() 함수 안에 있는 코드를 실행
- if(Input.GetKeyDown(KeyCode.Space) && isGround == true)
// 스페이스 바를 누름과 동시에(Input.GetKeyDown(KeyCode.Space))
땅에 있었다면(isGround == true), 하기의 코드를 실행.
(&& 양 옆의 조건이 모두 true 여야 하기의 코드가 실행됨)
- this.GetComponent<Rigidbody>()
.AddForce(Vector3.up * jumpPower, ForceMode.Impulse);
// Rigidbody 컴포넌트에 접근해서(GetComponent<Rigidbody>() ),
위쪽방향(Vector3.up_ 0, 1, 0) 에 jumpPower 를 곱함.
그리고 물체의 속도를 즉각적으로 변화 시키는(ForceMode.Impulse)
힘을 가함.(.AddForce)
** ForceMode.Impulse :
물체의 속도를 즉각적으로 변화시키는 효과를 주고, 질량을 고려하지 않고 힘을 적용.
물체에 큰 속도 변화가 필요할 때 유용하게 사용됨.
점프시 2단 점프를 방지하는 방법

- public void OnCollisionEnter(Collision collision)
// 오브젝트와 충돌이 발생했을 때 실행되는 메서드
( collision은 Collision 타입의 매개변수 변수 이름으로, 충돌 발생 시 전달되는 객체)
( Unity의 물리 엔진에서 충돌 이벤트를 처리하기 위해 전달되는 파라미터)
- if (collision.collider.CompareTag("Player"))
// Collision에 들어온 물체가 "Player" 태그를 가지고 있는지 확인
// "Player" 태그를 가지고 있다면, 내부 코드 실행
- GameObject characterObj = collision.gameObject;
// 충돌이 끝난 오브젝트를 GameObject 타입으로 가져옴.
// collision.gameObject 를 characterObj 로 사용할 수 있음
- characterObj.GetComponent<InputStudy>().isGround = true
// characterObj 오브젝트의 InputStudy 컴포넌트에 접속해서(.GetComponent<InputStudy>())
isGround 를 true 로 변경.
- public void OnCollisionExit(Collision collision)
// 오브젝트와 충돌이 종료되었을 때 실행되는 메서드
( collision은 Collision 타입의 매개변수 변수 이름으로, 충돌 발생 시 전달되는 객체)
( Unity의 물리 엔진에서 충돌 이벤트를 처리하기 위해 전달되는 파라미터)
- if (collision.collider.CompareTag("Player"))
// Collision에 들어온 물체가 "Player" 태그를 가지고 있는지 확인
// "Player" 태그를 가지고 있다면, 내부 코드 실행
- GameObject characterObj = collision.gameObject;
// 충돌이 끝난 오브젝트를 GameObject 타입으로 가져옴.
// collision.gameObject 를 characterObj 로 사용할 수 있음
- characterObj.GetComponent<InputStudy>().isGround = false
// characterObj 오브젝트의 InputStudy 컴포넌트에 접속해서(.GetComponent<InputStudy>())
isGround 를 false 로 변경.
이렇게 코드를 설정하면, 땅에서 떨어졌을때는 점프를 더이상 못하고, 땅에 닿아아있을때만 점프가 가능
즉, 점프한 상태에서 계속해서 점프하는 상태를 막을 수 있음.
**** 게임 플레이시, 플레이어의 객체 Position Y축이 살짝 뜬 상태로 진행될때의 해결방법.
- 플레이어 객체의 콜라이더 Center Y값에다가, 게임을 시작했을때 나오는 플레이어의
Y축을 뺴거나(음수값이 나올때), 더하면(양수값이 나오면) 완전하게는 아니지만(Y 0값),
바닥에 딱 달라붙게 할 수 있음.
'게임 개발(유니티) > 멋쟁이 사자처럼 3기_회고록' 카테고리의 다른 글
| [멋쟁이사자처럼 유니티 TIL] 2024_11_29(금) 강의 요약 및 정리 (0) | 2024.12.01 |
|---|---|
| [멋쟁이사자처럼 유니티 TIL] 2024_11_28(목) 강의 요약 및 정리 (0) | 2024.12.01 |
| [멋쟁이사자처럼 유니티 TIL] 2024_11_26(화) 강의 요약 및 정리 (0) | 2024.11.27 |
| [멋쟁이사자처럼 유니티 TIL] 2024_11_25(월) 강의 요약 및 정리 (0) | 2024.11.25 |
| [멋쟁이사자처럼 유니티 TIL] 2024_11_22(금) 강의 요약 및 정리 (0) | 2024.11.23 |