[Unity] 3. 벡터의 내적

5716 단어 UnityUnity

1. 벡터의 내적 강의 정리

2. 실제 실습 내용

  • 손전등 범위 안에 유령이 있는지 체크

1) 플레이어 이동

   void PlayerMove()
    {
        float x = Input.GetAxis("Horizontal");
        float y = Input.GetAxis("Vertical");
        //GetAxis 조이스틱 컨트롤러 간단하게 만들 수 있음
        //Horizontal x축, Vertical y축


        transform.Translate(new Vector3(x,y) * (moveSpeed * Time.deltaTime));
    }

2) 유령 체크

void CheckGhost()
    {
        //유령의 수 초기값 0
        int i = 0;

        //foreach 이용해 각 오브젝트(유령) 전부 체크
        foreach (var ghost in ghostObjectArray)
        {
            //유령 위치값(도착지) - 플래쉬 위치값(출발지)
            //= 유령에서 플래쉬까지의 벡터 만들어줌
            Vector3 distanceVec = ghost.transform.position - transform.position;

            //magnitude : 거리값
            //설정한 범위 안에 들어와있는지
            if (distanceVec.magnitude < rangeDistance)
            {
                //distanceVec = 정리에서 벡터 d에 해당
                //방향벡터로 만들어줌(내적하기 위햬)
                Vector3 dirVec = distanceVec.normalized;
                
                //transfrom.up -> 플래쉬의 위쪽 방향 벡터(크기 1), 정리에서 벡터 c에 해당
                //플래쉬 위쪽 방향과 dirVec 내적 (Vector3.Dot)
                //내적값이 범위 앵글의 cos값보다 크면 범위 내에 있음
                if(Vector3.Dot(transform.up, dirVec) > Mathf.Cos(rangeAngle*Mathf.Deg2Rad))
                    i++;
            }
        }
        
        Debug.Log("감지된 유령의 수: "+i);
    }

좋은 웹페이지 즐겨찾기