unity同步基础S/C
安装上述插件
新建空组件添加NetworkManager,设定希望生成物体的预设体
仅需为一个player绑定唯一id,其下所有组件共享一个id
为其添加NetworkRigidbody和Transform(传递需要同步的属性)组件
同时开启多个窗口,会出现多个角色,但是所有角色会共同移动
因为包含共同组建,所有组件的数值相同,所以,在A中需要禁用所有B中的组件
故,仅保存本地玩家摄像机,输入与监听,网络玩家的全部禁用
注:此时不能因为player并非场景中组件,故camera只能利用标签获取
using System.Collections;
using System.Collections.Generic;
using Unity.Netcode;
using UnityEngine;
public class PlayerSetup : NetworkBehaviour
{
[SerializeField]
private Behaviour[] componentsToDisable;
private Camera sceneCamera;
// Start is called before the first frame update
void Start()
{
//非本地玩家组件禁用
if(!IsLocalPlayer)
{
for (int i = 0; i < componentsToDisable.Length; i++)
{
//禁用组件
componentsToDisable[i].enabled = false;
}
}else
{
//获取maincamera
sceneCamera= Camera.main;
if (sceneCamera != null)
{
sceneCamera.gameObject.SetActive(false);
}
}
}
// Update is called once per frame
private void OnDisable()
{
if(sceneCamera!= null)
{
sceneCamera.gameObject.SetActive(true);
}
}
}
unity默认禁用Client的操作,重写client方法
using System.Collections;
using System.Collections.Generic;
using Unity.Netcode.Components;
using UnityEngine;
namespace Unity.Multiplayer.Samples.Utilities.ClientAuthority
{
[DisallowMultipleComponent]
public class ClientNetworkTransform:NetworkTransform
{
//重载是否只能在服务器端授权的函数:false
protected override bool OnIsServerAuthoritative()
{
return false;
}
}
}
删除player中的NetworkTransform与Rigidbody,camera中的NetworkTransform
文章来源:https://www.toymoban.com/news/detail-495484.html
camera与player添加ClientNetworkTransform(rigidbody)文章来源地址https://www.toymoban.com/news/detail-495484.html
到了这里,关于unity多人同步联机——玩家位置(Netcode for GameObjects)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!