无法在Unity中检测到冲突

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

我是Unity的新手,正在努力获取OnCollisionEnter函数。

我意识到这听起来与其他问题相似,但仍然无法解决我的问题。

我正在使用Oculus Distance Grab示例场景。

我有一个试图碰到足球的障碍;)

该方块具有盒式对撞机(非扳机)和刚体(非重力,非运动学)。

足球具有一个Sphere Collider(非球拍)(非扳机)和一个刚体(是重力,非运动学)。

该块包含一个脚本组件,该组件使它漂浮到球上并撞上它。

球具有一个带有OnCollisionEnter函数的脚本,该脚本应该在接触时破坏该块。

这里是附在球上的Player脚本。

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

public class Player : MonoBehaviour
{
    void OnCollisionEnter (Collision col) {
        FloatingItem item = col.collider.gameObject.GetComponent<FloatingItem>();
        Destroy(item);
    }
}

球在Player层中,块在Attacker层中。我仔细检查了“播放器设置”冲突矩阵中这些层之间是否启用了冲突。

此外,每个对象的碰撞器似乎都是与网格匹配的大小。

任何有助于使碰撞正常进行的帮助都将是美好的!

这里也是设置的外观:

enter image description hereenter image description here

UPDATE:

这里是浮动块的Update方法:

void FixedUpdate () {
      if(targetTransform != null) {
        this.transform.position = Vector3.MoveTowards(this.transform.position, targetTransform.transform.position, Time.deltaTime * moveSpeed);
      }
    }

我一直很难使任何调试日志显示在控制台中,因此它们并不可靠。但是答案是,碰撞实际上是有效的,但是我正在销毁错误的物体。

将其更改为Destroy(col.collider.gameObject)有效。在这里学到的重要区别!谢谢!

UPDATE 2:

我已经添加了如何设置OVRPlayerController的图像。试图通读有关此character controller组件的薄弱文档,但据我了解,它包含一个胶囊对撞机。

enter image description here

unity3d oculus
1个回答
0
投票

只要涉及Rigidbody,就应该NOT设置

transform.position = Vector3.MoveTowards(...);

而是通过Rigidbody组件,例如使用MovePosition

MovePosition移动Rigidbody.MovePosition并符合插值设置。启用Rigidbody插值后,Rigidbody将在帧之间创建平滑过渡。

[通过Rigidbody.MovePosition移动时,这将保持物理原封不动,会产生硬跳,不会对碰撞产生反应!

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