【问题标题】:How do I make this code activate when a collision occurs?发生碰撞时如何激活此代码?
【发布时间】:2013-01-04 12:50:58
【问题描述】:

此代码旨在触发碰撞:

public class Collision : MonoBehaviour {

  public CustomClass myObject;

  void onCollisionEnter(Collision crash){
    myObject.Slowdown();
  }
  void Start () {}
  void Update () {}
}

我已将它附加到将与我的主要对象 (myObject) 发生碰撞的对象 (randomObject) 上,但它不起作用。

谁能告诉我我做错了什么?

编辑:它们都是刚体并且肯定会发生碰撞:如果 randomObject 落在 myObject 上,它会停止移动并躺在上面,但是当 myObject 移动时它会继续下落。

【问题讨论】:

  • 检查你是否在至少一个物体上有 RigidBody,它会发生碰撞,并且两者都附加了某种类型的碰撞器。
  • @IlyaIvanov 两者都是刚体,但只有一个附有脚本。
  • 运动学选项是否在两者中都打开了?触发器也关闭了吗?

标签: c# unity3d


【解决方案1】:

您的类和作为OnCollisionEnter 参数的UnityEngine 类都命名为Collision。如果您更改类的名称以减少混淆(我的建议),或者将方法声明更改为以下内容,它应该可以工作:

void OnCollisionEnter(UnityEngine.Collision crash){

【讨论】:

  • 该死,Unity 3d 中的脚本反射))
  • 它仍然无法正常工作,即使改变了案例。我为“myObject”打开了“is Kinematic”,但没有打开“randomObject”
  • @IlyaIvanov 我试过了,没用。我还收到一个奇怪的错误,说“脚本错误:OnCollisionEnter 此消息参数必须是类型:碰撞消息将被忽略。”
  • 我已经编辑了我的答案,指出您的类与 UnityEngine 类的名称相同。这种名称冲突(不是双关语)让您感到困惑。
猜你喜欢
  • 2023-02-23
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多