【问题标题】:I'm trying to figure out what is the best way to prevent from the player to move through walls and other objects?我试图弄清楚防止玩家穿过墙壁和其他物体的最佳方法是什么?
【发布时间】:2019-10-23 15:03:38
【问题描述】:

我可以想到我将在游戏中使用哪些对象,然后为它们添加一个盒子碰撞器或网格碰撞器,然后开始设置它们。或者我可以使用光线投射并检测到我想避免穿过的物体的距离?使用光线投射距离计算的逻辑是吗?

void FixedUpdate()
{
    Vector3 direction = new Vector3(transform.position - lastPosition);
    Ray ray = new Ray(lastPosition, direction);
    RaycastHit hit;
    if (Physics.Raycast(ray, hit, direction.magnitude))
    {
        // Do something if hit
    }

    this.lastPosition = transform.position;
}

不确定这是否是适合播放器的脚本。也许需要使用图层?但逻辑是,如果玩家距离物体 0.3f 距离,玩家将停止向前移动。

【问题讨论】:

  • 如果你想用unity的物理,用刚体,教程很多

标签: c# unity3d


【解决方案1】:

使用统一,你真的不想从后面的代码中做任何这些事情,而是你的“播放器”上有一个 RigidBody 或 RigidBody2D 组件,然后是一个盒子碰撞器或网格碰撞器(或那些的 2d 版本)在您的碰撞对象上。

这将处理所有碰撞并在玩家撞到该对象时停止。

另一个建议是,当在后端处理碰撞时,您不想使用 FixedUpdate,因为对象的移动速度足够快,它会在更新之间通过碰撞器

【讨论】:

  • 胶囊对撞机的使用频率高于 Box,但两者都有效。但是不要使用网格碰撞器,它们不会在运行时被转换(移动、旋转或缩放)。
  • 只提到mesh,因为他在原帖里说过(不知道他有没有需要mesh的计划)我自己不使用,一直框
  • 它们很好,但如果它们移动(等),性能会受到影响,因为 Unity 必须重新计算它们。
猜你喜欢
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多