我正在努力解决如何根据击球在桨上的位置来改变弹跳的方法。通常在乒乓球比赛中,角度会发生变化,具体取决于球弹跳中心的距离以及弹跳中心的方向。 我设法做了类似的事情:
//rb = rigidbody, velOnPaddleHit = predefined float
float dist = transform.position.x - paddle.position.x;
dist = transform.position.x > paddle.position.x ? dist : -dist;
dist /= paddle.localScale.x/2;
dist *= velOnPaddleHit;
rb.addForce(dist, 0,0);
但它不起作用/它很奇怪。 任何人都可以帮助我吗?
修改:以下是显示此类行为的视频。当球撞到桨的左侧时,它会向左移动,速度并不重要
答案 0 :(得分:0)
你不会根据它击中桨的位置来改变它。要改变球的方向,你所要做的就是翻转相反方向的数字。因此,将x和y轴的rigidBody值乘以-1并将其应用于球应该就是这样。
如果球与桨碰撞,将球的刚体在所有轴上的速度乘以-1,除了z轴或x轴(取决于你如何设置场景。它可以是 z 或 x 轴,但 y轴 必须在其他方向上乘以-1才能转向另一个方向。
你可能有一个speedVariable,每当它击中球拍时都会提高球的速度。
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "ball")
{
Vector3 tempVect = new Vector3(collision.rigidbody.velocity.x * -1, collision.rigidbody.velocity.y * -1, collision.rigidbody.velocity.z);
collision.rigidbody.velocity = tempVect;
}
}
为了检测球击中的位置,我所知道的最简单方式是使用小型对撞机。
创建至少24个盒子对撞机。将它们从 detector1 命名为 detector24 ( detector1 , detector2 , detector3 , detector4 , detector5 ..... )
标记 isTrigger
的24个对手 true ,以便它们不会与球发生碰撞。
创建名为“ detectorLayer ”的图层,并确保这24个框对撞机位于“detectorLayer”图层中。
创建另一个名为“ ballLayer ”的图层,并使确定表示球的图层 设置为“ballLayer”。
将对手附加到您的名为的桨上。 将您的paddle的GameObject名称改为为“ Paddle ”。 创建一个名为“ PaddleLayer ”的新图层,并确保“ Paddle ”GameObject位于图层名为“ PaddleLayer ”。
位置那些24个对手从左到右 顺序靠近球拍,但是确定它们不 触摸桨或桨的对撞机。下面的图片可以帮助您了解我正在采取的措施。
编写代码应该是件小事。
bool firstColision = false;
检查球碰撞与划水与OnCollisionEnter
。
firstColision = true;
立即 检查球与OnTriggerEnter
功能接触的24- 对手中的哪一个。
在OnTriggerEnter
函数内部,确保{strong>检查之前firstColision
为真 <{1}}正在接触球< / strong>即可。
名为“探测器1”的第一个箱式对撞机位于最左侧,而名为“探测器24”的最后一个箱式对撞机位于填充器的最右侧。您可以使用if if语句或switch语句来检测触发球碰撞的哪个框。 24/2 = 12所以名为“ detector24 ”的盒式对撞机应位于中间,应该被视为中间桨的强度>。
(行动)在检测到球从24 box colliders
击中的箱号后,现在您可以随心所欲。例如,让球变为左或右。你可能有常数值指示 移动每个方框对手 检测到的 / strong>即可。随你(由你决定。你现在就从这里制定自己的规则。
将 OnTriggerEnter
设置为firstColision
至重置。
注意:它不一定是 24个盒子对撞机。它可以 15 ,但你拥有的越多越好。
如果一切按预期工作,您可以做最后一部分,即进入编辑 - &gt; 项目设置 - &gt; 物理并确保以下情况属实:
一个。 detectorLayer 无法与 detectorLayer 发生冲突。
B中。 PaddleLayer 无法与 detectorLayer 发生冲突。
这将提高移动设备的性能。