LoginSignup
10
14

More than 5 years have passed since last update.

Photon Cloud × Unity GameJam 事前勉強 - Rigidbodyの同期

Last updated at Posted at 2013-06-25

GameJamの事前勉強会のために作った資料です。

http://kokucheese.com/event/index/95326/

ネットワークゲームにおいてオブジェクトの動きに関するものには注意を払わなければいけません。
UnityではRigidbodyを例として説明します。

名称未設定-1 copy.png

ネットワークゲームではオブジェクトの 位置・角度・スケール がどの画面から見ても同じでなければいけません。
Rigidbodyは物理演算に則って、オブジェクトの 位置・角度 が変化します

しかし、動きをRigidbodyに任せてしまうと、どの画面でも動きが全く同じになるという保証がされなくなります

タイムラグが原因で1つの画面のみ違う動作をしてしまった場合、どう修正を行いますか?

そこで、ある程度保証ができるように、少し特殊な処理を施さなければいけません

名称未設定-1 copy.png

  • 自分の画面 : 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/

10
14
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
10
14