使用Photon后Input.mousePosition失效,枪械指向鼠标功能异常求助
我原本用以下代码实现枪械朝向鼠标的功能,未接入Photon前正常运行,但接入后功能失效,求技术帮助。
代码如下:
private void FixedUpdate() { if (view.IsMine) { mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); if (Input.GetButton("Fire1") && Time.time > nextTimeToFire) { GameObject bullet1 = Instantiate(bullet, firepoint.position, firepoint.rotation); Rigidbody2D rb2 = bullet1.GetComponent<Rigidbody2D>(); rb2.AddForce(firepoint.right * 50f, ForceMode2D.Impulse); ScreenManager.Instance.ScreenShake(10f, 0.1f); Destroy(bullet1, 20f); nextTimeToFire = Time.time + 1f/fireRate; } Vector2 lookDir = mousePos - rb1.position; float angle = Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg; transform.localEulerAngles = new Vector3(transform.rotation.x, transform.rotation.y, angle); } }
可能的问题及解决步骤:
检查PhotonTransformView的旋转同步设置
如果你的枪械或父玩家物体挂载了PhotonTransformView组件,查看是否开启了旋转同步。Photon会自动同步服务器端的旋转数据,这会直接覆盖你本地设置的旋转值。可以暂时关闭旋转同步测试,若恢复正常,说明是同步逻辑冲突。如果需要同步旋转,确保本地修改的旋转能被正确同步到服务器(比如通过RPC或确保本地玩家拥有物体控制权)。修正旋转设置的代码错误
你当前设置transform.localEulerAngles时,错误地使用了transform.rotation.x和transform.rotation.y(这两个是四元数分量,不是欧拉角)。2D游戏中只需要设置Z轴旋转,应该改成:transform.localEulerAngles = new Vector3(0, 0, angle);这个错误在未接入Photon时可能因本地渲染优先级高没暴露,但Photon同步后会导致旋转计算异常。
确保主相机获取正确
在多玩家场景中,Camera.main可能因相机标签或场景中存在多个相机而获取失败。建议直接在Inspector中引用主相机,或者用FindObjectOfType<Camera>()替代Camera.main,避免依赖标签查找。子弹生成的同步问题(额外提示)
你当前用Instantiate生成子弹,其他客户端无法看到子弹。需要改用Photon的网络生成方法:GameObject bullet1 = PhotonNetwork.Instantiate(bullet.name, firepoint.position, firepoint.rotation);同时给子弹预制体添加
PhotonView组件,销毁时用PhotonNetwork.Destroy(bullet1)替代Destroy,确保多客户端同步。
内容的提问来源于stack exchange,提问作者Lam Dang

