오늘의 학습 키워드
Sin, Cos
공부한 내용
쇠스랑 무기 구현
쇠스랑 무기는
1. 마우스의 위치로 바라보는 방향이 정해지며
2. 그 방향대로 직선으로 갔다가 돌아오는 움직임으로 구현하도록 했다.
마우스 위치에서 내 위치에를 뺀 targetRot을 구해 transform.up = targetRot에서 바라보는 방향을 정해주고
첫 번째 while에서 마우스 위치로 가는 것, 두 번째 while에서 offset위치로 돌아오도록 만들었다.
protected override IEnumerator Move()
{
Vector2 targetPos = _mainCam.ScreenToWorldPoint(Input.mousePosition);
float harfDuration = movingDuration * 0.5f;
float elapsedTime = 0f;
float normalizedRatio = 0f;
Vector2 targetRot = (targetPos - (Vector2)transform.position).normalized;
transform.up = targetRot;
while (elapsedTime < harfDuration)
{
elapsedTime += Time.deltaTime;
normalizedRatio = elapsedTime / harfDuration;
transform.position = Vector2.Lerp(transform.position, targetPos, normalizedRatio);
yield return null;
}
elapsedTime = 0f;
while (elapsedTime < harfDuration)
{
elapsedTime += Time.deltaTime;
normalizedRatio = elapsedTime / harfDuration;
transform.position = Vector2.Lerp(transform.position, offsetTransform.position, normalizedRatio);
yield return null;
}
StartCoroutine(Move());
}
낫 무기 구현
낫 무기는
1. 캐릭터를 중심으로 원형으로 돌며
2. 자신을 중심으로 원형으로 회전하도록 구현하도록 했다.
transform.rotation에 Quaternion.Euler로 자기 자신의 회전을 정해주고
단위원에서의 삼각함수를 이용해 x,y의 위치를 정해주었다.
protected override IEnumerator Move()
{
transform.rotation = Quaternion.Euler(0, 0, -currentAngle);
if (currentAngle < 360f)
{
float xPos = Mathf.Sin(currentAngle * Mathf.Deg2Rad);
float yPos = Mathf.Cos(currentAngle * Mathf.Deg2Rad);
transform.position = new Vector2(xPos, yPos) * radius;
currentAngle += Time.deltaTime * moveSpeed;
yield return null;
}
else
currentAngle = 0f;
StartCoroutine(Move());
}
결과
오늘의 회고
오늘은 무기 공격 방식과 업그레이드 부분을 구현했다. 다음에는 실제 몬스터에게 데미지를 입힐 수 있도록 Collider 충돌 로직을 구현해야겠다. 연휴라도 짬짬이 시간을 내서 씬을 합치는 날인 월요일까지 맡은 부분을 완성할 수 있도록 해야겠다. 월요일까지 화이팅!
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 40일차 TIL - FSM (0) | 2023.10.05 |
---|---|
내일배움캠프 39일차 TIL - static 클래스 (1) | 2023.10.04 |
내일배움캠프 37일차 TIL - 원형으로 발사되는 투사체 (0) | 2023.09.27 |
내일배움캠프 36일차 TIL - UI 중복 없이 랜덤 뽑기 (0) | 2023.09.26 |
내일배움캠프 35일차 TIL - UI 팝업 관리 (0) | 2023.09.25 |