본문 바로가기

멋쟁이사자처럼 유니티 부트캠프 12회차 추가학습 (Collider & Rigidbody / Physics Material / 고양이 점프와 파이프 생성)

@salmu2025. 6. 8. 17:16
반응형

[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 간 선형 보간 더 부드러운 텍스처 전환, 멀리서도 자연스러움

 

반응형
salmu
@salmu :: SMU 각종 기록

목차