0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

[Unity]UnityNetcodeのマルチプレイヤーで位置を同期してみる

Last updated at Posted at 2024-06-15

概要

前回の記事UnityNetcodeでマルチプレイヤーを試してみる記事の続きです。キー操作で動くプレイヤーキャラクターの位置をユーザー間で同期するようにしてみます。

本文

UnityNetcodeでキャラクターの位置を同期するためにはNetworkTransformコンポーネントが必要です。ですがそのまま使うとホスト側でしかコントロールできなくなるのでここで一手間加えます。
NetworkTransformを継承したNetworkTransformClientを作成してNetworkPlayerにアタッチします。

using Unity.Netcode.Components;
public class NetworkTransformClient : NetworkTransform
{
    protected override bool OnIsServerAuthoritative()
    {
        return false;
    }
}

通信される情報量を少しでも減らすためにScaleはOFFにしました

スクリーンショット 2024-06-15 214539.png

テスト用にプレイヤーを移動させるコードもついでに作成して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キーで上下左右に移動させるとお互いの画面でお互いのキャラクターの動きが同期されていることが確認できました!:confetti_ball:

Movie_001.gif

UnityNetcode関連記事目次

1.UnityNetcodeをちょっと触ってみたい人用の記事
2.UnityNetcodeでマルチプレイヤーを試してみる記事
3.UnityNetcodeのマルチプレイヤーで位置を同期してみる ← :triangular_flag_on_post:
4.UnityNetcodeのマルチプレイヤーで変数を同期してみる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0