[Unity] 2. 벡터와 단위 벡터

7232 단어 UnityUnity

1. 벡터 강의 정리

2. 실제 사용 실습

마우스의 위치에 따라 가이드라인이 생기고 미사일이 발사되는 예제

1) 마우스 위치 변환

//현재 마우스의 위치를 게임 내의 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 : 방향벡터로 바꿔줌
    *방향에 관련된 것은 모두 방향벡터로 설정해야 함


2) 총알 발사

   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);
       }
   }

좋은 웹페이지 즐겨찾기