1.创建文件夹:

2.创建一个空物体,添加如下组件:

  Network Manager(网络管理组件):

  Network Manager HUD(提供一个UI):

3.创建如下模型,并设置为预制体:

  给预制体添加组件:NetWork Identity

4.把预制体提供给网络组件:

  将预制体拖拽至:Network Manager - Spawn Info - Player Prefab

5.让玩家移动:

  以下脚本编辑好后拖拽至预制体上

using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class PlayerController : MonoBehaviour
{
// 水平旋转
private float x;
// 垂直移动
private float z; void Start ()
{ } void Update ()
{
x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f;
z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; // 旋转
transform.Rotate (, x, );
transform.Translate (, , z);
}
}

6.运行发现问题:客户端与服务器同时移动,移动不同步

7.修改脚本 PlayerController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking; public class PlayerController : NetworkBehaviour
{
// 水平旋转
private float x;
// 垂直移动
private float z; void Start ()
{ } void Update ()
{
// 如果不是本地玩家,就跳出该方法
// 加入游戏后 network manager 会标记本地玩家
if (!isLocalPlayer) {
return;
}
x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f;
z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; // 旋转
transform.Rotate (, x, );
transform.Translate (, , z);
}
}

添加组件:

  Network Transform:

9.使本地角色看起来更特殊:

修改脚本 PlayerController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking; public class PlayerController : NetworkBehaviour
{
// 水平旋转
private float x;
// 垂直移动
private float z; void Start ()
{ } void Update ()
{
// 如果不是本地玩家,就跳出该方法
// 加入游戏后 network manager 会标记本地玩家
if (!isLocalPlayer) {
return;
}
x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f;
z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; // 旋转
transform.Rotate (, x, );
transform.Translate (, , z);
} public override void OnStartLocalPlayer ()
{
// 调用父类中该虚方法
base.OnStartLocalPlayer ();
GetComponent<MeshRenderer> ().material.color = Color.blue;
}
}

10.制作子弹:

  制作子弹预制体

  修改Player预制体:添加 炮管、子弹发射位置、给脚本中的公共变量赋值。

  更新脚本 PlayerController

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking; public class PlayerController : NetworkBehaviour
{
// 水平旋转
private float x;
// 垂直移动
private float z; // 子弹
public GameObject bulletPrefab;
// 子弹生成位置
public Transform bullerSpawn; void Start ()
{ } void Update ()
{
// 如果不是本地玩家,就跳出该方法
// 加入游戏后 network manager 会标记本地玩家
if (!isLocalPlayer) {
return;
}
x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f;
z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; // 旋转
transform.Rotate (, x, );
transform.Translate (, , z); // 发射子弹
if (Input.GetKeyDown (KeyCode.Space)) {
Fire ();
}
} public override void OnStartLocalPlayer ()
{
// 调用父类中该虚方法
base.OnStartLocalPlayer ();
GetComponent<MeshRenderer> ().material.color = Color.blue;
} private void Fire ()
{
print ("发射子弹");
// 生成子弹
GameObject bullet = Instantiate<GameObject> (bulletPrefab, bullerSpawn.position, bullerSpawn.rotation);
// 子弹飞行
bullet.gameObject.GetComponent<Rigidbody> ().velocity = bullet.transform.forward * 6.0f; Destroy (bullet, 5.0f);
}
}

11.给子弹 Bullet 预制体添加组件:Network Manager

让服务产生子弹的方法:

  ①.将子弹预制体拖拽到Network Manager - Registered Spawnable Prefabs

  ②.在脚本中生成子弹的方法前面加上 特性[Command]

12.制作血条

13.解决血条同步问题

14.玩家死亡后回到出生点

  此部分不用判断是否是本地玩家

15.创建敌人,产生敌人,

16.敌血量消失后敌人这个游戏物体消失

17.设置两个出生点,并在玩家死亡后随机选一个出生点复活。

请参考视频:

链接:https://pan.baidu.com/s/11fwz59saubkPdKpiUWUgew 密码:3pfc

UNet简单案例讲解的更多相关文章

  1. SpringBoot基础学习(一) SpringBoot概念、简单案例实现、单元测试及热部署讲解

    SpringBoot概念 Spring优缺点分析 Spring优点 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品,无需开发重量级的 ...

  2. 【推荐】使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享   在开始讲解之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的U ...

  3. php中foreach()函数与Array数组经典案例讲解

    //php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...

  4. 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)

    卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│  1.txt│  c语言经典案例效果图示.doc│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...

  5. 使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享

    使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享 使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享    在开始讲解之前,我们先来看一下什 ...

  6. Shiro 核心功能案例讲解 基于SpringBoot 有源码

    Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...

  7. 自动化运维工具-pssh工具安装配置及简单使用讲解

    1.先决条件:安装pssh工具要求python版本大于2.4即可. 安装pssh工具的主机针对远程主机需要配置免秘钥认证: ssh-keygen -t rsa ssh-copy-id [remoteh ...

  8. 有关memcached企业面试案例讲解

    有关memcached企业面试案例讲解 1.Memcached是什么,有什么作用?    a. memcached是一个开源的.高性能的内存的缓存软件,从名称上看Mem就是内存的意思,而Cache就是 ...

  9. (转)使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享

    原文地址:http://www.cnblogs.com/huyong/archive/2013/09/24/3334848.html 使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工 ...

随机推荐

  1. javascript:理解try...catch...finally

    以前,我一直喜欢用console.log(do some thing)去执行输出的类型和值,想马上看到弹出的信息,就会直接在浏览器alert()一下,这些是基础知识. 稍微复杂一点点,就要用到判断语句 ...

  2. JSP开发过程遇到的中文乱码问题及解决方案

    对于程序猿来说,乱码问题真的很头疼,下面列举几种常见的乱码. 1.数据库编码不一致导致乱码 解决方法: 首先查看数据库编码,输入: show variables like "%char%&q ...

  3. Shuffle Cards

    C: Shuffle Cards 时间限制: 1 Sec  内存限制: 128 MB提交: 3  解决: 3[提交] [状态] [讨论版] [命题人:admin] 题目描述 Eddy likes to ...

  4. javaweb基础(33)_jdbc的crud操作

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

  5. 操作表单 -------JavaScrip

    本文摘要:http://www.liaoxuefeng.com/ HTML表单的输入控件主要有以下几种: 文本框,对应的<input type="text">,用于输入 ...

  6. “System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

    用管理员身份运行CMD:netsh winsock reset就可以解决

  7. 操作系统(3)_CPU调度_李善平ppt

    不只上面的四种,比如时间片到了也会引起调度. 具体的调度算法: fcfs简单,但是波动很大. 最高相应比算法,执行时间最长就应该等待的长点,比sjf多了一个等待时间的考虑. 硬件定时器和软件计数器共同 ...

  8. 问题008:java 中代码块的风格有几种?单行注释可否嵌套?多行注释可否嵌套?

    有两种:一种是次行风格,英文称为next-line 一种是是行尾风格,英文称为 end-of-line 举例 行尾风格 public class HelloWorld{ public static v ...

  9. Ubuntu 14.04 LTS 触摸板无法使用

    c16b上,触摸板不能使用,查找后发现,需要在加载驱动时增加参数. 如下所说: 1.使用以下命令后,触摸板可以使用 sudo modprobe -r psmouse sudo modprobe psm ...

  10. IATHook

    IATHookClass.h #pragma once #include <Windows.h> class IATHookClass { private: DWORD oldAddr; ...