Unity结合C++开发服务器实现多人游戏(九)
来源:互联网 发布:倩女幽魂for mac 编辑:程序博客网 时间:2024/05/16 11:20
圆滑角色同步移动
角色移动每1/10秒发送的情况,移动会有些迟钝,本讲进行圆滑处理.
通过ProudNet提供的PositionFollower和 AngleFollower类可进行圆滑处理.
本章只对使用PositionFollower类进行讲述.
对PositionFollower的详细说明请参考角色位置同步.
想要对位置更圆滑和精确处理的话,在客户端中发送"位置信息"时,需同时发送位置信息和速度.
对此计算"角色"的速度.
public class PlayControl : MonoBehaviour
{
public Vector3 velocity = new Vector3(0, 0, 0);
void Update()
{
// set velocity for sending message
velocity = rot * forwardSpeed * 0.3f;
...
修改接收信息部分的代码,接收部分不进行直接修改角色的位置, PositionFollower中添加位置信息.
m_stub.Player_Move = (Nettention.Proud.HostID remote,
Nettention.Proud.RmiContext rmiContext,
float x, float y, float z, float vx, float vy, float vz, float angle) =>
{
var g = GameObject.Find("RemotePlayer/" + remote.ToString());
if (g != null)
{
var control = g.GetComponent<RemoteControl>();
var p = new Nettention.Proud.Vector3();
p.x = x;
p.y = y;
p.z = z;
var v = new Nettention.Proud.Vector3();
v.x = vx;
v.y = vy;
v.z = vz;
control.m_positionFollower.SetTarget(p, v);
为进行运作,在RemotePlayer Prefab中添加RemoteControl.cs脚本文件.
然后,PositionFollower对象以成员变数添加.
public class RemoteControl : MonoBehaviour {
public PositionFollower m_positionFollower = new PositionFollower();
PositionFollower对象中输入的 "对方角色的位置和速度" 获取校正后的位置信息.
然后更新至实际位置,如以下代码.
class RemoteControl
{
void Update () {
m_positionFollower.FrameMove(Time.deltaTime);
var p = new Nettention.Proud.Vector3();
var v = new Nettention.Proud.Vector3();
m_positionFollower.GetFollower(ref p, ref v);
transform.position = new UnityEngine.Vector3((float)p.x, (float)p.y, (float)p.z);
}
现在,开启两个以上的客户端, 确认移动是否圆滑.
如果想获取更佳效果的话,可以添加Follower的多个其它成员变数.然后,通过NetClient.GetRecentPing函数获取对方的延迟结果.根据延迟结果,对进入PositionFollower对象的位置和速度进一步深入. 赛车游戏中可进行更准确的位置同步化.
0 0
- Unity结合C++开发服务器实现多人游戏(九)
- Unity结合C++开发服务器实现多人游戏(一)
- Unity结合C++开发服务器实现多人游戏(二)
- Unity结合C++开发服务器实现多人游戏(三)
- Unity结合C++开发服务器实现多人游戏(四)
- Unity结合C++开发服务器实现多人游戏(演示)
- Unity结合C++开发服务器实现多人游戏(五)
- Unity结合C++开发服务器实现多人游戏(六)
- Unity结合C++开发服务器实现多人游戏(七)
- Unity结合C++开发服务器实现多人游戏(八)
- Unity游戏UI框架(九):实现多语言管理
- unity体感游戏--Kinect与Unity结合开发
- C#Socket服务器开发(Unity)
- Unity游戏开发实现短信验证(SMSSDK)
- Unity-手机游戏开发全屏实现
- 【Visual C++】游戏开发笔记之九 游戏地图制作(一)平面地图贴图
- 【Visual C++】游戏开发笔记之九 游戏地图制作(一)平面地图贴图
- 【Visual C++】游戏开发笔记之九 游戏地图制作(一)平面地图贴图
- Ubuntu中python调用SimpleITK来显示图像
- How should you start learn Madwifi
- parseInt()和parseFloat()
- 【每天一个Linux命令】A-alias
- 企业需要什么样的产品经理?
- Unity结合C++开发服务器实现多人游戏(九)
- FBMemoryProfiler使用
- 一次dns缓存引发的惨案
- 阅读鉴赏
- android 查看sha1
- scala implicit 关键字用法总结
- [BBB试用之旅2] python调用库点亮led
- Laravel的三种方式数据库操作方式
- Python 猴子补丁