Unity3d台球/桌球瞄准问题

6

我正在尝试计算打击台球的角度,并预测球会飞到哪里。 我原以为目标球应该沿着正常方向移动,但它却朝完全不同的方向移动。

RaycastHit2D hit = Physics2D.CircleCast(cue.position, _radius, dir, 100f, ~(ignoreLayer));
if (hit.collider != null)
{
    Debug.DrawRay(hit.collider.transform.position, -1f * hit.normal, 
    Color.green, Time.fixedDeltaTime);
}

以下是结果:

输入图像描述

设置速度

rb.velocity = dir * force;

结果:

图片描述

如何找到确切的移动方向,谢谢

编辑:

我尝试过双半径投射,但这只能解决一半问题.. 只有当射线在内圆内时才有效。


将速度设置为 hit.normal * force? - Fredrik Widerberg
我们可以将其设置为目标球的OnCollisionEnter2D,手动更改目标球速度..但这有点作弊..)我认为(希望)有更直观的方法来实现这一点..谢谢@FredrikWiderberg - wrRios
它取决于许多属性,包括:i)球的质量(比率),ii)球之间的恢复系数(1 = 弹性碰撞),iii)球之间的摩擦力(导致角动量转移),以及iv)是否考虑旋转(作为iii)的直接结果)。 - meowgoesthedog
你有将球体的物理材质设置为零摩擦和零弹性吗? - Lincoln Cheng
这是一个旧的测试项目,我认为它在这里运行得很好:https://github.com/unitycoder/Snooker2D - mgear
显示剩余5条评论
1个回答

0

我想这只是物理引擎的限制,它被优化用于速度和游戏中的使用,并不那么精确。

在一个简单的2D场景中尝试了一下,我发现如果将摩擦设置为0.01,反弹到1.0,它的表现就和我期望的一样。(在Unity 2020.1)

在我添加的小样例场景中,有一个球瞄准另一个球,以便产生45度的角度。将物理材料设置为摩擦0.01和反弹1.0后,得到的角度如预期所示。

使用默认材质时,我得到了你描述的相同行为。

你是否忘记分配物理材料?

你是否单步到接触点并检查瞄准是否正确?

我的样例项目尝试此操作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接