質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Photon Cloud

Photon Cloudは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つです。ネットワーク通信によるオンラインゲームを開発・運営するために必要なツールがサーバー環境に構築されています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1342閲覧

【Unityオンラインゲーム開発】コインの取得が相手プレイヤーのUI表示に影響してしまう

araragi_dev

総合スコア60

Photon Cloud

Photon Cloudは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つです。ネットワーク通信によるオンラインゲームを開発・運営するために必要なツールがサーバー環境に構築されています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/01/05 07:06

編集2022/01/05 12:03

■概要
UnityでPhotonを使いオンラインゲームを作っています
キャラクターがコインを取得すると、Unityちゃんスクリプト内のcoin_number変数を+1し、
CanvasのNumberOfCoinsのText表示を更新します。

■問題点
1人でログインしていると問題なくText表示までできるのですが、
2人でログインすると、プレイヤー1でコインを取得すると、プレイヤー2のTextが更新されてしまします。
コインの所持数が逆転してしまっている状態です。

こちらの問題を解決したいです。
お手数おかけいたしますが、よろしくおねがいします。

■問題の可能性
プレイヤー1のコインの当たり判定が、プレイヤー2にも影響している可能性?がありそうです。
Collisionの処理が問題あるかもしれません。

■イメージ
イメージ説明
イメージ説明

■ソースコード 文字制限により一部のみ抜粋

namespace UnityChan { //継承先を修正する。他のインスタンス(キャラ)に操作が影響しないようにする public class UnityChanControlScriptWithRgidBody : Photon.Pun.MonoBehaviourPun { public GameObject Coin_Object = null; public int i = 0; GameObject unitychan;//Unityちゃんを入れる public int coin_number = 0; //所持コイン枚数 // 初期化============================================================= void Start () { i = 1; //ユーザーIDでチームを割り振る              if (photonView.OwnerActorNr == 1)               {                  team = "red"; e_team = "blue"; //Debug.Log("チームはred"); } else { team = "blue"; e_team = "red"; //Debug.Log("チームはblue"); } Debug.Log("OwnerActorNr:" + photonView.OwnerActorNr + " チーム:" + team + " NickName:" + photonView.Owner.NickName); gameObject.name = "Player["+ photonView.OwnerActorNr + "]"; //効果音の処理 audioSource = GetComponent<AudioSource>(); gamecontrol = GameObject.Find("GameControl"); //共通処理用のオブジェクトを取得 gamecontrol_script = gamecontrol.GetComponent<GameControl>();//共通処理のスクリプトを取得 } void FixedUpdate () {          //コインの表示を更新するスクリプト          if (i == 1)          { Coin_Object = GameObject.Find("NumberOfCoins");                  //この二行をStartに持ってくると何故かcoin_textが存在しないと言われる謎。 Text coin_text = Coin_Object.GetComponent<Text>(); // テキストの表示を入れ替える ★このあたりがおかしい? coin_text.text = "コイン枚数" + coin_number; Debug.Log(unitychan + "のコイン枚数:" + coin_number); } } //★ボタン関数系★ //ガチャでアイテムを放出する public void GachaButton() { //所持コイン枚数で判断 if (coin_number>=1) { //ガチャの処理 省略 coin_number = coin_number -1; //所持コインの枚数を減らす } else { //なければアラートの処理 //画面中央にコインがないと一定時間表示して消す } } //★プレイヤーが何かに触れたときの挙動★ void OnCollisionEnter(Collision collision) { //Coin以外の衝突処理 省略       //★コイン以外の衝突処理は正常なので、やはり表示のみがおかしい?              //コインの取得枚数処理 ★こいつが両者で反応してしまっている? if (collision.gameObject.name == "Coin") { Debug.Log("Coin Get"); coin_number += 1; Debug.Log("ユーザー名:" + team + " コイン枚数coin_number:" +coin_number); //触れたらコインカウント増やして、所持枚数表示を更新する audioSource.PlayOneShot(sound1); } } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

//コインの取得枚数処理 ★こいつが両者で反応してしまっている?

if (collision.gameObject.name == "Coin")
{

ここのコメントアウトの内容が正しいような気がします。
操作中(自身が管理者)のオブジェクトにのみ処理を行えばいいと思うので、

if (photonView.IsMine && collision.gameObject.name == "Coin")

上記の条件分岐にすることで解決しませんかね?

ここのサイトにもっと詳しく→リンク内容

*気になったのが、プレイヤーの移動は別々に処理されてるんですかね?それと同じ考えでいけば大丈夫そう?

投稿2022/01/05 23:48

kyooo_

総合スコア104

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

araragi_dev

2022/01/06 01:36

kyooo_さん ありがとうございます!ご指摘の通りでした! collisionの処理で各プレイヤーが反応してしまっていたことが原因でした! 条件分岐にphotonView.IsMineを入れることで解決いたしました! 大変助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問