Unity---Unet02---创建玩家的预制并进行服务器和客户端移动对比

首先创建玩家的Prefab:

添加Network Identity组件进行身份标识,这里勾选第二个表示只对本地玩家有效。第一个是仅在服务器上有效果。下面添加移动代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;//引入命名空间
public class PlayerHandler : NetworkBehaviour {

    public override void OnStartClient()
    {
        //服务器开启修改玩家的颜色便于区分
      transform.GetComponent<MeshRenderer>().material.color = Color.red;
    }
    private void FixedUpdate()
    {
 if (!isLocalPlayer) return;//如果不是本地玩家直接return,如果不作判断会导致操作一个时其他的会跟着发生改变
        PlayerMove();
    }

    public void PlayerMove()
    {
       
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");
        Vector3 dir = new Vector3(h, 0, v);
        if (dir != Vector3.zero)
        {
            transform.rotation = Quaternion.LookRotation(dir);
            transform.Translate(Vector3.forward * 2.5f * Time.deltaTime);
        }
    }
}

然后对在NetworkManager里对玩家进行设置:

必须将玩家添加到这,表示开启自动生成玩家。现在将项目发布看看效果,记得先删除hierarchy里面的Player:

我把Unity当做服务器和客户端,发布的作为客户端加入,分别移动他们的位置

服务器端玩家位置已经移动:

客户端显示:

两个玩家依然是重叠状态,就是说服务器玩家移动后客户端里面的位置没有进行同步,同步很简单,只需要为玩家添加一个同步组件Network Transform:

下面再看效果:

仅仅移动了服务器端,在客户端的位置也同样发生了改变,到这里玩家的同步就做好了,下一篇我们做子弹的发射和同步。

欢迎加群:4364930讨论。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值