facebook twitter hatena line email

Unity/photon/pun1/位置同期

提供: 初心者エンジニアの簡易メモ
2017年10月17日 (火) 01:29時点におけるAdmin (トーク | 投稿記録)による版

移動: 案内検索

サンプル手順

  1. ヒエラルキーにCubeを作成
  2. CubeにAddComponentをしてPhotonViewを追加
  3. Cubeに以下CubeScript.csも割り当てる。
  4. CubeのInspectorのPhotonViewのObserverdOptionにCubeを指定する
  5. ヒエラルキーのCubeをプロジェクトのResourcesにプレハブとして追記する(ドラッグ)
  6. 部屋入室時に以下コードを実行
void OnJoinedRoom() {
    GameObject cube = PhotonNetwork.Instantiate ("Cube", new Vector3 (0.0f, 0.0f, 0.0f), Quaternion.Euler(Vector3.zero),0);
}

CubeScript.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeScript : MonoBehaviour {
	void Start () {
		if (GetComponent<PhotonView> ().isMine) {
			GetComponent<Renderer> ().material.color = Color.red;
		}
	}
	void OnMouseDrag()
	{
		Debug.Log ("ownerId=" + GetComponent<PhotonView> ().ownerId);
		Debug.Log ("isMine=" + GetComponent<PhotonView> ().isMine);
		if (GetComponent<PhotonView>().isMine) {
			GetComponent<Renderer> ().material.color = Color.red;
			Vector3 objectPointInScreen = Camera.main.WorldToScreenPoint (this.transform.position);
 			Vector3 mousePointInScreen = new Vector3 (Input.mousePosition.x,
				 Input.mousePosition.y,
				 objectPointInScreen.z);
			Vector3 mousePointInWorld = Camera.main.ScreenToWorldPoint (mousePointInScreen);
			mousePointInWorld.z = this.transform.position.z;
			this.transform.position = mousePointInWorld;
		}
	}
}

注意

以下コードがfalseになっていると離脱後もインスタンスが残るので注意。

PhotonNetwork.autoCleanUpPlayerObjects = true;

移動をスムーズにするには

  1. 移動させるオブジェクトのInspectorを開き
  2. PhotonTransformViewをAddComponentから追加する
  3. SyncronizePositionにチェックを入れる

参考

http://sleepnel.hatenablog.com/entry/2016/06/09/120200

http://www.urablog.xyz/entry/2016/09/19/232345