使用Multiplayer Networking做一个简单的多人游戏例子-1/2(换一种方法)
2024-08-31 03:51:52
SynMove.cs
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class SynMove : NetworkBehaviour {
//当 SyncVar 发生改变时,UNet 会从 Server 端向所有有效的 Client 端发送这些改变。注意这里的方向,是从 Server 到 Client ,而不是从 Client 到 Server 的方向。
[SyncVar]
private Vector3 synPos;
[SerializeField]Transform myTransform;
[SerializeField]float lerpRate = ; // Update is called once per frame
void FixedUpdate () {
TransmitPosition ();
LerpPosition (); }
void LerpPosition(){
//不是本地玩家
if (!isLocalPlayer) {
//非本地玩家的位置进行更新
myTransform.position = Vector3.Lerp (myTransform.position,synPos,Time.deltaTime*lerpRate);
}
}
[Command]
//命令, 在客户端调用,但是在服务端运行,这是方法必须以 Cmd 开头
void CmdProvidePositionToServer(Vector3 pos){
//在服务器上为synPos 同步变量赋值
synPos = pos;
}
[ClientCallback]
//只在客户端调用
void TransmitPosition(){
//是本地玩家
if (isLocalPlayer) {
//就把本地玩家的位置传给服务器
CmdProvidePositionToServer (myTransform.position);
}
}
}
PlayerController.cs
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class PlayerController : NetworkBehaviour { // Update is called once per frame
void Update () {
//判断是不是本地玩家(自己只能控制自己的玩家,不能控制别人的玩家)
if (isLocalPlayer == false) {
return;
}
//获取键盘横轴的值
float h = Input.GetAxis ("Horizontal");
//获取键盘纵轴的值
float v = Input.GetAxis ("Vertical");
//主角左右移动
transform.Translate (Vector3.right*h**Time.deltaTime);
//主角前后移动
transform.Translate (Vector3.forward*v**Time.deltaTime);
}
}
最新文章
- agsXMPP
- linux——常用命令与脚本
- E(X+Y), E(XY), D(X + Y)
- POCO C++库学习和分析——任务
- Binary Indexed Tree 2D 分类: ACM TYPE 2014-09-01 08:40 95人阅读 评论(0) 收藏
- 使用Jeditable插件时遇到的问题
- jsp/servlet中的编码问题
- (基础篇 走进javaNIO)第一章-java的i/o演进之路
- Unity中的Mono &; Linux上编译Mono的流程
- LeetCode编程训练 - 合并查找(Union Find)
- day14_dom操作
- CSS 隐藏页面元素的 几 种方法总结
- vue实现 toggle显示隐藏效果
- ALV基础二:ALV的扩展功能
- springMVC 复选框带有选择项记忆功能的处理
- AtomicReference实现单例模式
- Pg MySQL
- kotlin 安装 使用
- TJU Problem 1015 Gridland
- kafka 报Failed to load class ";org.slf4j.impl.StaticLoggerBinder";.[z]