unity——角色控制以及网络组件
来源:互联网 发布:记账app 知乎 编辑:程序博客网 时间:2024/05/23 21:38
角色通过WSAD来控制移动,主要是通过获取X,Z轴上的输入值之后,进行旋转和移动的运算
using UnityEngine;using System.Collections;using UnityEngine.Networking;public class playercontrol : NetworkBehaviour { public float moveSpeed;//移动速度 public float rotateSpeed;//旋转速度 void Update () { if(!isLocalPlayer) return; Vector3 forward= new Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical"));//设定获得水平和垂直方向上的值 Vector3 forwardPoint = transform.position + forward; float inputMotionValues = Mathf.Max (Mathf.Abs (forward.x), Mathf.Abs (forward.z));//取得X与Y之间最大的一个值 if (inputMotionValues > 0) {//如果有移动输入 Quaternion lookRot = Quaternion.LookRotation (forward);//看向的方向 transform.rotation = Quaternion.Slerp (transform.rotation, lookRot, rotateSpeed * inputMotionValues * Time.deltaTime);//物体旋转到目标方向上,第三个参数是速度 transform.Translate(Vector3.forward * inputMotionValues * moveSpeed * Time.deltaTime);//设定物体移动的距离 } }}
网络组件要多导入一个Networking包,并改变继承关系,NetworkBehaviour会多些方法或变量。原理是因为Unity自带的组件用于网络帧数会变得很慢,所以用插值运算来模拟物体运动的动画,这样肉眼基本是看不出来的可以达到目的,通过调用服务器函数来向服务器端发送自己的位置,而且获得服务器端的非本机玩家位置并在本地更新。这样就实现了服务器端与客户端操作的同步。
using UnityEngine;using System.Collections;using UnityEngine.Networking;public class NetworkSync : NetworkBehaviour { public float lerpSpeed;//更新速度 [SyncVar] Vector3 serverSidePosition=Vector3.zero;//服务器上的位置 [SyncVar] Quaternion serverSideRotation;//服务器上的旋转量 void FixedUpdate () { if (isLocalPlayer) {//判断是本机上的玩家 CmdsendToServer (transform.position,transform.rotation);//向服务器发送自己的位置 } else { lerpPositon ();//插值运算,更新非本机玩家的位置 } } [Command] void CmdsendToServer(Vector3 position,Quaternion rotation)//服务器专用函数,以Cmd开头 { serverSidePosition = position; serverSideRotation = rotation;//向服务器端发送自己的位置和旋转量 } void lerpPositon(){ transform.position = Vector3.Lerp (transform.position, serverSidePosition,lerpSpeed*Time.fixedDeltaTime); transform.rotation = Quaternion.Slerp(transform.rotation, serverSideRotation,lerpSpeed*Time.fixedDeltaTime); //非本机玩家更新在本机上的位置和旋转量 }}
0 0
- unity——角色控制以及网络组件
- Unity 角色控制相关操作
- Unity 角色控制相关操作
- Unity 鼠标控制角色移动
- Unity实现第三人称角色控制
- 标准CharacterCollider角色控制组件
- unity中简单的角色移动控制
- unity 如何控制摄像机跟随角色移动
- Unity 角色单步移动控制
- 【Unity&角色移动】代码控制重力
- unity学习手记之控制角色移动
- Unity使用EasyTouch虚拟摇杆控制角色
- Unity Player角色移动控制脚本实现
- 【小松教你手游开发】【unity实用技能】Unity3D研究院之第一人称第三人称角色控制组件修改C#版本
- Unity角色控制角色不穿过场景模型
- Unity GUI组件控制随记
- Unity动画控制组件UIPlayTween
- yii 2.0 admin和角色控制组件
- php性能优化学习记录一
- 面试
- 关于React使用中遇到的坑
- 个人进阶之路——安卓蓝牙模块(4)
- H-Index II
- unity——角色控制以及网络组件
- Hibernate学习篇05——联合主键(二)
- thinkphp3.2.3开发商城实战(一)
- 栈与队列
- 深入探讨 Java 类加载器
- *LeetCode 90
- 错误记录:Resource ID #0x7f040006 type #0x12 is not valid
- 网易公开课《Linux内核分析》学习心得-mykernel实验的实践和分析
- 一对多 pc上运行android客户端