赞
踩
NGO是unity新推出的联机解决方案,我会在接下来几章介绍如何配置NGO,以及使用NGO联机的代码知识
在package manager中搜索netcode
创建空的游戏物体,命名NetworkManager
添加networkmanager组件,在三角形警告下方选择transport,只有一个,选就是了
创建一个游戏角色预制体,为它添加跟随相机(这个不多介绍)
添加Network object组件
添加move组件(建议复制)
- using System.Collections;
- using System.Collections.Generic;
- using Unity.Netcode;
- using UnityEngine;
-
- public class Mover : NetworkBehaviour
- {
- public float speed = .1f;
- private void Update() {
- if (!IsOwner) return;
- Vector3 moveVector = Vector3.zero;
- if (Input.GetKey(KeyCode.W)) {
- moveVector.z += 1;
- }
- if (Input.GetKey(KeyCode.S)) {
- moveVector.z -= 1;
- }
- if (Input.GetKey(KeyCode.A)) {
- moveVector.x -= 1;
- }
- if (Input.GetKey(KeyCode.D)) {
- moveVector.x += 1;
- }
- transform.position += moveVector*speed;
- }
- }
将预制体拖入networkmanager的player prefeb字段
点开NetworkPrefebs List
需要在网络上同步的物体,全都要在这里注册,你也可以新建一个NetworkPrefebs List
将player 注册进去
删除场景中的Player,网络对象如果一开始就存在于场景中,那么它就不是动态生成的,这貌似是句废话,体现在unity中是这样的:运行unity,打开inspector debug模式,可以看到is Spawned字段为false,这个字段用来引用网络对象,它没有生成,不能被在Rpc中引用,我们接下来会看到。
在画布上加2个按钮,添加控制脚本
- using System.Collections;
- using System.Collections.Generic;
- using Unity.Netcode;
- using UnityEngine;
- using UnityEngine.UI;
-
- public class StartMenu : MonoBehaviour {
- [SerializeField] public Button StartHost;
- [SerializeField] public Button StartClient;
- private void Awake() {
- StartHost.onClick.AddListener(() => {
- NetworkManager.Singleton.StartHost();
- gameObject.SetActive(false);
- });
- StartClient.onClick.AddListener(() => {
- NetworkManager.Singleton.StartClient();
- gameObject.SetActive(false);
- });
- }
- }
点击file->build setting->Player setting
返回buildsetting点击build,新建一个build文件夹,复制路径,选择该文件夹进行build,
黏贴路径,打开Build文件夹,运行exe文件并且运行unity
可以看到他们成功联机了,但是运动没有同步,所有同步操作需要的代码知识在另外一章
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。