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도)만큼 차이를 두면서 원운동을 하게 하면 된다.
'게임엔진 > Unity' 카테고리의 다른 글
[Unity] 그래픽스 최적화 - 렌더링 파이프라인 (0) | 2023.08.12 |
---|---|
[Unity] 내 주변을 원 모양으로 퍼지는 탄환 생성 (0) | 2023.08.04 |
[Unity] Sprite Sheet (스프라이트 시트)를 사용한 2D 애니메이션 (0) | 2023.08.04 |
[Unity] 유니티 2D RPG 강좌 #1 - 스프라이트 설정하기 (0) | 2023.08.04 |
[Unity] Sprite (스프라이트) 개념 (0) | 2023.08.04 |