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