UNet简单案例讲解
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简单案例讲解的更多相关文章
- SpringBoot基础学习(一) SpringBoot概念、简单案例实现、单元测试及热部署讲解
SpringBoot概念 Spring优缺点分析 Spring优点 Spring是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的轻量级代替品,无需开发重量级的 ...
- 【推荐】使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享
使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享 在开始讲解之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的U ...
- php中foreach()函数与Array数组经典案例讲解
//php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...
- 传智播客C语言视频第二季(第一季基础上增加诸多C语言案例讲解,有效下载期为10.5-10.10关闭)
卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│ 1.txt│ c语言经典案例效果图示.doc│ ├─1传智播客_尹成_C语言从菜鸟到高手_第一 ...
- 使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享
使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享 使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享 在开始讲解之前,我们先来看一下什 ...
- Shiro 核心功能案例讲解 基于SpringBoot 有源码
Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...
- 自动化运维工具-pssh工具安装配置及简单使用讲解
1.先决条件:安装pssh工具要求python版本大于2.4即可. 安装pssh工具的主机针对远程主机需要配置免秘钥认证: ssh-keygen -t rsa ssh-copy-id [remoteh ...
- 有关memcached企业面试案例讲解
有关memcached企业面试案例讲解 1.Memcached是什么,有什么作用? a. memcached是一个开源的.高性能的内存的缓存软件,从名称上看Mem就是内存的意思,而Cache就是 ...
- (转)使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享
原文地址:http://www.cnblogs.com/huyong/archive/2013/09/24/3334848.html 使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工 ...
随机推荐
- CRM User Status profile中Business Transaction字段的用途
有朋友问到User Status profile中Business Transaction字段的用途,如下图INPR, FINI所示. 实际上,这个字段作为一个桥梁,连接了User Status和Sy ...
- iphone 弹出键盘,文本框自动向上移动。
1.让类继承UITextViewDelegate UITextView *inputTextView;UIScrollView * _scrollView; 2.在init函数中先创建scrollVi ...
- mysql 疑难问题-django
1不能存储中文 问题解决1: 确认表设计时,字段name_vn字符集是utf8,改成utf8后可以存储中文
- 进程加载与segment
elf文件是一组结构体和数据的组合. elf文件是一种文件格式,这种格式定义了进程加载器如何读取elf文件的内容. elf文件的程序头或者segment对如何加载(读取)做了说明.
- Java不同对象之间复制属性
// 导入包import org.springframework.beans.BeanUtils; /** * 调用工具复制2个对象之间的属性 2个JavaBean对象复制的属性名相同 * @para ...
- display :inline-block 处理点小障碍
使用inline-block之前先处理点小障碍:inline-block元素会有4px左右的空隙,这个是因为我们写代码时候的换行符所致. 解决办法很简单:在inline-block的父元素中设置样式f ...
- java设计模式2--工厂模式
1.工厂模式特点 可以工厂获取我们所需要的类.我们不需要知道工厂的内部是如何实现的,我们只需要告诉工厂我们需要哪个类,工厂就会自动返回我想要的类. 简单来说:工厂帮我们隐藏了复杂的逻辑处理过程,我们只 ...
- 【JAVA】cxf使用springboot与xml配置的差别所导致的问题。
使用xml时使用以下配置使报文没有加上命名空间时也能正常访问接口.bean定义的前后顺序不影响程序正常注册对象. <!-- 通过Spring创建数据绑定的类 --> <bean id ...
- python3.7 random模块
#!/usr/bin/env python __author__ = "lrtao2010" #python3.7 random模块 import random #随机模块 # r ...
- 水题:HDU1303-Doubles
Doubles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...