Unity 2D 播放器与墙壁碰撞导致运动抖动

问题描述 投票:0回答:2

尝试在Unity中制作一款自上而下的射击游戏。使用 2D (URP) 核心。每当玩家以某种方式与墙壁碰撞(从侧面滑落或与墙角碰撞)时,玩家就会开始抖动并在没有输入的情况下缓慢移动。它还朝鼠标的方向移动。我该如何解决这个问题?

玩家脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMovement : MonoBehaviour
{
    [SerializeField]
    private float movespeed;

    [SerializeField]
    private float rotspeed;

    [SerializeField]
    private Camera cam;

    [SerializeField]
    private Animator animator;

    private Rigidbody2D rb;
    private Vector2 moveInput;



    private void Awake()
    { 
        rb = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        animator.SetFloat("Speed", rb.velocity.sqrMagnitude);
    }
    private void FixedUpdate()
    {
        SetPlayerVel();
        RotateInDirectionofCursor();
    }

    private void SetPlayerVel()
    {
        rb.velocity = moveInput * movespeed * Time.deltaTime;


    }

    private void RotateInDirectionofCursor()
    {
       Vector2 mouseWorldPos = cam.ScreenToWorldPoint(Input.mousePosition);

        transform.up = (mouseWorldPos - new Vector2(transform.position.x, transform.position.y)) * -1;

    }

    private void OnMove(InputValue inputValue)
    {
        moveInput = inputValue.Get<Vector2>();
    }

其他组件:

玩家:

  • Rigidbody2D:主体类型(动态) 碰撞检测(连续) 插值(插值)
  • 盒子碰撞器 2D
  • 玩家输入

墙:(这是在瓦片地图网格下)

  • 2D 瓷砖地图碰撞器
  • Rigidbody2D:主体类型(静态)

我尝试将玩家移动到 rb.MovePosition 的方式以及玩家与墙壁碰撞的方式更改为脚本。两者都不起作用,虽然我不精通Unity,所以我可能不明白问题是什么。

c# unity-game-engine game-physics
2个回答
0
投票

当玩家的物理与墙壁发生碰撞并导致玩家被卡住或被困时,就会发生这种类型的抖动和无输入的缓慢移动。以下是尝试解决此问题的一些建议:

  • 您可以尝试调整玩家碰撞体的物理材质,以减少玩家与墙壁之间的摩擦力。这可以通过改变物理材料的摩擦和弹跳属性来完成。

  • 增加玩家的质量可以使其在与墙壁碰撞时不太可能被卡住或被困。这可以通过调整玩家的 Rigidbody 组件的质量属性来完成。

  • 确保玩家的碰撞器的形状和大小适合您的游戏,通常胶囊碰撞器最适合玩家控制器。如果碰撞体太大或太小,都会导致玩家在与墙壁碰撞时卡住或抖动。

希望这些建议中的一项或多项能够帮助您解决问题。


0
投票

这是一个有用的提示。在墙上,我也遇到了同样的问题。然而,我使用的是 2D 瓷砖地图。我将平台效应器 2D 组件添加到我的块和墙壁上。它解决了我的问题。确保添加平台效应器时,在任何有效的碰撞器(例如 BoxCollider2D 或 PolygonCollider2D)中选中“由效应器使用”复选框。 我不确定这是否有帮助,但值得一试。

© www.soinside.com 2019 - 2024. All rights reserved.