【发布时间】:2016-09-23 03:31:22
【问题描述】:
我正在做台球游戏,我有两个问题:
当两个球相互碰撞时,我如何找到它们的速度以及如何将其应用于两个球?
我已经知道它们要移动的角度,我只需要找到它们在这些方向上移动的速度。
我从来不擅长物理/物理编程,所以如果能提供任何帮助,我将不胜感激!顺便说一句,我的游戏是 3D 的。
感谢您的宝贵时间!
编辑:我要做的是使移动方向与我使用此脚本计算的方向相匹配:
if (Physics.Raycast(ray, out hit, Mathf.Infinity, lmm))
{
location = new Vector3(hit.point.x, 1.64516f, hit.point.z);
}
if (Physics.SphereCast(transform.position, 0.77f, location - transform.position, out hitz, Mathf.Infinity, lmm2))
{
if (hitz.collider.tag == "Ball")
{
Vector3 start = hitz.point;
end = start + (-hitz.normal * 4);
lineRenderer2.SetPosition(1, end);
}
}
【问题讨论】:
-
您是否正在考虑 3d 中的摩擦、非弹性碰撞、角动量和角速度?我认为您真的应该研究运动学,我想您会喜欢的。如果你想走简单的路,就用这个en.wikipedia.org/wiki/Elastic_collision
-
嗨,你有什么理由要通过代码控制物理而不是依赖于 Unity 原生物理?这将帮助我理解上下文:基本上你是在使用设置为运动学的刚体吗?
-
我之所以使用它们,是因为在这种工作方面,Unity 确实存在问题,至少对我而言。到目前为止,我一直在使用原生 Unity 物理,但我决定进行更改以避免错误,但这不是唯一的原因。我希望游戏是基于多人的,所以我想仅在球相互碰撞时使用 RPC 调用(更新运动),而不是每帧都更新它。
-
另外,我尝试发送单个 rpc 调用来更新母球方向和功率,但结果在其他客户端中不一样(这非常奇怪)。
-
你应该只在服务器上计算物理,并用刚刚插值的位置更新客户端,这样结果总是一样的。
标签: c# unity3d physics collision velocity