간단한 코드
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도)만큼 차이를 두면서 원운동을 하게 하면 된다.
'유니티' 카테고리의 다른 글
[유니티] 일정한 속도로 회전하는 오브젝트 만들기 (0) | 2022.05.05 |
---|---|
[유니티] 일정 시간 후에 자동으로 사라지는 오브젝트 만들기 (0) | 2022.05.05 |
[유니티] 코루틴(Coroutine)에 대해 알아보자 (0) | 2022.05.04 |
[유니티] 진행이 불가능 할 때 방향을 스스로 바꾸는 오브젝트 만들기 (0) | 2022.05.02 |
[유니티] 내 주변을 원 모양으로 퍼지는 탄환 생성 (0) | 2022.04.29 |