【问题标题】:Unity C# CollisionUnity C# 碰撞
【发布时间】:2019-03-04 16:42:23
【问题描述】:

如何为两个对象之间的碰撞检测创建脚本。这是我的代码:

using UnityEngine;

public class PlayerCollision : MonoBehaviour
{
    public PlayerMovement movement;

    void OnCollisionEnter (Collision collisionInfo)
    {
        if (collisionInfo.collider.tag == "Obstacle")
        {
            movement.enabled = false;
        }
    }
}

【问题讨论】:

标签: c# unity3d


【解决方案1】:

根据https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html 判断,您编写的代码没有任何问题。

这些方法使用失败的一个常见原因是您在 PlayerMovement 脚本中处理移动的方式(在这种情况下)。

例如,如果您直接通过 position 属性修改变换的位置,则不会计算碰撞等物理操作。 https://docs.unity3d.com/ScriptReference/Transform-position.html

另一个常见原因是您没有将刚体连接到其中一个对象,因此不会触发碰撞操作。

请参阅此处的“碰撞动作矩阵”部分: https://docs.unity3d.com/Manual/CollidersOverview.html

【讨论】:

  • 如果你直接更新变换位置,碰撞事件仍然会触发,但是内置的物理响应将不起作用。一个例子是 OnCollisionEnter 仍然会在 2 个对象第一次碰撞时触发,只要一个对象具有刚体,而不管它是如何移动的。直接设置transform.position,甚至使用transform.Translate 将抵消碰撞响应,2 个立方体仍然会发生碰撞,但它们会不断尝试相互穿透而导致抖动。
猜你喜欢
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多