Commandの制約:
・コマンドは 自分自身の プレイヤーオブジェクトからのみ送信できます
・メソッド名の先頭にCmdを付ける必要がある
NetwokingDemo.unitypackage - Google ドライブ
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; public class Move1 : NetworkBehaviour { [SerializeField] float spd = 1f; //3フレームレートに一回送信 [SerializeField] int SendRate = 3; int SendRateCnt = 1; Vector3 RPosition; Vector3 PrevPosition; float TimeCount = 0f; float PrevTimeCount = 0.1f;//数値は適当 [ClientCallback] void Update (){ if (isLocalPlayer){ if (Input.GetKey(KeyCode.LeftArrow)){ transform.Translate(new Vector3(-spd*Time.deltaTime,0,0)); } if (Input.GetKey(KeyCode.RightArrow)){ transform.Translate(new Vector3(spd*Time.deltaTime,0,0)); } if(SendRateCnt % SendRate == 0){ CmdSendTransform(transform.position); SendRateCnt = 1; }else{ SendRateCnt += 1; } }else{ TimeCount += Time.deltaTime; //TimeCount : PrevTimeCount = X : 1 => X = TimeCount/PrevTimeCount var p = Vector3.Lerp(PrevPosition,RPosition,TimeCount/PrevTimeCount); transform.SetPositionAndRotation(p,Quaternion.identity); } } [Command] void CmdSendTransform(Vector3 position){ foreach(var con in NetworkServer.connections){ if(con == null || !con.isReady || con == connectionToClient) continue; TargetSendTransform(con,position); } } [TargetRpc] void TargetSendTransform(NetworkConnection t,Vector3 position){ PrevPosition = transform.position; RPosition = position; PrevTimeCount = TimeCount; TimeCount = 0f; } }