首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单位切换武器不同步双关2

单位切换武器不同步双关2
EN

Stack Overflow用户
提问于 2022-02-20 13:08:48
回答 1查看 153关注 0票数 0

我设法使我的拍摄同步,但我不知道如何同步武器切换(使用同样的方法,rpc),问题是,每当我切换武器,它不会显示在我的第二个屏幕。

代码语言:javascript
运行
复制
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++;
        }
    }
}

(使用手镯的武器切换教程)我对我的拍摄脚本做了完全相同的工作,在我的游戏对象上有一个光子视图组件,我把这个脚本附在上面。

EN

回答 1

Stack Overflow用户

发布于 2022-02-20 13:17:37

在RPC中,您可能不想检查

代码语言:javascript
运行
复制
if(!view.IsMine){ return; }

那么把这个作为RPC发送给每个人的目的是什么呢?您可以只在设备上调用它;)您希望在所有其他客户端上也这样做。

您将希望重构您的方法,并且只在设备上直接执行SwitchWeapon,而不使用RPC,然后通过RPC将SelectWeapon(int)传递给每个人并传递新的索引。

代码语言:javascript
运行
复制
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中也是如此

代码语言:javascript
运行
复制
view.RPC(nameof(SelectWeapon), RpcTarget.AllBuffered, selectedWeapon);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71194720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档