私はポケモンゲームを作ろうとしており、衝突検出に問題があります。例えば 、私は右ここに入れたい場合:Unity 2D:衝突検出
私はそれを行うことができるはずですが、私は移動することはできません。どちらのオブジェクトにもBoxCollider2Dがあります。 、0
木はサイズ1、1とboxcolliderを持っており、0オフセットそして、ここに私のコードです:これは、プレイヤーのBoxColliderある
void Update()
{
input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
actualSpeed = Input.GetKey(KeyCode.LeftShift) ? walkingVelocity : runingVelocity;
if (input != Vector2.zero && p == transform.position)
{
anim.SetBool("isMoving", true);
if (Mathf.Abs(input.x) > Mathf.Abs(input.y))
{
if (input.x > 0)
{
if (direction.Equals(Direction.Este) && canMove())
{
p += Vector3.right;
}else
{
direction = Direction.Este;
}
}
else
{
if (direction.Equals(Direction.Oeste) && canMove()) {
p -= Vector3.right;
}
else{
direction = Direction.Oeste;
}
}
}
else
{
if (input.y > 0)
{
if (direction.Equals(Direction.Norte) && canMove())
{
p += Vector3.up;
}else
{
direction = Direction.Norte;
}
}
else
{
if (direction.Equals(Direction.Sur) && canMove())
{
p -= Vector3.up;
}
else
{
direction = Direction.Sur;
}
}
}
anim.SetFloat("input_x", input.x);
anim.SetFloat("input_y", input.y);
}
else if (input == Vector2.zero)
{
anim.SetBool("isMoving", false);
}
transform.position = Vector3.MoveTowards(transform.position, p, actualSpeed * Time.deltaTime);
}
bool canMove()
{
bool b = true;
Ray2D r;
if (direction.Equals(Direction.Norte))
{
r = new Ray2D(transform.position, Vector3.up);
}
else if (direction.Equals(Direction.Sur))
{
r = new Ray2D(transform.position, Vector3.down);
}
else if (direction.Equals(Direction.Este))
{
r = new Ray2D(transform.position, Vector3.right);
}
else
{
r = new Ray2D(transform.position, Vector3.left);
}
Debug.DrawRay(r.origin, r.direction);
RaycastHit2D hit = Physics2D.Raycast(r.origin, r.direction, 1f , 1 << 8);
if (hit.collider != null)
{
if (hit.collider.CompareTag("Obstacle"))
{
b = false;
}
}
return b;
}
どのようにプレイヤーをツリーの上に移動させることができますか?
ありがとうございます! PD。私はUnity2D
直感的には、サイズ1×2のプレーヤースプライトが(私はで1,1をオフセット期待)木に衝突するだろうとロジックを思われます。プレーヤーのスプライトは1x1でなければならないのですか? – JHBonarius