【发布时间】:2016-05-03 07:15:31
【问题描述】:
我正在尝试创建一个 Pong 克隆用于练习。我在 2D 中设置我的项目。
桨有以下组件:
- -Rigidbody2D(设置为
kinematic) - -BoxCollider2D(是
trigger)
球有以下组成部分:
- -Rigidbody2D(设置为
kinematic) - -CircleCollider2D(是
trigger)
桨是通过拖动来控制的(用户在屏幕上左右拖动手指)。我为此使用了EasyTouch 插件。
然后我用这个脚本移动球:
void Update () {
transform.position += new Vector3(xSpeed * Time.deltaTime, ySpeed * Time.deltaTime);
}
这就是我检测碰撞并在球击中某物后重定向球的方式(水平对象是顶部/底部/桨,而垂直对象是左/右屏幕边框):
void OnTriggerEnter2D(Collider2D c)
{
if(c.gameObject.tag.Equals("Horizontal"))
{
ySpeed *= -1;
}
else if(c.gameObject.tag.Equals("Vertical"))
{
xSpeed *= -1;
}
}
问题是有时球会穿过球拍,这对最终用户来说可能会出现故障。我在网上搜索过这个,我试图将刚体的Collision Detection 属性设置为Continuous 而不是Discrete。但是球在某些时候仍然会通过桨。
有人知道如何解决这个问题吗?我在设置/编码游戏的方式上做错了什么?
谢谢
【问题讨论】:
-
物理引擎没有问题,因为你没有使用任何物理。添加一些调试日志以检查您的球出现故障时发生的情况
-
有趣的是,人们认为它更有可能是它的统一性错误而不是他们的错误。你为什么不搜索一个 pong 教程来寻找统一,有很多而且只需要一两个小时,但是如果你在尝试自己的想法之前知道事情是如何运作的,你就会避免很多挫折。请不要把它当作冒犯,即使我一开始有点讽刺:)
-
感谢两位的建议。是的,我会继续学习教程并复习。很久没有接触游戏开发和 Unity 了。我又觉得自己像个新手了:P
标签: unity3d 2d collision rigid-bodies