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
'unity > 유니티 초보' 카테고리의 다른 글
Unity - 아이템 쿨타임 UI (2) | 2024.02.20 |
---|---|
Unity - new Input System 사용법 (1) | 2024.01.23 |
Unity3D - Custom Editor 제작 (0) | 2024.01.12 |
Unity 광고 추가 방법 - UnityAds 최신버전 (0) | 2023.12.26 |
Unity - 자식 Component 찾는 방법 (0) | 2023.01.12 |