如何解决Unity 2D 对撞机运行不正常我无法通过/在 2D 对撞机下方的一个方块上移动
所以我试图做一个瓷砖基础运动,突然遇到了collider2D的这个问题。 所以我为图像中的那个极点设置了一个平铺大小的 2D 对撞机,但是有一个问题。 我突然注意到我无法通过或在 2D Collider 下方的一个瓷砖/块上移动。
请注意,角色没有任何碰撞器 2d 或刚体 2d。
角色依靠函数 private bool notBlocked(Vector3 movePosition)
来阻止我的角色移动并在被阻止时停止动画。
我突出显示了无法移动的块/图块。那里没有碰撞器,所以我不知道为什么我的角色不能穿过/在上面
但是当我在碰撞器顶部的块上尝试它时,它的工作原理与碰撞器周围的左右瓷砖/块相同。
所以这是我在碰撞时用于移动和停止移动的代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private float moveSpeed;
public LayerMask SolidObjectLayer;
private bool isMoving;
private Vector2 input;
private Animator animator;
private void Update()
{
InputMove();
}
private void Awake()
{
animator = GetComponent<Animator>();
}
private void InputMove()
{
if (!isMoving)
{
input.x = Input.GetAxisRaw("Horizontal");
input.y = Input.GetAxisRaw("Vertical");
if (input.x != 0) input.y = 0;
if (input != Vector2.zero)
{
animator.SetFloat("Horizontal",input.x);
animator.SetFloat("Vertical",input.y);
var movePos = transform.position;
movePos.x += input.x;
movePos.y += input.y;
if (notBlocked(movePos))
StartCoroutine(Move(movePos));
}
}
if (Input.GetKey(KeyCode.LeftShift))
{
moveSpeed = 6f;
animator.speed = 1.5f;
}
else
{
moveSpeed = 4f;
animator.speed = 1f;
}
animator.SetBool("isMoving",isMoving);
}
IEnumerator Move(Vector3 movePos)
{
isMoving = true;
while((movePos - transform.position).sqrMagnitude > Mathf.Epsilon)
{
transform.position = Vector3.MoveTowards(transform.position,movePos,moveSpeed * Time.deltaTime);
yield return null;
}
transform.position = movePos;
isMoving = false;
}
private bool notBlocked(Vector3 movePosition)
{
if(Physics2D.OverlapCircle(movePosition,0.2f,SolidObjectLayer) != null)
{
return false;
}
return true;
}
}
我不知道它是否与“private bool isBlocked()”有关,但这是我用来阻止角色在被阻止时进一步移动的功能。
解决方法
您角色上的碰撞器似乎太大了。如果碰撞器覆盖了整个角色,则头部会与柱子发生碰撞。要解决此问题,您可以单击此按钮:
并编辑碰撞器,使其仅是脚所在的底部方块。这样可以防止头部撞到柱子。
好的,所以我以某种方式设法弄清楚如何解决它。
所以角色只能在没有碰撞器的方块上移动
所以这意味着如果那个黄点直接穿过碰撞器,那么它会阻止我的角色移动。所以看起来 OverlapCircle 是从角色的中心或枢轴投射的,所以我把角色的枢轴调低了一点。
正如你在这里看到的,问题是 OverLapCircle 试图在对撞机中行走
但是脚本阻止了它的发生并阻止我在瓷砖下方移动时间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。