본문 바로가기

유니티

[유니티] 내 주변을 원 운동하는 오브젝트 만들기

 

 

 

 

 

 

간단한 코드

    float circleR; //반지름
    float deg; //각도
    float objSpeed; //원운동 속도

    void Update()
    {
        deg+= Time.deltaTime*objSpeed;
        if (deg < 360)
        {
            var rad = Mathf.Deg2Rad * (deg);
            var x = circleR * Mathf.Sin(rad);
            var y = circleR * Mathf.Cos(rad);
            YS[0].transform.position = transform.position + new Vector3(x, y);
            YS[0].transform.rotation = Quaternion.Euler(0, 0, deg * -1); //가운데를 바라보게 각도 조절
        }
        else
        {
            deg = 0;
        }
     }

 

 

회전하는 오브젝트들의 반지름을 바꾸고 싶으면 circleR의 값을, 원운동의 속도를 빠르게 하고 싶으면 objSpeed의 값을 조절하면 된다.

 

circleR과 objSpeed를 둘 다 늘릴 경우

 

또한 , 미리보기와 같이 여러 오브젝트가 일정 간격을 두고 원 운동을 하는 것을 만들고 싶으면

        int objSize = 3;
        float circleR;
        float deg;
        float objSpeed;

        void Update()
        {
            deg+= Time.deltaTime*objSpeed;
            if (deg < 360)
            {
                 for (int i = 0; i < objSize; i++)
                {
                    var rad = Mathf.Deg2Rad * (deg+(i*(360/objSize)));
                    var x = circleR * Mathf.Sin(rad);
                    var y = circleR * Mathf.Cos(rad);
                    YS[i].transform.position = transform.position + new Vector3(x, y);
                    YS[i].transform.rotation = Quaternion.Euler(0, 0, (deg + (i * (360 / objSize))) * -1);
                }
               
            }
            else
            {
                deg = 0;
            }
         }

위와 같이 objSize라는 변수를 만들어 갯수를 정하고, 그 갯수만큼 포문을 돌린후 각각의 위치를

중앙으로부터 360/objSize만큼 (밑에와 같은 예시에는 objSize가 3이니 120도)만큼 차이를 두면서 원운동을 하게 하면 된다.