
마우스의 위치에 따라 가이드라인이 생기고 미사일이 발사되는 예제
//현재 마우스의 위치를 게임 내의 Position 값으로 변환
void MouseCheck()
{
Vector2 mousePos = Input.mousePosition;//마우스의 위치값 받음
//현재 마우스의 위치를 게임 내의 Position 값으로 변환
//게임 내에서의 마우스 위치 Position 값으로 변환
mousePos = mainCamera.ScreenToWorldPoint(mousePos);
//플레이어 위치
Vector3 playerPos = transform.position;
//마우스 포지션이 도착지점
//플레이어 위치가 시작지점
//마우스 포지션 - 플레이어 위치 = 가이드라인 방향
Vector2 distanceVec = mousePos - (Vector2)playerPos;
//가이드라인 활성화?
//일정 거리 안에 들어가면 활성화O
//magnitue 이용하면 거리(길이) 알 수 있음
//sqrMagnitude : 거리의 제곱 알 수 있음
guideLine.SetActive(distanceVec.magnitude < ditectionRange ? true : false);
//가이드라인 방향을 distanceVec의 방향벡터로 설정하겠다는 뜻
//방향벡터를 설정하는 것은 벡터.normalized
// distanceVec.normalized == distanceVec/distanceVec.magnitude
guideLine.transform.right = distanceVec.normalized;
}
ScreenToWorldPoint : 현재 마우스의 위치를 게임 내의 Position 값으로 변환
게임 내에서의 마우스 위치 Position 값으로 변환
- 변환 안하면 화면 해상도 좌표로 뜸
ex) 변환 전 mousePosition (0,0) -> 화면 왼쪽 아래 꼭지점
변환 후 mousePosition (0,0) -> 화면 중앙
magnitude : 거리(길이) 알 수 있음
normalized : 방향벡터로 바꿔줌
*방향에 관련된 것은 모두 방향벡터로 설정해야 함
void Update()
{
MouseCheck();
//마우스 왼쪽 버튼 입력
//총알 발사
if (Input.GetMouseButtonDown(0))
{
Vector2 mousePos = Input.mousePosition;
mousePos = mainCamera.ScreenToWorldPoint(mousePos);
Vector3 playerPos = transform.position;
Vector2 dirVec = mousePos - (Vector2)playerPos; //그냥 벡터를 만듦
dirVec = dirVec.normalized; //방향벡터로 만듦
GameObject tempObject = Instantiate(bulletObject, bulletContainer);
//총알의 오른쪽 방향을 dirVec으로 설정
tempObject.transform.right = dirVec;
//총알이 플레이어보다 살짝 앞에서 발사
tempObject.transform.position = (Vector2)playerPos + dirVec * 0.5f;
//플레이어 넉백(반대방향으로 이동)
transform.Translate(-dirVec);
}
}