【发布时间】:2021-08-05 10:35:28
【问题描述】:
目前,我想在统一的 2D 游戏中为玩家制作冲刺。我正在使用玩家左右两侧的游戏对象来使用光线投射来检查某个区域与墙壁的距离。如果它离墙太近,我需要它只冲刺那个距离(到墙)而不是整个距离(在墙后面/穿过墙)。
这是我在玩家运动中冲刺的代码(DashCheckLeft 距离玩家 -0.5)(DashCheckRight 距离玩家 0.5):
public float dashDistance = 3f;
float distance;
public Transform DashCheckLeft;
public Transform DashCheckRight;
private void Update() {
if(Input.GetKeyDown(KeyCode.LeftShift)) {
Debug.Log("Dashed");
Dash();
private void FixedUpdate() {
RaycastHit2D hitLeft = Physics2D.Raycast(DashCheckLeft.position, Vector2.left, -dashDistance);
RaycastHit2D hitRight = Physics2D.Raycast(DashCheckRight.position, Vector2.right, dashDistance);
if(hitLeft.collider != null) {
distance = Mathf.Abs(hitLeft.point.x - transform.position.x);
}
else if(hitRight.collider != null) {
distance = Mathf.Abs(hitRight.point.x - transform.position.x);
}
else {
distance = dashDistance;
}
}
private void Dash() {
rb.position = new Vector2(rb.position.x + distance, rb.position.y);
}
现在的问题是,显然我只是在缩短玩家和 DashChecks (0.5f) 之间的距离,而不是预期的 3f,我相信这可能是因为光线投射以某种方式击中了玩家的对撞机,但是将我的播放器更改为“Ignore Raycast”层会使其掉到地板上,也不能解决问题。
【问题讨论】:
标签: c# visual-studio unity3d raycasting