unity3d - 在 Unity 中无法检测到碰撞
问题描述
我是 Unity 的新手,正在努力获取该OnCollisionEnter
功能。
我意识到这听起来与其他问题相似,但我仍然无法让它适用于我的情况。
我正在使用 Oculus 距离抓取示例场景。
我有一个障碍试图撞到一个足球;)
该块有一个盒子对撞机(非触发器)和刚体(非重力,非运动学)。
足球有一个 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
层中。我在 Player Settings 碰撞矩阵中仔细检查了这些层之间是否启用了碰撞。
此外,每个对象的对撞机似乎是它们应该匹配网格的大小。
任何帮助碰撞工作都会很棒!
这也是设置的视觉效果:
更新:
这是浮动块的Update
方法:
void FixedUpdate () {
if(targetTransform != null) {
this.transform.position = Vector3.MoveTowards(this.transform.position, targetTransform.transform.position, Time.deltaTime * moveSpeed);
}
}
我一直无法在控制台中显示任何调试日志,因此它们不可靠。但答案是碰撞实际上是有效的,但我破坏了错误的对象。
将其更改为Destroy(col.collider.gameObject)
有效。在这里学到了一个重要的区别!谢谢!
更新 2:
我添加了如何OVRPlayerController
设置的图像。试图阅读有关此character controller
组件的弱文档,但我的理解是它包含一个胶囊对撞机。
解决方案
每当Rigidbody
涉及到时,您都不应设置
transform.position = Vector3.MoveTowards(...);
而是通过Rigidbody
组件,例如使用MovePosition
Rigidbody.MovePosition
移动 aRigidbody
并符合插值设置。Rigidbody
启用插值后,在Rigidbody.MovePosition
帧之间创建平滑过渡。
这样可以在移动时保持物理完好无损,transform.position
这会创建一个不会对碰撞做出反应的硬跳!
// If possible already reference this via the Inspector
[SerializeField] private Rigidbody _rigidbody;
public Rigidbody target;
private void Awake()
{
if(!_rigidbody) _rigidbody = GetComponent<Rigidbody>();
// Always when controlling your position by script the Rigidbody
// should be kinematic
_rigidbody.isKinematic = true;
}
private void FixedUpdate ()
{
_rigidbody.MovePosition(Vector3.MoveTowards(_rigidbody.position, target.position, Time.deltaTime * movespeed));
}
推荐阅读
- c# - 如何在 asp.net core blazor 的通用服务中使用任何模型
- ssas - MDX 查询有效,但忽略 EXCEPT 子句
- java - LWJGL 在启动时崩溃
- wix - 在我的 Windows WiX 安装程序中,我的自定义操作不运行
- typescript - 方法调用的`this`强制
- python - 一个 Python 函数,它需要多少行和多少列,它应该以网格形式打印一对空方括号 []
- python - 即使在 gropandas 绘图时安装了模块 rasterion.io 也找不到
- sql - 当 h2 数据库查询的一部分重复几次时,如何保持它的简短?
- python - “ValueError:无法将权重广播到值。在昏暗 1 处不匹配。” 在序列模型上使用自定义损失函数时
- android - 在android应用程序中显示所有网络响应