代码之家  ›  专栏  ›  技术社区  ›  Shane Gleeson

未调用Unity OnCollisionEnter2d

  •  1
  • Shane Gleeson  · 技术社区  · 9 年前

    我在获取OnCollisionEnter2d时遇到问题。我刚从Unity开始,我想我可以拼凑出一个简单的乒乓球版本,开始学习基础知识。在我附加到一个球的脚本中,我有一个OnCollisionEnter2d方法,但它没有被调用。

    在看了其他帖子后,人们遇到了这个问题,我取消选中了“是运动学的”,并将重力设置为0。取消选中“是动力学的”后,我必须检查后壁上的x、y和z约束,以防止它被球打掉。球有一个“圆形碰撞器2d”组件,墙有一个”长方体碰撞器2d”组件。它们都具有非运动学RigidBody2d组件。另一个类似问题的答案是检查不同层之间的碰撞是否启用。它们都在同一层。

    我肯定我只是错过了一些简单的东西,但我真的很困惑。这本来是为了让我在设计出一点肉的东西之前快速地凑在一起如果有人能帮我,我真的很感激。以下代码和组件:

    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    
    public class BallController : MonoBehaviour {
        public float speed;
        public Text scoreText;
        private int score;
    
        // Use this for initialization
        void Start () {
            Rigidbody2D rb2d = GetComponent<Rigidbody2D>();
            Vector2 movement = new Vector2(1, 1);
            rb2d.AddForce(movement * speed);
            score = 0;
            scoreText.text = "Score: " + score.ToString();
        }
    
        // Update is called once per frame
        void Update () {
    
        }
    
        void OnCollisionEnter2d (Collider2D other)
        {
            scoreText.text = "test"; // added this line just to see if the method was being called at all
            if (other.gameObject.tag == "BackWall")
            {
                score = score + 1;
                scoreText.text = "Score: " + score.ToString();
            }
        }
    }
    

    Ball and back wall components

    抱歉,我还不能在线粘贴图像,因为我没有代表。

    1 回复  |  直到 9 年前
        1
  •  1
  •   HalpPlz    9 年前

    正确的语法是OnCollisionEnter2D(Collision2D碰撞)

    您将OnCollisionEnter2d(Collider2D其他)

    如果某个函数拼写错误,Unity将无法识别该函数,即使是轻微的拼写错误。

    (你不会相信我自己有多少次沦陷于此。)

    相关链接: http://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionEnter2D.html