GameJamの事前勉強会のために作った資料です。
ネットワークゲームにおいてオブジェクトの動きに関するものには注意を払わなければいけません。
UnityではRigidbodyを例として説明します。
ネットワークゲームではオブジェクトの 位置・角度・スケール がどの画面から見ても同じでなければいけません。
Rigidbodyは物理演算に則って、オブジェクトの 位置・角度 が変化します
しかし、動きをRigidbodyに任せてしまうと、どの画面でも動きが全く同じになるという保証がされなくなります
タイムラグが原因で1つの画面のみ違う動作をしてしまった場合、どう修正を行いますか?
そこで、ある程度保証ができるように、少し特殊な処理を施さなければいけません
- 自分の画面 : Rigidbodyの適用によって変化した位置・角度情報を相手の画面に送信する
- 相手の画面 : isKinematicにチェックを入れ、重力による挙動をなくす
- 相手の画面 : 送られてきた位置・角度情報を適用する
以上でRigidbodyの同期についてのお話は終了です。これを理解しておくと開発がぐっと楽になるのではないでしょうか。
最後に実際に適用する時のソースコード
Sample.cs
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(PhotonView))]
[RequireComponent(typeof(Rigidbody))]
public class Sample : Photon.MonoBehaviour
{
void Awake ()
{
// 相手の画面だったら
if (!photonView.isMine) {
rigidbody.isKinematic = true;
}
}
}
##初学者向け問題はこちら
Unityに関する初歩問題
##published by
日本Androidの会 秋葉原支部 Unity部
https://www.facebook.com/groups/android.akb.unity/