반응형
이번에는 조준 기능과, 회피 기능을 구현해 보자.
우선 마우스의 좌표를 받아와주는 UtilsClsss를 만들었다.
public class UtilsClsss : MonoBehaviour
{
public static Vector3 GetMouseWorldPosition()
{
Vector3 vec = GetMouseWorldPositionWithZ(Input.mousePosition, Camera.main);
vec.z = 0f;
return vec;
}
public static Vector3 GetMouseWorldPositionWithZ()
{
return GetMouseWorldPositionWithZ(Input.mousePosition, Camera.main);
}
public static Vector3 GetMouseWorldPositionWithZ(Camera worldCamera)
{
return GetMouseWorldPositionWithZ(Input.mousePosition, worldCamera);
}
public static Vector3 GetMouseWorldPositionWithZ(Vector3 screenPosition, Camera worldCamera)
{
Vector3 worldPosition = worldCamera.ScreenToWorldPoint(screenPosition);
return worldPosition;
}
}
현재 마우스의 좌표를 받아서 ScreenToWorldPoint로 스크린 좌표에서 월드 좌표로 변환해주었다.
참고로
스크린 좌표는 유니티의 Game탭에서 정한 해상도가 1920x1080라면 왼쪽 아래의 x,y 좌표는 (0,0)이고
오른쪽 위가(1920,1080)이다.
마우스 포인터의 위치나 캔버스(Canvas)등이 이 좌표계를 사용한다.
월드 좌표는 Scene에서 나타나는 게임 세계(World)에서 게임오브젝트의 위치를 나타낼 때 사용한다.
Inspector창의 Transform에 있는 좌표이다.
그렇게 받아온 마우스 좌표에서 플레이어의 위치를 빼주어서 현재 조준하고 있는 방향을 구한 뒤,
Mathf.Atan2 함수를 사용하여 Radian 값을 구한 다음, Mathf.Rad2Deg를 곱해주어 Degree 값으로 변환하여 각도를 구했다
그런 다음 조준점을 구한 각도만큼 계속해서 기울여 주면 조준 기능이 완성된다.
Transform aimTransform = firePos.transform;
Vector3 mousePosition = UtilsClsss.GetMouseWorldPosition();
Vector3 aimDirection = (mousePosition - transform.position).normalized;
float angle = Mathf.Atan2(aimDirection.y, aimDirection.x) * Mathf.Rad2Deg;
aimTransform.eulerAngles = new Vector3(0, 0, angle);
다음으로는 회피 기능이다.
우선 플레이어에 새로운 Capsule Collider를 추가해준다.
왜냐하면 기존에 플레이어가 가지고 있는 콜라이더로 회피 기능을 만들게 될 시 벽을 뚫고 나가게 되기 때문이다.
회피 기능이 호출되면 순간적으로 플레이어의 이동속도를 늘려주고,
플레이어 히트박스 콜라이더를 잠시 비활성화 시켜주어 무적상태가 된다. 또한 코루틴을 사용해 지정한 쿨타임이 지나야 다시 회피기능을 사용할 수 있다. 마지막으로 애니메이션 까지 재생하면 회피 기능이 완성된다.
void Dodge()
{
m_speed = 30;
hitBox.enabled = false;
Invoke("DodgeOut", 0.1f);
Invoke("invincibleOut", 0.5f);
}
void DodgeOut()
{
m_speed = 15f;
animator.SetBool("isDodge", false);
}
void invincibleOut()
{
hitBox.enabled = true;
}
IEnumerator waitForIt()
{
yield return new WaitForSeconds(rollTime);
isRoll = false;
}
반응형
'유니티' 카테고리의 다른 글
유니티 플러그인에 dll추가 후 빌드 안되는 문제 (0) | 2022.12.12 |
---|---|
알발 페스타 공모전(4) (0) | 2022.07.18 |
알발 페스타 공모전(2) (0) | 2022.07.18 |
알발 페스타 공모전(1) (0) | 2022.07.18 |