Unity之Network场景中物体同步(显示/隐藏)_netcode移动不了物体-程序员宅基地

技术标签: unity  游戏引擎  Network  

用的unity5.4中的network的功能进行场景中的物体同步。

虽然2022年了但是公司有些项目依然在用5.4的版本。不得不说关于低版本可以查阅的资料太少了。摸索了一下,最终实现了一些功能。截取了一个场景中物体同步的功能记录一下。下面开搞:

首先

新建一个场景。场景中很简单,一个cube和一个sphere 而且sphere是cube的子物体,和一个Cylinder。Cylinder作为游戏主角。cube和sphere是场景中的物体。

如下图:

目标:让sphere通过按键盘的A--D键来显示和隐藏,同步到所有客户端。

要想多个场景同步必然是有服务器和客户端。

本篇不讲服务器,直接用系统自带的。默认就好不用设置。

将networkmanager的两个脚本给到plane上。如下图:

-----

我们要通过角色来判断是不是本地客户端。因此我们要控制场景中物体同步的脚本加给主角。如图:

 具体脚本的代码如下:

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class testsceneobj : NetworkBehaviour
{

    // Use this for initialization
    void Start()
    {
       

        if (isLocalPlayer)
        {
            Debug.Log("我是本地物体");

        }

    }

    // Update is called once per frame
    void Update()
    {

        if (!isLocalPlayer)
        {
            return;
        }



        if (Input.GetKeyDown(KeyCode.A))
        {
           
            CmdIsNotActive();//隐藏物体

           
        }

        if (Input.GetKeyDown(KeyCode.D))
        {
            CmdIsActive();//显示物体

        }

    }

    [Command]//服务器执行
    void CmdIsNotActive()//方法必须是Cmd开头
    {
       
        RpcPlay();
    }

    [ClientRpc] //由服务器端调用,在客户端执行

    void RpcPlay()//方法必须是Rpc开头

    {

        GameObject.Find("Cube").transform.FindChild("Sphere").gameObject.SetActive(false);


    }
    //-----------------
    [Command]//服务器执行
    public void CmdIsActive()
    {
        
        RpcPlay1();
    }

    [ClientRpc] //由服务器端调用,在客户端执行

    void RpcPlay1()

    {
        GameObject.Find("Cube").transform.FindChild("Sphere").gameObject.SetActive(true);
    }
}

这样就实现了场景中物体的同步显示和隐藏。

解释一下代码:

[Command]这个方法是某个客户端要告诉服务器应该执行内容的。

 [ClientRpc] 是由服务器告诉所有客户端应该做什么的。

例如上面代码中  客户端告诉服务器应该执行方法RpcPlay();,然后服务器就执行了,并且是通知了所有客户端执行了这个方法。

简单理解就是有一群小弟(一群客户端),小弟们之间互相看不到,还有一个老大(服务器)。某个小弟告诉老大说打局游戏吧,老大通知所有小弟打游戏。最终我们看到的就是所有小弟都在打游戏。

最终效果如图:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/alayeshi/article/details/122604137

智能推荐

Arcgis 坐标系统的识别与处理_shp数据没有坐标怎么处理-程序员宅基地

文章浏览阅读3w次,点赞32次,收藏141次。 Arcgis中坐标系统及单位必须知道的知识(敲黑板!)1. 如果数据不存在坐标系统,则计算时无单位,许多操作都不能进行。2.投影坐标系统是平面坐标系统,单位是米、千米这些;而地理坐标系统是球面坐标系统,单位是度。 定义投影是定义坐标系统的意思,而不是单指定义投影坐标系统。3.图层的地图单位和显示单位,地图单位是你这个图层的使用的实际单位,一般默认你添加进来的第一个数据的坐标系..._shp数据没有坐标怎么处理

QString的相关类型转换_qstring zhuan cstr-程序员宅基地

文章浏览阅读608次。QString 和std::string互转:std::string cstr;QString qstring;//****从std::string 到QStringqstring = QString(QString::fromLocal8Bit(cstr.c_str()));//****从QString 到 std::stringcstr =_qstring zhuan cstr

递归求斐波拉数列函数-程序员宅基地

文章浏览阅读181次。int fab(int n) { return (n > 1) ? (fab(n-1) + fab(n-2)) : 1;}_斐波拉数列 函数

MAC IDEA自动生成变量的方法_mac idea自动创建变量名-程序员宅基地

文章浏览阅读1.2w次,点赞8次,收藏5次。option+commamd+v 生成方法内变量option+commamd+f 生成类的静态变量_mac idea自动创建变量名

高级语言程序设计-实验9 函数的应用(1)_下面程序实现由键盘读入整数 计算并输出-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏2次。一、堂上限时训练1、 编写函数计算阶乘下面程序实现由键盘读入整数n,计算并输出n!,请补充完整计算阶乘的函数。include "stdio.h" __________ main() { int n; scanf("%d", &n); printf("%ld", fanc(n)); } 输入样例3输出样例6..._下面程序实现由键盘读入整数 计算并输出

Quartz:ERROR threw an unhandled Exception-程序员宅基地

文章浏览阅读5.7k次。详细的错误信息如下: 1 2016-06-28 17:18:13.366 [DefaultQuartzScheduler_Worker-1] ERROR org.quartz.core.JobRunShell:211 - Job group1.job1 threw an unhandled Exception: 2 java.lang.NullPointerException 3..._threw an unhandled exception

随便推点

第十八章 AT32F403A基于V2库 定时器输出移相pwm_tmr_base_init-程序员宅基地

文章浏览阅读1k次。国产MCU 雅特力 AT32F403A 基于V2的 pwm移相输出_tmr_base_init

pytorch的Tensor变量之间的转换_torch.floattensorz转tensor-程序员宅基地

文章浏览阅读1.9w次。系统默认是torch.FloatTensor类型data = torch.Tensor(2,3)是一个2*3的张量,类型为FloatTensordata.cuda()就转换为GPU的张量类型,torch.cuda.FloatTensor类型(1)CPU或GPU之间的张量转换在Tensor后加long(), int(), double(),float(),byte()等函数就能将Tensor..._torch.floattensorz转tensor

mybatis学习+面试+springboot_springboot、mybatisplus 面试-程序员宅基地

文章浏览阅读187次。目录1MyBatis介绍2 传统jdbc编程步骤3Mybatis架构4Mybatis环境4.1 查询语句5小结5.1#{}和${}(面试重点)5.2parameterType和resultType5.3selectOne和selectList5.4mysql自增主键返回5.5Mybatis解决jdbc编程的问题5.6mybatis与hibernate不同6Mapper动态代理方式6.1开发规范1MyBatis介绍..._springboot、mybatisplus 面试

推荐用于BMS锂电池管理系统的低功耗蓝牙芯片MS1656_锂电池蓝牙小程序-程序员宅基地

文章浏览阅读1.1k次。智能手机的普及使用越来越多的产品开始考虑增加蓝牙功能,从何实现和智能手机的交互。目前主流的BMS管理系统,使用的是单模蓝牙芯片。现在推荐一款上海巨微MS1656 BMS蓝牙芯片。MS1656是一款单模超低功耗蓝牙芯片,射频采用2.4GHzISM频段的频率,2MHz信道间隔,符合蓝牙规范。使用高性能的ARMCortex-M0+为内核的32位微控制器,最高工作频率可达24MHz,内置高速Flash存储器,丰富的增强型I/O端口和外设连接到外部总线。工作电压为2.4V3.6V,工作温度范围包含-40℃+85_锂电池蓝牙小程序

Unity 拓展功能之 Hierarchy面板右侧小图标功能_unity object小图标含义-程序员宅基地

文章浏览阅读2.5k次。实现的功能如下图可以在对象的右侧画一个小图标,代码如下,放到Editor目录下,代码注释较多,就不详细介绍了using System;using System.Collections.Generic;using UnityEditor;using UnityEngine;[InitializeOnLoad]public class DrawHierarchyLockIcon{..._unity object小图标含义

保护模式下 8259A芯片编程及中断处理探究(上)【1】_8259a芯片中断类型号的分配-程序员宅基地

文章浏览阅读818次。保护模式下8259A芯片编程及中断处理探究(上)Version 0.02哈尔滨工业大学 并行计算实验室 谢煜波[1]简介中断处理是操作系统必须完成的任务,在IBM PC中,常用一块中断控制芯片(PIC)——8259A来辅助CPU完成中断管理。在实模式下,中断控制芯片(PIC)8259A的初始化是由BIOS自动完成的,然而在保护模式下却需要我们自行编程初始化。_8259a芯片中断类型号的分配