在正式开始设置旋转的同步之前,先进行Network场景的设置,使得在Menu这一场景下连接服务器,然后在Main场景中开始游戏,断开连接后再次回到Menu场景。
我们需要的时候将Main中的NetworkManager复制到Menu场景中,并且删除Main中的NetworkManager,然后在Build Setting中添加两个场景,Menu在Main之前。
接着需要在NetworkManager物体的Network Manager组件中,将Menu设为Offine Scene,Main设为Online Scene。
接下来我们进入正题——旋转的同步
新建脚本Player_SyncRotation
using UnityEngine;将脚本添加到Player上,将Player物体拖到playerTransform上,将Player的子物体FirstPersonCharacter拖到camTransform上。旋转同步设置完成。
using System.Collections;
using UnityEngine.Networking;
public class Player_SyncRotation : NetworkBehaviour {
[SyncVar]private Quaternion syncPlayerRotation;
[SyncVar]private Quaternion syncCamRotation;
[SerializeField]private Transform playerTransform;
[SerializeField]private Transform camTransform;
[SerializeField]private float lerpRate=15;
void FixedUpdate ()
{
TransmitRotations();
LerpRotations();
}
void LerpRotations()
{
if (!isLocalPlayer)
{
playerTransform.rotation = Quaternion.Lerp(playerTransform.rotation, syncPlayerRotation, Time.deltaTime * lerpRate);
camTransform.rotation = Quaternion.Lerp(camTransform.rotation, syncCamRotation, Time.deltaTime * lerpRate);
}
}
[Command]
void CmdProvideRotationToServer(Quaternion playerRot, Quaternion camRot)
{
syncPlayerRotation = playerRot;
syncCamRotation = camRot;
}
[Client]
void TransmitRotations()
{
if (isLocalPlayer)
{
CmdProvideRotationToServer(playerTransform.rotation, camTransform.rotation);
}
}
}
额外再补充:Player的生成点问题
Player的生成点一直是固定的一个位置,现在我们要将Player的生成点设置为固定的几个位置,随机选择一个位置生成。
首先我们需要新建一个空物体,称其为Spawn,再新建一个空物体命名为SpawnPoints,将Spawn成为其子物体。
在Spawn中添加组件NetworkStartPosition,并复制Spawn物体,随意的放置到其他的位置。至此,生成点的设置完成。