[Unity] 4. 벡터의 외적

홍예주·2022년 1월 12일
0

Unity - 수학,물리

목록 보기
4/7

1. 강의 정리

2. 실습

1) 플레이어 이동


void PlayerMove()
    {
        //x축 이동(좌우 이동)
        float  x = Input.GetAxis("Horizontal");

        //Vector3.right vs transform.right는 다른 방향
        //transform.right는 해당 객체의 오른쪽
        //Vector3.right는 월드에서 x축의 오른쪽 방향
        //transform.right는 객체의 회전에 영향을 받음
    
        transform.Translate(Vector3.right * (x * speed * Time.deltaTime));
    }
  • Vector3.right : 월드에서 x축의 오른쪽 방향
  • transform.right : 오브젝트의 오른쪽 방향

2) 플레이어 점프

    void PlayerJump()
    {
        //스페이스 입력시
        if(Input.GetKeyDown(KeyCode.Space))
            warriorRigidbody2D.AddForce(Vector2.up * jumpPower,ForceMode2D.Impulse);
            //world 좌표계에서 위쪽 방향으로 jumpPower 만큼 힘을 가함
            //jumpPower의 type : impulse(순간적인 힘)
    }
  • Addforce (1번 게시글 참고)

3) 벽 충돌 위치 검사

  • 왜 벡터외적으로 위/아래 위치를 검사하는가?
    (그냥 오브젝트가 벽 아래에 있는지 확인하면 되는 거 아닌지?)
    -> 벽이 기울어 있을 때 벽의 pivot 위치 기준으로 검사하기 때문에

    이런 경우에는 밑에 있다고 판단할 수 있음.

    private void OnCollisionEnter2D(Collision2D _col)
    {

        //벽의 아래쪽? 위쪽?에 부딪혔는지
        //그라운드 외의 물체에 부딪혔을 때 검사
        if (_col.gameObject.tag != "Ground")
        {
            UpOrDown(_col);
        }
    }

    void UpOrDown(Collision2D _col)
    {

        //플레이어 포지션 - 충돌체의 포지션
        //벽 -> 전사 방향으로 벡터를 만든다
        Vector3 distVec = transform.position - _col.transform.position;

        //외적 결과값이 양수냐?
        //col.tranform.right : 충돌체의 오른쪽 방향벡터
        //교환법칙 성립 안함 -> 충돌체(벽)의 오른쪽 방향벡터를 a 벡터로
        //이유 : 충돌체의 오른쪽 방향벡터는 고정되어 있기 떄문에
        

        //반시계 방향 - 엄지의 방향(화면에서 밖으로 나옴) - 양수 : 벽의 위에 부딪힘
        //시계 방향 - 엄지의 방향(화면 안으로 들어감) - 음수 : 벽의 아래에 부딪힘
        if (Vector3.Cross(_col.transform.right, distVec).z > 0)
        {
            Debug.Log("Up");
            return;
        }
        Debug.Log("Down");
    }
 

  • 벽에서 플레이어 방향으로 벡터

  • 충돌체(벽)의 오른쪽 방향 벡터

profile
기록용.

0개의 댓글

관련 채용 정보