前言
使用unity中的Network组件开发一个简单的多人在线游戏
unity版本:2018.4.16
一、创建玩家预制体
1.创建地面
2.在Hierarchy面板创建cube作为玩家,加入刚体组件Rigidbody。
3.diver脚本控制玩家上下左右前进,挂载到player上。
//drive脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class drive : MonoBehaviour
{
public float rotateSpeed = 150;
public float moveSpeed = 6;
private void Update()
{
//if (isLocalPlayer == false) return;
var x = Input.GetAxis("Horizontal") * Time.deltaTime * rotateSpeed;
var z = Input.GetAxis("Vertical") * Time.deltaTime * moveSpeed;
transform.Rotate(0, x, 0);
transform.Translate(0, 0, z);
}
}
4.在玩家上方增添文字,挂载脚本解决移动后文字不动的问题,使文字永远朝向摄像机。
//文字脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FaceCamera : MonoBehaviour
{
void Update()
{
this.transform.LookAt(Camera.main.transform.position);
this.transform.Rotate(new Vector3(0, 180, 0));//面向相机沿y轴翻转180度
}
}
5.将Hierarchy面板中的player组件拖拽到assets文件夹内,作为预制件。
6.将Hierarchy面板中的player删除即可。
二、使用Network组件
1.点击assets中的玩家预制件,添加Network Identity组件和Network Transform组件。在Network Identity中勾选LocalPlayerAuthorit,在Network Transform->Transform Sync Mod选择Sync Transform。
2.然后在Hierarchy面板新建一个空物体命名为Network,存放Network控制组件,添加Network Manager组件和Network Manager HUD组件作为控制面板。运行即可看到网络控制面板。
3.点击Hierarchy面板中Network空物体,将玩家预制体拖拽到Network Manager->Spawn Info->Player Prefab中。
4.点击LAN运行即可看到自动生成玩家。
5.点击上方File->Build Settings->Build And Run创建一个新窗口。
6.运行本地unity选择LAN作为主机,新开窗口点击LAN Client作为客户端加入,可以看到场景内生成两个玩家预制体,但是在一端操作,另一端也会进行同样的操作。
7.可以看到控制玩家操作的是drive脚本,我们需要判断当前所控制的是在那个主机,剩下的所有玩家的drive脚本关闭,只保留当前控制玩家的drive脚本。
8.点击玩家预制体,关闭drive脚本。
9.新建SetupLocalPlayer脚本进行判断,将其挂载到player玩家预制体上。
//SetupLocalPlayer
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class SetupLocalPlayer : NetworkBehaviour
{
// Start is called before the first frame update
void Start()
{
if (isLocalPlayer)//如果是本地玩家
{
GetComponent<drive>().enabled = true;
}
}
}