実現したいこと
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等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
実現できませんでした。
補足
特になし
あなたの回答
tips
プレビュー