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));
}
void PlayerJump()
{
//스페이스 입력시
if(Input.GetKeyDown(KeyCode.Space))
warriorRigidbody2D.AddForce(Vector2.up * jumpPower,ForceMode2D.Impulse);
//world 좌표계에서 위쪽 방향으로 jumpPower 만큼 힘을 가함
//jumpPower의 type : impulse(순간적인 힘)
}
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");
}
벽에서 플레이어 방향으로 벡터
충돌체(벽)의 오른쪽 방향 벡터