概要
前回の記事UnityNetcodeでマルチプレイヤーを試してみる記事の続きです。キー操作で動くプレイヤーキャラクターの位置をユーザー間で同期するようにしてみます。
本文
UnityNetcodeでキャラクターの位置を同期するためにはNetworkTransformコンポーネントが必要です。ですがそのまま使うとホスト側でしかコントロールできなくなるのでここで一手間加えます。
NetworkTransformを継承したNetworkTransformClientを作成してNetworkPlayerにアタッチします。
using Unity.Netcode.Components;
public class NetworkTransformClient : NetworkTransform
{
protected override bool OnIsServerAuthoritative()
{
return false;
}
}
通信される情報量を少しでも減らすためにScaleはOFFにしました
テスト用にプレイヤーを移動させるコードもついでに作成してNetworkPlayerにアタッチします。
using UnityEngine;
public class PlayerMovement : NetworkBehaviour
{
private const float Speed = 5f;
private const float rotationSpeed = 500f;
private void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
Vector3 movementDirection = new Vector3(horizontalInput, 0, verticalInput);
movementDirection.Normalize();
transform.Translate(movementDirection * Speed * Time.deltaTime, Space.World);
if(movementDirection != Vector3.zero)
{
Quaternion toRotation = Quaternion.LookRotation(movementDirection, Vector3.up);
transform.rotation = Quaternion.RotateTowards(transform.rotation, toRotation, rotationSpeed * Time.deltaTime);
}
}
}
Windows用アプリとしてビルドしてUnityEditorでも実行します。WASDキーで上下左右に移動させるとお互いの画面でお互いのキャラクターの動きが同期されていることが確認できました!
UnityNetcode関連記事目次
1.UnityNetcodeをちょっと触ってみたい人用の記事
2.UnityNetcodeでマルチプレイヤーを試してみる記事
3.UnityNetcodeのマルチプレイヤーで位置を同期してみる ←
4.UnityNetcodeのマルチプレイヤーで変数を同期してみる