내일배움캠프(Unity)
TIL - 팀프로젝트
빵어
2023. 12. 5. 23:34
오늘은 팀프로젝트를 했다.
오늘 구현한 Enemy Move
Sin함수가 굉장히 편리한 거였다..
IEnumerator Move()
{
while(State != CreatureState.DEAD)
{
System.Random random = new System.Random();
int randomNumber = random.Next(0, 3);
Vector3 originalPosition = transform.position;
switch (randomNumber)
{
case 0:
yield return StartCoroutine(UpDown());
break;
case 1:
yield return StartCoroutine(LeftRight());
break;
case 2:
yield return StartCoroutine(Diagonal());
break;
default:
break;
}
yield return StartCoroutine(MoveToOriginalPosition(originalPosition, 0.15f));
}
yield break;
}
IEnumerator UpDown()
{
float elapsedTime = 0f;
Vector3 originalPosition = transform.position;
while (elapsedTime < moveTime)
{
float newY = originalPosition.y + Mathf.Sin(elapsedTime * moveFrequency) * moveMagnitude;
transform.position = new Vector3(originalPosition.x, newY, originalPosition.z);
elapsedTime += Time.deltaTime;
yield return null;
}
}
IEnumerator LeftRight()
{
float elapsedTime = 0f;
Vector3 originalPosition = transform.position;
while (elapsedTime < moveTime)
{
float newX = originalPosition.x + Mathf.Sin(elapsedTime * moveFrequency) * moveMagnitude;
transform.position = new Vector3(newX, originalPosition.y, originalPosition.z);
elapsedTime += Time.deltaTime;
yield return null;
}
}
IEnumerator Diagonal()
{
float elapsedTime = 0f;
Vector3 originalPosition = transform.position;
while (elapsedTime < moveTime)
{
float newX = originalPosition.x + Mathf.Sin(elapsedTime * moveFrequency) * moveMagnitude;
float newY = originalPosition.y + Mathf.Sin(elapsedTime * moveFrequency) * moveMagnitude;
transform.position = new Vector3(newX, newY, originalPosition.z);
elapsedTime += Time.deltaTime;
yield return null;
}
yield return StartCoroutine(MoveToOriginalPosition(originalPosition, 0.2f));
}
IEnumerator MoveToOriginalPosition(Vector3 originalPosition, float duration)
{
float elapsedTime = 0f;
Vector3 startPosition = transform.position;
while (elapsedTime < duration)
{
transform.position = Vector3.Lerp(startPosition, originalPosition, elapsedTime / duration);
elapsedTime += Time.deltaTime;
yield return null;
}
transform.position = originalPosition;
}