반응형
[12회차 학습내용]
1. [ Unity ] Collider & Rigidbody _자동차 충돌 실습
2.Physics Material
3.고양이 점프와 파이프 생성 실습
4. 기타
추가학습
1.1 Collider 와 Rigidbody
| Collider | Rigidbody | |
| 역할 | 모양(경계) 정의 – 충돌 범위 제공 | **물리 행동(중력, 속도, 힘)**을 적용 |
| 기능 | 충돌 감지만 가능 (움직이지 않음) | 중력, 속도, 물리 반응 등 동작 가능 |
| 종류 | Box, Sphere, Capsule, Mesh 등 | Rigidbody (3D), Rigidbody2D (2D) |
| 필수 여부 | 충돌 감지 필수 | 적어도 한 쪽이 Rigidbody여야 충돌 반응함 |
| 움직임 | 직접 움직이거나 애니메이션에 의해 제어됨 | 물리 엔진에 의해 움직임 발생 |
| 트리거 사용 가능 | ✅ (isTrigger) | ❌ 직접 트리거가 되지는 않음 |
충돌 이벤트가 발생하려면 Collider가 필요하고, 최소한 한 쪽 오브젝트에는 Rigidbody가 있어야함.
1.2. 차의 Transform 이동과 Rigid 이동
using System;
using UnityEngine;
public class CarMovement : MonoBehaviour
{
public float moveSpeed = 3f;
public Rigidbody2D carRb;
private float h;
void Update()
{
h = Input.GetAxis("Horizontal");
// Transform 이동
transform.position += Vector3.right * h * moveSpeed * Time.deltaTime;
}
void FixedUpdate()
{
// Rigidbody의 속도를 활용한 이동
carRb.linearVelocityX = h * moveSpeed;
}
}
- Transform은 물리 계산 없이 순간이동 하는 방식이라, 끼임, 통과, 버벅임이 발생함
->Rigidbody 사용
1.2.1 Input.GetAxis("Horizontal");
키보드 좌우 입력값(-1 ~ +1 사이) 을 받아옴
- 왼쪽 화살표 / A 키 → -1
- 오른쪽 화살표 / D 키 → +1
- 아무 키도 안 누르면 0
- 연속적인 값이므로 부드러운 이동이 가능함
1.2.2 Rigidbody 2D 이동
// 입력 h(-1, 0, 1)에 따라 X축 속도만 조절
carRb.linearVelocityX = h * moveSpeed;
*왜 deltatime을 안 곱하지?
Rigidbody2D.linearVelocity는 초당 속도를 설정하는 것
위치를 직접 이동하는게 아닌, 속도를 설정하는 것이라 시간 보정을 전제로 하고 있어서 쓰지 않아도 됨.
*왜 FixedUpdate()에 쓰지?
Unity의 고정된 시간 간격(기본 0.02초)마다 한 번씩 실행되는 함수
물리 엔진과 동기화되어 있어서, 물리 기반 오브젝트를 다룰 때 사용
| 키 입력, 마우스 입력 | Update() |
| UI 변경, 애니메이션 트리거 등 | Update() |
| Rigidbody 관련 이동/힘/충돌 | FixedUpdate() |
| 카메라가 Rigidbody 따라갈 때 | LateUpdate() 또는 FixedUpdate() |
1.3 Collision & Trigger
| 비교 항목 | Collision 이벤트 | Trigger 이벤트 |
| 충돌 감지 방법 | 실제 물리 충돌 | 겹치기만 해도 감지 |
| isTrigger 값 | 꺼야 작동 (false) | 켜야 작동 (true) |
| 주로 쓰이는 곳 | 벽, 바닥, 이동 장애물 등 | 아이템 줍기, 출입 체크, 이벤트 등 |
| 물리 반응 | 있음 (반발력, 정지 등) | 없음 (통과 가능, 감지만 함) |
2.1 physics Material
: 마찰력(Fricition) 과 탄성(Bounciness) 설정
: Collider에 부착되어 물리적 충돌의 느낌을 조절
2.2 DynamicFriction <-> StaticFriction
| Static Friction | 정지 상태에서의 마찰력 (움직이기 시작할 때 저항) |
| Dynamic Friction | 움직이는 상태에서의 마찰력 (움직임 지속 시 저항) |
반응형
3.1 Addforce<->linearvelocity.Y
| 자연스러운 점프/물리 반응 | AddForce |
| 즉시 점프 속도 설정 | linearVelocity.y 직접 설정 |
3.2 고양이 이단점프
using System;
using UnityEngine;
public class CatController : MonoBehaviour
{
private Rigidbody2D catRb;
public float jumpPower = 10f;
public bool isGround = false;
public int jumpCount = 0;
void Start()
{
catRb = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && jumpCount < 2)
{
catRb.AddForceY(jumpPower, ForceMode2D.Impulse);
jumpCount++; // 1씩 증가
}
}
private void OnCollisionEnter2D(Collision2D other)
{
if (other.gameObject.CompareTag("Ground"))
{
jumpCount = 0;
isGround = true;
}
}
private void OnCollisionExit2D(Collision2D other)
{
if (other.gameObject.CompareTag("Ground"))
{
isGround = false;
}
}
}
3.2.1 ForceMode
| ForceMode2D.Force | 지속적인 힘 - 매 프레임 적용됨 (가속하는 느낌) |
| ForceMode2D.Impulse | 순간적인 힘 - 한 번만 적용됨 (점프, 총알 발사 등 순간 반응용) |
3.3 LoopMap활용 파이프 랜덤 배치하기
using UnityEngine;
public class Transform_LoopMap : MonoBehaviour
{
public float moveSpeed = 3f;
public float returnPosX = 15f;
public float randomPosY;
void Update()
{
transform.position += Vector3.left * moveSpeed * Time.deltaTime;
if (transform.position.x <= -returnPosX)
{
randomPosY = Random.Range(-8f, -2.5f);
transform.position = new Vector3(returnPosX, randomPosY, 0);
}
}
}
4.1 Filter Mode
:텍스처(Texture)의 픽셀을 화면에 표시할 때 어떻게 보간(interpolation)할지 결정하는 설정
:텍스처를 확대하거나 축소할 때 화질이 어떻게 보일지 정하는 옵션
| Point (Nearest) | 가장 가까운 픽셀 색상 사용 | 픽셀화된 효과, 레트로 스타일에 적합 |
| Bilinear | 인접 4픽셀을 선형 보간 | 부드러운 화면, 기본 옵션 |
| Trilinear | Bilinear + Mipmap 간 선형 보간 | 더 부드러운 텍스처 전환, 멀리서도 자연스러움 |
반응형
'프로그래밍 > 유니티 부트캠프' 카테고리의 다른 글
| 유니티 (Door 애니메이션과 Sprite 애니메이션)멋쟁이사자처럼 유니티 부트캠프 14회차 추가학습 (0) | 2025.06.09 |
|---|---|
| 유니티 (핀볼 게임/ 애니메이션 이해) _멋쟁이사자처럼 유니티 부트캠프 13회차 추가학습 (1) | 2025.06.09 |
| 멋쟁이사자처럼 유니티 부트캠프 11회차 추가학습 (배경 횡스크롤과 Material) (0) | 2025.05.27 |
| W3Schools C# 개인학습 (Array->Multidimensional Arrays) (0) | 2025.05.26 |
| 멋쟁이사자처럼 유니티 부트캠프 10회차 추가학습 (Transform 이동 회전, 연산자_2D 룰렛 돌리기) (1) | 2025.05.26 |