我设法使我的拍摄同步,但我不知道如何同步武器切换(使用同样的方法,rpc),问题是,每当我切换武器,它不会显示在我的第二个屏幕。
public class WeaponHolder : MonoBehaviour
{
PhotonView view;
public int selectedWeapon = 0;
void Start()
{
view = GetComponent<PhotonView>();
if(!view.IsMine)
{
return;
}
SelectWeapon();
}
void Update()
{
if(!view.IsMine)
{
return;
}
if(FindObjectsOfType<weaponScript>()[0].isReloading == true)
{
return;
}
else
{
view.RPC("switchWeapon", RpcTarget.All);
}
}
[PunRPC]
public void switchWeapon()
{
if(!view.IsMine)
{
return;
}
int previousSelectedWeapon = selectedWeapon;
if(Input.GetAxis("Mouse ScrollWheel") > 0f)
{
if(selectedWeapon >= transform.childCount - 1)
{
selectedWeapon = 0;
}
else
{
selectedWeapon++;
}
}
if(Input.GetAxis("Mouse ScrollWheel") < 0f)
{
if(selectedWeapon <= 0)
{
selectedWeapon = transform.childCount - 1;
}
else
{
selectedWeapon--;
}
}
if(previousSelectedWeapon != selectedWeapon)
{
SelectWeapon();
}
}
public void SelectWeapon()
{
int i = 0;
foreach (Transform weapon in transform)
{
if(i == selectedWeapon)
{
weapon.gameObject.SetActive(true);
}
else
{
weapon.gameObject.SetActive(false);
}
i++;
}
}
}
(使用手镯的武器切换教程)我对我的拍摄脚本做了完全相同的工作,在我的游戏对象上有一个光子视图组件,我把这个脚本附在上面。
发布于 2022-02-20 13:17:37
在RPC中,您可能不想检查
if(!view.IsMine){ return; }
那么把这个作为RPC发送给每个人的目的是什么呢?您可以只在设备上调用它;)您希望在所有其他客户端上也这样做。
您将希望重构您的方法,并且只在设备上直接执行SwitchWeapon
,而不使用RPC,然后通过RPC将SelectWeapon(int)
传递给每个人并传递新的索引。
void Update()
{
if(!view.IsMine)
{
return;
}
if(FindObjectsOfType<weaponScript>()[0].isReloading)
{
return;
}
switchWeapon();
}
private void switchWeapon()
{
if(!view.IsMine)
{
return;
}
var scroll = Input.GetAxis("Mouse ScrollWheel");
if(scroll > 0f)
{
selectedWeapon = (selectedWeapon + 1) % transform.childCount;
view.RPC(nameof(SelectWeapon), RpcTarget.All, selectedWeapon);
}
else if(scroll < 0f)
{
selectedWeapon--;
if(selectedWeapon < 0)
{
selectedWeapon = transform.childCount - 1;
}
view.RPC(nameof(SelectWeapon), RpcTarget.All, selectedWeapon);
}
}
[PunRPC]
public void SelectWeapon(int newWeapon)
{
int i = 0;
foreach(Transform weapon in transform)
{
weapon.gameObject.SetActive(i == newWeapon);
}
i++;
}
在Start
中也是如此
view.RPC(nameof(SelectWeapon), RpcTarget.AllBuffered, selectedWeapon);
https://stackoverflow.com/questions/71194720
复制相似问题