【问题标题】:Check if I can move GameObject with MeshCollider somewhere检查我是否可以使用 MeshCollider 将 GameObject 移动到某处
【发布时间】:2014-11-14 16:01:24
【问题描述】:

我正在使用最简单的方法移动对象,这是在我学得更好之前我要做的事情:在每个Update 上,我使用Vector3.MoveTowardstransform.position 移动到Vector3 destination。确切地说:

    private GameObject actor; //Object to move
    private void MakeMove()
    {
        //Move towards destination
        actor.transform.position = Vector3.MoveTowards(actor.transform.position, destination, Time.deltaTime * moveSpeed);
        //Update HUD info
        actor.updatePosition();
        //Terminate running status if the target was reached
        if (actor.transform.position == destination && targetObj==null)
        {
            Stop();
        }
    }

这有两点很糟糕:

  1. 无论对象旋转如何,运动都会发生,而不是向前移动
  2. 对象将穿过任何其他对象到达目标

第二个问题是我想要的。假设我会在移动之前记住原来的位置:

Vector3 oldPos = actor.transform.position;
actor.transform.position = Vector3.MoveTowards( ... );
//Get true if there an object colliding with the one that was just moved
if(actor.gameObject.collider.something something) {
     //revert back to old position
     actor.transform.position = oldPos;
}

上述情况远非理想。我什至不知道如何实现这样一个简单的解决方案。你知道吗?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    1.切勿尝试移动 meshcollider 并检查其他碰撞器,因为需要完成大量工作,这会使您的 FPS 急剧下降。对复杂模型使用 compound collider。此外,将每个对撞机添加到模型的每个部分,例如,将胶囊对撞机用于手臂并将其附加到您的手臂对象

    2。为了检查对撞机,请使用 OnCollisionEnter , 可以用来检查你是否击中了以下段的对象

    void OnCollisionEnter(Collision collision) {
                  //get back to your last position
            }
    

    3。不要四处走动寻找出路,而是使用 Path Finding algorithmA* 或者如果你想要一个您可以使用您的 AI 的完整解决方案 RAIN

    4。如果您的游戏对象不相互碰撞,应考虑这些重要积分

    • 2 没有刚体的触发器,什么都不会发生。
    • 同样适用于 2 个不涉及刚体的碰撞器。
    • 2 有一个刚体连接的碰撞器将导致 碰撞。
    • Collider + Rigidbody 和 Trigger 会导致 Trigger。
    • Trigger + Rigidbody 和 Collider 也会导致 Trigger。
    • Trigger + Rigidbody 和第二个 Trigger 将再次触发 Trigger。
    • 刚体是否使用重力或运动学无关紧要,但 在所有这些情况下,只有当对象具有 刚体正在移动

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2010-09-11
      • 2018-11-18
      相关资源
      最近更新 更多