unity/유니티 초보

Unity2D - 간단한 바운스볼 로직 구현

rimugiri 2024. 1. 18. 16:16
728x90

게임 오브젝트가 벽을 튕기는 동작을 구현 하다 바운스볼은 어떻게 하면 만들 수 있을까 궁금증이 생겼다

1. 첫번째 방법 Physics Material 사용

Bounciness를 1로 하게되면 운동에너지가 그대로 보존되어 공이 일정한 높이로 튀어 오를 거라 생각하여 rigidBody와 함께 사용해 보았다.
이 설정으로 만 시작하면 공이 점점 높이 뛰어 오르는데 이를 해결하기 위해서는 충돌검사를 연속적으로 이루어지게 해야된다. 따라서 Rigidbody2D의 Collision Detection 부분을 Continuous로 수정 하면 된다.

2. 두번째 방법 AddForce 사용

그럼 땅에 닿았을때 일정한 크기의 힘을 가하면 어떨까 라는 생각으로 AddForce가 떠올르게 되었다
여기에서 ForceMode를 Inpulse로 사용하여 순간적으로 힘을 가하게 만들어 주었다

public class Ball : MonoBehaviour
{
    public float speed = 15f;
    public float addForce = 10f;
    public Rigidbody2D rigidbody;
    public float moveDir; 

    void Start()
    {
        rigidbody = GetComponent<Rigidbody2D>();
    }
    private void Update()
    {
        // 좌우 움직임
        moveDir = 0;
        if (Input.GetKey(KeyCode.A)) moveDir =  -1f;
        if (Input.GetKey(KeyCode.D)) moveDir = 1f;
        transform.position += new Vector3(moveDir, 0) * Time.deltaTime * speed;
    }

    //
    private void OnCollisionEnter2D(Collision2D collision)
    {    // if(collision.tag == "Wall") // 특정 오브젝트에만 적용시
        rigidbody.AddForce(Vector3.up * addForce,ForceMode2D.Impulse);
    }
}

 

Continous 연산은 많은 비용이 소모 되며 1번방식은 부가 요소를 정밀하게 조정하기 어려우니

2번 방식을 사용하는 것이 더 좋은 방식이라는 생각이 들었다

728x90