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 进行框架项目开发案例讲解之一 员工 ...
随机推荐
- 【洛谷1120】小木棍(一道有技巧的dfs)
点此看题面 大致题意: 给你\(N\)根小木棍,请你把它们拼成若干根长度相同的木棍,问你最小可能长度. 枚举+\(dfs\) 显然的,木棍的长度肯定是\(\sum_{i=1}^n len[i]\)的一 ...
- python_74_pickle反序列化
import pickle def say(name):#序列化时用完会释放,要想反序列化,要重新写上该函数,否则会出错 print('我的高中', name)#可以和之前的序列化函数不同 f=ope ...
- Java反射得到属性的值和设置属性的值
package com.whbs.bean; public class UserBean { private Integer id; private int age; private String n ...
- ubuntu web server ipython notebook install
http://blog.csdn.net/yehuohan/article/details/51389966 ipython notebook installhttp://blog.csdn.net/ ...
- c++中 endl的意思?
endl是 end line的意思,表示此行结束,换行,就是回车
- 从指定的view中截图 返回UIImage
-(UIImage *)getImageFromView:(UIView *)view{ UIGraphicsBeginImageContext(view.bounds.size); [view.la ...
- Linux基础-Linux常用命令
Linux(/'lainʌks/)系统特点:稳定,安全,开源(一切皆文件) 装上SSH协议就可以连接Linux 装虚拟机(SSH) win用xshell工具 Linux命令:每日一个linux命令 p ...
- 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程
点击了解更多Python课程>>> 零基础入门Python实战:四周实现爬虫网站 Django项目视频教程 适用人群: 即将毕业的大学生,工资低工作重的白领,渴望崭露头角的职场新人, ...
- 怎样查看web软件例如apache的连接数
查看连接总数和当前的连接数 netstat -ant | grep $ip:80 | wc -l netstat -ant | grep $ip:80 | grep EST | wc -l 查看IP访 ...
- LRU算法原理解析
LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...