被其他球击中时给球加力
Add force to ball when hit by other ball
我正在创建一个台球游戏,我现在的问题是当球被其他球击中时给它增加一个力。我可以调整其他球的质量吗?
有很多方法可以做到这一点,您可以在 Unity 文档中搜索刚体方法。
其中之一,我使用的是 AddForce() 方法,因为它很容易。查看官方文档以获取更多信息:https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
我建议你计算两个球在撞击瞬间的方向减去位置。
关于质量,是的,你可以改变其他球的质量,但我建议你多研究一下Unity的物理系统以实现你的目标,也许你的问题不在球质量。
Unity 有更好的方法来做到这一点。但我假设你想找到物理学的基础知识。这解释了从击球中减去击球位置得到的功率角。我们将其标准化为单位,您可以静态或动态定义力的大小。
public float force = 10f;
private void OnCollisionEnter(Collision collision)
{
if (!collision.transform.CompareTag("Ball")) return;
var direction = (transform.position - collision.transform.position).normalized;
collision.transform.GetComponent<Rigidbody>().AddForce(direction*force);
}
要使力动态化,只需乘以第一个球的速度即可。 rigidbody.velocity.magnitude 这样做,但如果使用刚体,则上述步骤会自动且非常准确地执行。
我正在创建一个台球游戏,我现在的问题是当球被其他球击中时给它增加一个力。我可以调整其他球的质量吗?
有很多方法可以做到这一点,您可以在 Unity 文档中搜索刚体方法。
其中之一,我使用的是 AddForce() 方法,因为它很容易。查看官方文档以获取更多信息:https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
我建议你计算两个球在撞击瞬间的方向减去位置。
关于质量,是的,你可以改变其他球的质量,但我建议你多研究一下Unity的物理系统以实现你的目标,也许你的问题不在球质量。
Unity 有更好的方法来做到这一点。但我假设你想找到物理学的基础知识。这解释了从击球中减去击球位置得到的功率角。我们将其标准化为单位,您可以静态或动态定义力的大小。
public float force = 10f;
private void OnCollisionEnter(Collision collision)
{
if (!collision.transform.CompareTag("Ball")) return;
var direction = (transform.position - collision.transform.position).normalized;
collision.transform.GetComponent<Rigidbody>().AddForce(direction*force);
}
要使力动态化,只需乘以第一个球的速度即可。 rigidbody.velocity.magnitude 这样做,但如果使用刚体,则上述步骤会自动且非常准确地执行。