반응형
728x170
안녕하세요 UnityBeginner입니다.
이번 글에선 유니티의 베지어 곡선에 대해 알아보겠습니다.
베지어 곡선이란 n개의 점으로부터 수학적 공식을 통하여 부드러운 곡선을
생성하는데 주로 사용하는 공식입니다.
정확한 공식은 위키백과 링크를 걸어드리겠습니다.
https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%A7%80%EC%97%90_%EA%B3%A1%EC%84%A0
씬뷰
그림을 참고하면 각 깃발들은 n개의 점을 나타내며 수학적인 공식을 통해
구해져 표시된 동그라미들이 베지어 곡선입니다.
2D 슈팅 게임들을 보면 적 비행기들이 나타나서 이리저리 날아다니면서
총알을 쏘는데 그때 적용된 기술이 베지어 곡선입니다.
하이어라키 - 오브젝트 구성
움직일 대상이 되는 플레이어, 기즈모를 그릴 빈 오브젝트 플레이어가
이동할 n점을 표시할 웨이포인트들을 생성합니다.
스크립트 - OnDrawGizmos
public Transform[] waypoints;
private Vector2 gizmosPosition;
private void OnDrawGizmos() {
for (float t = 0; t < 1; t += 0.05f) {
gizmosPosition =
Mathf.Pow(1 - t, 3) * waypoints[0].position
+ 3 * t * Mathf.Pow(1 - t, 2) * waypoints[1].position
+ 3 * t * (1 - t) * waypoints[2].position
+ Mathf.Pow(t, 3) * waypoints[3].position;
Gizmos.DrawSphere(gizmosPosition, 15f);
}
Gizmos.DrawLine(new Vector2(waypoints[0].position.x, waypoints[0].position.y),
new Vector2(waypoints[1].position.x, waypoints[1].position.y));
Gizmos.DrawLine(new Vector2(waypoints[2].position.x, waypoints[2].position.y),
new Vector2(waypoints[3].position.x, waypoints[3].position.y));
}
기즈모는 unity 생명주기 글에서 짤막하게 설명했던 부분으로
편집기에서 작업 중인 동안에만 호출되는 함수로
Game뷰에서 기즈모는 보이지 않게 됩니다.
(위 이미지는 Scene뷰에서 캡처했습니다.)
스크립트 - BezierCurve
public Transform[] p;
public float speed = 0.5f;
private float t = 0f;
private Vector3 bezierPosition;
void Update()
{
StartCoroutine(BezierCurveStart());
}
private IEnumerator BezierCurveStart() {
t += Time.deltaTime * speed;
while(t < 1) {
bezierPosition = Mathf.Pow(1 - t, 3) * p[0].position
+ 3 * t * Mathf.Pow(1 - t, 2) * p[1].position
+ 3 * t * (1 - t) * p[2].position
+ Mathf.Pow(t, 3) * p[3].position;
transform.position = bezierPosition;
yield return new WaitForEndOfFrame();
}
t = 0f;
}
공식을 그대로 사용해 부드러운 곡선을 이동할 플레이어 스크립트를 코딩해줍니다.
결과 화면
반응형
그리드형
'유니티실습' 카테고리의 다른 글
유니티 프로젝트 파일불러오기 (0) | 2020.04.27 |
---|---|
유니티 광고적용하기 애드몹 (0) | 2020.04.26 |
유니티 특정물체 바라보기 (0) | 2020.04.24 |
유니티 물리적 제어가 가능한 강체 만들기 (0) | 2020.04.23 |
유니티 초단위 시간제어하기 (0) | 2020.04.22 |