オンラインゲームで弾を発射する際、クライアント間で発射のタイミングや座標がずれるとラグが目立ちます。Photon Unity Networking 2 (PUN2) では、サーバー時刻を利用してこのラグを補正することができます。
サーバー時刻を使ったラグ補正の基本
基本的な考え方は、弾を発射した瞬間の座標と時間を記録し、クライアント側で現在のサーバー時刻との差を計算して補正することです。
簡単なC#スクリプト例
using Photon.Pun;
using UnityEngine;
public class Bullet : MonoBehaviourPun
{
public Vector3 initialPosition;
public double spawnTime;
void Start()
{
if(photonView.IsMine)
{
initialPosition = transform.position;
spawnTime = PhotonNetwork.Time;
}
}
void Update()
{
double timeSinceSpawn = PhotonNetwork.Time - spawnTime;
// 弾の移動をサーバー時刻に基づき補正
transform.position = initialPosition + transform.forward * (float)timeSinceSpawn * speed;
}
public float speed = 10f;
}
ポイント
- PhotonNetwork.Time はサーバー時刻を返します。
- 弾の初期位置とサーバー時刻を使って、各クライアントで正しい位置を計算します。
- これにより、ラグによるズレを補正できます。
まとめ
PUN2で弾のラグを減らすには、サーバー時刻に基づく位置補正を行うのが基本です。上記の例では、弾の発射時の座標とサーバー時刻を保存し、Updateで現在時刻との差から位置を補正しています。これを応用すれば、オンラインゲームでの弾やオブジェクトの動きを滑らかにすることができます。


コメント