質問するログイン新規登録

Q&A

0回答

65閲覧

UnityC# Fusion 別のプレイヤーの子オブジェクトになるには

takoyaki0911

総合スコア0

Photon Cloud

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

Photon Server

Photon Serverは、オンラインゲーム開発向けネットワークエンジン。リアルタイムマルチプレイ通信のプラットフォームであるPhotonの一つで、サーバにインストールして使うサーバアプリケーションです。全てカスタマイズが可能で権限管理もできます。

C#

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

Unity

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

0グッド

0クリップ

投稿2026/10/31 11:05

0

0

実現したいこと

2番目に生成されるプレイヤーを
一番目に生成された別プレイヤーの子オブジェクトにする方法を教えてほしいです。

発生している問題・分からないこと

ゲームランチャーのコードで
①画面上にある「Finish」のタグのゲームオブジェクトを探して、GameObject 「G」にする
のところで
「Finish」タグが探すことができずにnullになってしまいます。

該当のソースコード

using Fusion; using Fusion.Sockets; using System.Collections.Generic; using System; using UnityEngine; public class ゲームランチャー : MonoBehaviour, INetworkRunnerCallbacks { public NetworkRunner networkRunnerPrefab; public NetworkPrefabRef playerAvatarPrefab;//タグ=Finish public int spawnCount = 0; //public Transform potison1; // Start is called once before the first execution of Update after the MonoBehaviour is created private async void Start() { // NetworkRunnerを生成する var networkRunner = Instantiate(networkRunnerPrefab); // GameLauncherを、NetworkRunnerのコールバック対象に追加する networkRunner.AddCallbacks(this); networkRunner.AddCallbacks(FindObjectOfType<入力を集める>()); // 共有モードのセッションに参加する var result = await networkRunner.StartGame(new StartGameArgs { GameMode = GameMode.Shared, }); } // Update is called once per frame void INetworkRunnerCallbacks.OnObjectExitAOI(NetworkRunner runner, NetworkObject obj, PlayerRef player) { } void INetworkRunnerCallbacks.OnObjectEnterAOI(NetworkRunner runner, NetworkObject obj, PlayerRef player) { } void INetworkRunnerCallbacks.OnPlayerJoined(NetworkRunner runner, PlayerRef player) { spawnCount++; int currentIndex = spawnCount; if (player == runner.LocalPlayer) { //1番 if (currentIndex == 1) { // 自分自身のアバターをスポーンする NetworkObject A = runner.Spawn(playerAvatarPrefab, transform.position, Quaternion.identity, player); } //2番 if (currentIndex == 2) { //「Finish」のタグのゲームオブジェクトを探す GameObject G = GameObject.FindWithTag("Finish"); if (G == null) { Debug.Log("NG"); return; } Debug.Log("Good!"); // 自分自身のアバターをスポーンする NetworkObject A = runner.Spawn(playerAvatarPrefab, new Vector3(0,1,0), Quaternion.identity, player);       //子オブジェクトにする G.transform.SetParent(A.transform, true); } } } void INetworkRunnerCallbacks.OnPlayerLeft(NetworkRunner runner, PlayerRef player) { } void INetworkRunnerCallbacks.OnInput(NetworkRunner runner, NetworkInput input) { } void INetworkRunnerCallbacks.OnInputMissing(NetworkRunner runner, PlayerRef player, NetworkInput input) { } void INetworkRunnerCallbacks.OnShutdown(NetworkRunner runner, ShutdownReason shutdownReason) { } void INetworkRunnerCallbacks.OnConnectedToServer(NetworkRunner runner) { } void INetworkRunnerCallbacks.OnDisconnectedFromServer(NetworkRunner runner, NetDisconnectReason reason) { } void INetworkRunnerCallbacks.OnConnectRequest(NetworkRunner runner, NetworkRunnerCallbackArgs.ConnectRequest request, byte[] token) { } void INetworkRunnerCallbacks.OnConnectFailed(NetworkRunner runner, NetAddress remoteAddress, NetConnectFailedReason reason) { } void INetworkRunnerCallbacks.OnUserSimulationMessage(NetworkRunner runner, SimulationMessagePtr message) { } void INetworkRunnerCallbacks.OnSessionListUpdated(NetworkRunner runner, List<SessionInfo> sessionList) { } void INetworkRunnerCallbacks.OnCustomAuthenticationResponse(NetworkRunner runner, Dictionary<string, object> data) { } void INetworkRunnerCallbacks.OnHostMigration(NetworkRunner runner, HostMigrationToken hostMigrationToken) { } public void OnReliableDataReceived(NetworkRunner runner, PlayerRef player, ReliableKey key, ReadOnlySpan<byte> data) { } public void OnReliableDataProgress(NetworkRunner runner, PlayerRef player, ReliableKey key, float progress) { } void INetworkRunnerCallbacks.OnSceneLoadDone(NetworkRunner runner) { } void INetworkRunnerCallbacks.OnSceneLoadStart(NetworkRunner runner) { } }
using Fusion; using UnityEngine; using System; using System.Collections.Generic; using Fusion.Sockets; public class 入力を集める : MonoBehaviour, INetworkRunnerCallbacks { // Start is called once before the first execution of Update after the MonoBehaviour is created //入力データ型 public struct MyInputData : INetworkInput { public NetworkBool up; public NetworkBool down; public NetworkBool left; public NetworkBool right; } //入力を集める側 void INetworkRunnerCallbacks.OnInput(NetworkRunner runner, NetworkInput input) { MyInputData data = new MyInputData(); data.up = Input.GetKey(KeyCode.UpArrow); data.down = Input.GetKey(KeyCode.DownArrow); data.left = Input.GetKey(KeyCode.LeftArrow); data.right = Input.GetKey(KeyCode.RightArrow); input.Set(data); } public void OnPlayerJoined(NetworkRunner runner, PlayerRef player) { } void INetworkRunnerCallbacks.OnPlayerLeft(NetworkRunner runner, PlayerRef player) { } //void INetworkRunnerCallbacks.OnInput(NetworkRunner runner, NetworkInput input) { } void INetworkRunnerCallbacks.OnInputMissing(NetworkRunner runner, PlayerRef player, NetworkInput input) { } void INetworkRunnerCallbacks.OnShutdown(NetworkRunner runner, ShutdownReason shutdownReason) { } void INetworkRunnerCallbacks.OnConnectedToServer(NetworkRunner runner) { } void INetworkRunnerCallbacks.OnDisconnectedFromServer(NetworkRunner runner, NetDisconnectReason reason) { } void INetworkRunnerCallbacks.OnConnectRequest(NetworkRunner runner, NetworkRunnerCallbackArgs.ConnectRequest request, byte[] token) { } void INetworkRunnerCallbacks.OnConnectFailed(NetworkRunner runner, NetAddress remoteAddress, NetConnectFailedReason reason) { } void INetworkRunnerCallbacks.OnUserSimulationMessage(NetworkRunner runner, SimulationMessagePtr message) { } void INetworkRunnerCallbacks.OnSessionListUpdated(NetworkRunner runner, List<SessionInfo> sessionList) { } void INetworkRunnerCallbacks.OnCustomAuthenticationResponse(NetworkRunner runner, Dictionary<string, object> data) { } void INetworkRunnerCallbacks.OnHostMigration(NetworkRunner runner, HostMigrationToken hostMigrationToken) { } public void OnReliableDataReceived(NetworkRunner runner, PlayerRef player, ReliableKey key, ReadOnlySpan<byte> data) { } public void OnReliableDataProgress(NetworkRunner runner, PlayerRef player, ReliableKey key, float progress) { } void INetworkRunnerCallbacks.OnSceneLoadDone(NetworkRunner runner) { } void INetworkRunnerCallbacks.OnSceneLoadStart(NetworkRunner runner) { } public void OnObjectEnterAOI(NetworkRunner runner, NetworkObject obj, PlayerRef player) { } public void OnObjectExitAOI(NetworkRunner runner, NetworkObject obj, PlayerRef player) { } }
using Fusion; using UnityEngine; public class 移動する : NetworkBehaviour { // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { } public override void FixedUpdateNetwork() { if (GetInput(out 入力を集める.MyInputData data)) { if (data.up) { Debug.Log("Upを受信"); transform.position += transform.forward * 2f * Runner.DeltaTime; } if (data.down) { transform.position -= transform.forward * 2f * Runner.DeltaTime; } if (data.right) { transform.position += transform.right * 2f * Runner.DeltaTime; } if (data.left) { transform.position -= transform.right * 2f * Runner.DeltaTime; } } else { Debug.Log("入力取得失敗"); } } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

実現できませんでした。

補足

特になし

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問