【问题标题】:Rigidbody AddForce doesnt work in Photon Unity刚体 AddForce 在 Photon Unity 中不起作用
【发布时间】:2021-03-13 11:29:30
【问题描述】:

当它尝试向我的玩家添加力时,它会移动然后被传送回来。我需要使用 RPC 吗?

新代码:

void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("Weapon"))
    {

        rb.AddForce(Vector3.back * knockbackStrength, ForceMode.Impulse);


    }
}

【问题讨论】:

  • 谁在为什么添加力量?您只能移动您拥有的本地播放器(然后同步到其他播放器).. 您是否有可能试图移动不属于您的播放器,因此当它被对象所有者否决时是否再次同步?
  • 一种武器正在为玩家增加力量,我想我需要一个 RPC,但我该怎么做呢?
  • 我的问题是什么意思:物理是在本地播放器上本地应用的……还是在该播放器所属的设备上发生?或者这个触发器是否发生在该播放器不属于的设备上 -> 无权覆盖位置 -> 从播放器的所有者那里获得同步位置
  • 本地应用中。

标签: unity3d photon


【解决方案1】:

我个人会这样写:

public Rigidbody rb;
public float knockbackStrength;

void OnTriggerEnter(Collider collision)
{
    if (collision.collider.tag == "Player")
    {

        rb.AddForce(collision.position, ForceMode.Impulse);


    }
}

由于我没有看到你的其余代码,我已经添加了变量,请你澄清一下rb.AddForce() 函数中的50 参数试图实现什么?我把它们拿出来是因为我从来没有把它们放进去。但这一切都取决于预期的结果。无论如何尝试这种方式,它可能会起作用。

【讨论】:

  • 所以我做了一些修复,玩家现在移动了,但这非常有问题,因为他移动后会被传送到原来的位置。新代码在问题中编辑:忘了说谢谢
  • 没问题 - 这很奇怪,你的 Unity 是什么版本?编辑:我不确定为什么这不起作用,但也许你可以在检测到碰撞后尝试在rb.AddForce 之后使用Debug.Log()
  • 我使用的是 2019.4.8f1。碰撞检测工作正常。我认为同步存在问题,但我找不到确切的问题。
  • @Irainey6-eng 所以你个人会引入更差的性能和更容易出错的== 检查,而不是使用 OP 已经拥有的更好的 CompareTag,并且还会引入编译器错误,因为 AddForce 没有t 将 float, Vector3, ForceMode 作为参数,而仅将 Vector3, ForceMode 作为参数传递,并且无论如何传递一个位置是没有意义的......你的意思是 AddForceAtPosition
  • AddExplosionForce 就像 OP 一样,它也完全没问题 .. 也许你应该自己查看 API 以了解哪个参数代表什么 .... 5 最初是 @ 987654338@ 和 0 upwardsModifier ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多