[Unity]TIL (47) | 2023.09.27 | 유니티 랜덤 방향으로 이동

kjg5370·2023년 9월 27일
0

TIL

목록 보기
47/91
post-thumbnail

들어가기 앞서

오늘 StartScene을 구상하다가 주사위 게임이라
주사위가 나왔으면 해서 오브젝트를 넣어주었습니다.
근데 주사위만 넣으니 밋밋해서 주사위를 클릭했을 때 이 주사위가 움직일 수 있게 만들어 주고 싶었습니다.
그래서 Unity.Engine 에 있는 Random과 RigidBody의 AddForce를 이용했습니다.

오늘 배운 것

  • Random.insideUnitCircle
    Unity에서 제공하는 랜덤 벡터를 생성하는 함수 중 하나.
    이 함수는 2D 공간에서 반지름이 1인 원 내부에 있는 랜덤한 점을 나타내는 2D 벡터를 반환.

    • 작동방식
      반지름이 1인 원 내부에 있는 임의의 점을 랜덤하게 선택.
      이 점의 x와 y 좌표를 가지고 있는 2D 벡터를 생성.
      생성된 벡터의 길이는 1 이하.

    • 예시

      Vector2 randomPosition = Random.insideUnitCircle;

      여기에 normalized를 하여 벡터를 정규화 해주었습니다.
      정규화는 벡터 길이가 1 이어야 방향에 따른 이동 속도가 같아지기 때문에 오브젝트의 균일한 이동을 위해서 해주었습니다.

  • ForceMode2D
    Rigidbody2D 컴포넌트에서 힘을 적용하는 방식을 지정하기 위한 열거형(Enum).
    Rigidbody2D의 AddForce와 함께 사용하며 힘을 어떻게 적용할지를 제어.

    ForceMode2D.Force: 힘을 지속적으로 적용.
    ForceMode2D.Impulse: 순간적인 힘을 적용.

    이 둘을 사용하여 클릭을 했을 때 랜덤한 방향으로 순간적으로 힘을 가하는 코드를 만들어보았습니다.

  • 코드

     public class MoveDice : MonoBehaviour
    {
        private float minForce = 3f;
        private float maxForce = 7f;
        private Rigidbody2D rb;
    
        // Start is called before the first frame update
        void Start()
        {
            rb = GetComponent<Rigidbody2D>();
            float rotationAmount = Random.Range(minRotation, maxRotation);
            transform.Rotate(0f, 0f, rotationAmount);
        }
    
        void OnMouseDown()
        {
            ApplyRandomForce();
        }
        void ApplyRandomForce()
        {
    
            Vector2 randomDirection = Random.insideUnitCircle.normalized;
    
            float randomForce = Random.Range(minForce, maxForce);
    
            rb.AddForce(randomDirection * randomForce, ForceMode2D.Impulse);
        }
    }

진행 사항

스파르타 코딩클럽 강의 듣기
유니티 시네머신 해보기
MainScene UI 어색한 부분 고치기

내일 할 일

  • 하루 계획
    • 오전
      • 09:00 ~ 10:00 : 알고리즘 코드카타
      • 10:00 ~ 10:30 : 팀 회의
      • 10:30 ~ 14:00 :
        • 오늘 계획 (Task)
      • 12시-1시: 점심식사
    • 집중 코딩
      • 14:00 ~ 18:00
    • 저녁
      • 6시-7시: 저녁식사
      • 19:00 ~ 20:00 : 집중 코딩 시간 부족한 부분 해결해보기
      • 20:00 ~ 21:00: TIL 작성, 마무리 회고 진행
      • 21:00 : 내일은 위한 휴식!
profile
학생입니다

0개의 댓글