C# Unity OnCollisionInter2D未被调用
我遇到了迎面相撞的问题。我刚从Unity开始,我想我可以拼凑一个简单版本的pong,从基础开始。在一个附加到球的脚本中,我有一个OnCollisionInter2D方法,但它没有被调用 在看过其他有这个问题的帖子后,我取消了“是运动学的”,并将重力设置为0。取消选中“Is Kinetic”后,我必须检查后壁上的x、y和z约束,以防止它被球击倒。球有一个“圆形碰撞器2d”组件,墙有一个“长方体碰撞器2d”组件。它们都有非运动学刚体2D组件。另一个类似问题的答案是检查不同层之间的碰撞是否启用。它们都在同一层上 我肯定我错过了一些简单的东西,但我真的很难受。这是我在设计更丰满一点的东西之前,迅速拼凑起来的东西如果有人能帮我,我会非常感激。代码和组件如下:C# Unity OnCollisionInter2D未被调用,c#,unity3d,unity3d-2dtools,C#,Unity3d,Unity3d 2dtools,我遇到了迎面相撞的问题。我刚从Unity开始,我想我可以拼凑一个简单版本的pong,从基础开始。在一个附加到球的脚本中,我有一个OnCollisionInter2D方法,但它没有被调用 在看过其他有这个问题的帖子后,我取消了“是运动学的”,并将重力设置为0。取消选中“Is Kinetic”后,我必须检查后壁上的x、y和z约束,以防止它被球击倒。球有一个“圆形碰撞器2d”组件,墙有一个“长方体碰撞器2d”组件。它们都有非运动学刚体2D组件。另一个类似问题的答案是检查不同层之间的碰撞是否启用。它们都
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();
}
}
}
使用UnityEngine;
使用系统集合;
使用UnityEngine.UI;
公共类BallController:单行为{
公众浮标速度;
公共文本;
个人智力得分;
//用于初始化
无效开始(){
Rigidbody2D rb2d=GetComponent();
向量2移动=新向量2(1,1);
rb2d.附加力(移动*速度);
得分=0;
scoreText.text=“Score:+Score.ToString();
}
//每帧调用一次更新
无效更新(){
}
无效OnCollisionInter2D(已碰撞的R2D其他)
{
scoreText.text=“test”;//添加此行只是为了查看是否调用了该方法
if(other.gameObject.tag==“后壁”)
{
分数=分数+1;
scoreText.text=“Score:+Score.ToString();
}
}
}
很抱歉,由于没有代表,我无法将图像内联粘贴。正确的语法是OnCollisionInter2D(Collision2D collision) 您将OnCollisionInter2D(Collizer2D其他)放入 如果函数拼错了,Unity将无法识别该函数,即使拼错的程度很小 (你不会相信我自己有多少次沦为这样的牺牲品。)
相关链接:对不起,考虑到我检查了多少次语法,我真不敢相信我错过了。顺便说一句,为什么编译器没有给出一个错误,说没有重载方法接受这个参数?C#没有检查吗?Unity只是认为您定义了自己的方法,因为您的拼写有点不同。如果函数拼写相同,但要求使用不同的参数,则会出现错误。