using System;
using System.Collections;
using System.Collections.Generic;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
using UnityEngine.SceneManagement;
public class InGameLobbySceneManager : MonoBehaviourPunCallbacks
{
ย ย public GameObject GameStartScene;
ย ย public GameObject InGameLobbyScene;
ย ย // ํ๋ ์ด์ด ์ธ ๊ฒ์ ๋ก๋น ์
์ฅ ๋ฌด์์ ๋ฐฐ์น
ย ย void Start()
ย ย {
ย ย ย ย // ๋๋ค ์คํฐ ์์น ์ค์
ย ย ย ย Transform[] spown = GameObject.Find("SpownerLobby").GetComponentsInChildren<Transform>();
ย ย ย ย int idx = UnityEngine.Random.Range(1, spown.Length);
ย ย ย ย GameObject player = PhotonNetwork.Instantiate("Player", spown[idx].position, spown[idx].rotation, 0);
ย ย }
ย ย
ย ย // ๊ฒ์ ์์ ๋ฒํผ ๋๋ฅผ ๋, ํจ์
ย ย public void GameStartCanvasON(){ย ย ย ย
ย ย ย ย // ๊ฒ์ ์์ 5์ด ํ MainScene์ผ๋ก ์ด๋
ย ย ย ย ChangeSceneWithDelay(6.0f);
ย ย }
ย ย // ์ผ์ ์๊ฐ ํ์ ์ฌ ์ ํ์ ์ํ ๋ฉ์๋
ย ย public void ChangeSceneWithDelay(float delay)
ย ย {
ย ย ย ย StartCoroutine(ChangeAfterDelay(delay));
ย ย }
ย ย // ์ง์ฐ ํ ์ฌ ๋ก๋๋ฅผ ์ํ ์ฝ๋ฃจํด
ย ย IEnumerator ChangeAfterDelay(float delay)
ย ย {
ย ย ย ย if(PhotonNetwork.IsMasterClient)
ย ย ย ย {
ย ย ย ย ย ย GameMainRandomSpawn();
ย ย ย ย }
ย ย ย ย // ์ง์ ๋ ์๊ฐ๋งํผ ๋๊ธฐ
ย ย ย ย yield return new WaitForSeconds(delay);
ย ย ย ย // MainScene ๋ก๋ (GameStartScene OFF)
ย ย ย ย print("// MainScene ๋ก๋ (GameStartScene OFF)");
ย ย // ย ย GameStartScene.SetActive(false);
ย ย }
ย ย [PunRPC]
ย ย public void RandomSpawnPlayersRPC(int viewID)
ย ย { ย
ย ย ย ย print("// ๋๋ค ์คํฐ ์์น ์ค์ ");
ย ย ย ย // ๋๋ค ์คํฐ ์์น ์ค์
ย ย ย ย Transform[] spown = GameObject.Find("Spowner").GetComponentsInChildren<Transform>();
ย ย ย ย int idx = UnityEngine.Random.Range(1, spown.Length);
ย ย ย ย // ํ์ฌ ํด๋ผ์ด์ธํธ ์ฌ์ ์๋ ๋ชจ๋ PhotonView ์ค๋ธ์ ํธ ์ค์
ย ย ย ย // ๋งค๊ฐ ๋ณ์ ViewID ์ ํด๋นํ๋ PhotonView ์ค๋ธ์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค.
ย ย ย ย PhotonView pv = PhotonView.Find(viewID);
ย ย ย ย pv.transform.position = spown[idx].position;
ย ย }
ย ย
ย ย // ํ๋ ์ด์ด ๋ฉ์ธ ๊ฒ์ ์
์ฅ ๋ฌด์์ ๋ฐฐ์น
ย ย public void GameMainRandomSpawn()
ย ย {
ย ย ย ย ย ย // ํ์ฌ ์ฌ์ ์๋ ๋ชจ๋ "Player" ํ๊ทธ๋ก๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ์ ธ์จ๋ค.
ย ย ย ย ย ย // ๋ชจ๋ ํ๋ ์ด์ด ์ค๋ธ์ ํธ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ.
ย ย ย ย ย ย GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
ย ย ย ย ย ย // ๋ชจ๋ "Players" ์ค๋ธ์ ํธ๋ฅผ ๋ฐ๋ณตํด์ ๋๋ฆฐ๋ค.
ย ย ย ย ย ย foreach (var player in players)
ย ย ย ย ย ย {
ย ย ย ย ย ย ย ย // "Player" ์ค๋ธ์ ํธ์ PhotonView ์ปดํฌ๋ํธ ๊ฐ์ ธ์ค๊ธฐ
ย ย ย ย ย ย ย ย PhotonView pv = player.GetComponent<PhotonView>();
ย ย ย ย ย ย ย ย if(pv != null)
ย ย ย ย ย ย ย ย { ย
ย ย ย ย ย ย ย ย ย ย // ์ถ๋ ฅ ์์ ๊ฐ : 1001 , 2001, 3001, 4001 ...
ย ย ย ย ย ย ย ย ย ย print(pv.ViewID);
ย ย ย ย ย ย ย ย ย ย print("RPC ํธ์ถ ์ : " + pv.transform.position);
ย ย ย ย ย ย ย ย ย ย // "Player" ์ค๋ธ์ ํธ์ ViewID ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ง๊ณ ,
ย ย ย ย ย ย ย ย ย ย // ๋ชจ๋ ํด๋ผ์ด์ธํธ ์ธก์ ์๋ AssignJobToPlayersRPC() ํจ์๋ฅผ ํธ์ถํ๋ค.
ย ย ย ย ย ย ย ย ย ย photonView.RPC("RandomSpawnPlayersRPC", RpcTarget.All, pv.ViewID);
ย ย ย ย ย ย ย ย ย ย print("RPC ํธ์ถ ํ: " + pv.transform.position);
ย ย ย ย ย ย ย ย }
ย ย ย ย ย ย }
ย ย }
ย ย public void ExitInGameLobbyRoom(){
ย ย ย ย print("Ext In Game Lobby Csnene");
ย ย ย ย
ย ย ย ย // ๊ฒ์ ๋ฐฉ ๋ ๋๊ธฐ
ย ย ย ย PhotonNetwork.LeaveRoom();
ย ย ย ย // ์ฌ ์ ํ
ย ย ย ย SceneManager.LoadScene("MenuScene");
ย ย }
}
์์ ์ฝ๋๋ ์ ๋ํฐ์์ ํฌํค์ ํ์ฉํ์ฌ ๋ฉํฐํ๋ ์ด ๊ฒ์์ ํ๋ ์ฝ๋์
๋๋ค.
์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ, ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ง์คํฐ ํด๋ผ์ด์ธํธ๊ฐ ๊ฒ์ ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด, ๋ง์คํฐ ํด๋ผ์ด์ธํธ๋ฅผ ์ ์ธํ ๋๋จธ์ง ํ๋ ์ด์ด๋ค์ ์์น๋ฅผ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋์ํต๋๋ค.
print ๋ก ์ถ๋ ฅ์ ํ๋ฉด, ๋ง์คํฐ ํด๋ผ์ด์ธํธ๋ RPC ํต์ ํ์ ๋ฐ๋ ์์น ๊ฐ์ด ๋์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ค์ ๋ก ์ ๋ํฐ์์ ๋ณด๋ฉด, ๋ง์คํฐ ํด๋ผ์ด์ธํธ๋ง ์์น๊ฐ ๋ฐ๋์ง ์์ต๋๋ค.
ํน์ ํผ์ ๊ฐ๋ฐํ์๋์? ์ ๋ ์ด๋ณด๊ธดํ๋ฐ ์ค๋ฅ๋ ๋ถ๋ถ์ด ๋ง์ด๋ณด์ฌ์ ์ฝ๋๋ง๋ณด๊ณ ๋ ๋ชจ๋ฅด๊ฒ ์ด์
์ด๋ป๊ฒ ์๋ ค๋๋ฆฌ๋ฉด ๋ ๊น์? ใ ใ / ์ค๋ฅ๋ ์๋ฌ๋ ๋ฐ์ํ์ง๋ ์๋๋ฐ, ์ ์์ ์ผ๋ก ์๋ํ์ง ์์์ ๋๋ฌด ํ๋ญ๋๋ค ใ ใ
์ ๊ฐ ์ํ๋ ๋๋ก ์๋ํ์ง ์์์ ๋๋ฌด ํ๋ญ๋๋ค ใ ใ
์ค๋ฅ๋ ์์๊ฑด๋ฐ.. ๊ทธ๋ฅ ์ด์ํ๋ถ๋ถ์ด ์ข ๋ณด์ฌ์, ์ธํ ๋ฌธ์ ๋ ์กฐ๊ธ ๋ง์๊ฑฐ๊ฐ๊ณ , ์ฌ์ค ์ ํด์ฌ๋ฅผ ์์ฐ๊ณ ํฌํค ๋ทฐ ID๋ก ์ด๋ฌ๋๊ฑด์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ , RPC๋ฅผ ์ฐ๋ ์ด์ ๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ ์ธ๊ฑฐ๋ฉด ๊ฒ์ฆ์ ์ ์ํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ , ๋ก๋น๋ ์ธ๊ฒ์ ๋ก๋น๋ฅผ ์ ๋ถ๋ฆฌํ์ง๋ ๋ชจ๋ฅด๊ฒ ๊ณ Transform[]spawn์ ์ ์ ๋ ๊ฒ ํ ๋นํ์ง๋ ๋ชจ๋ฅด๊ฒ ์ด์. ๊ทธ๋ฅ ์ ๋ ๊ณ ์๋ ์๋์ง๋ง ์คํ์ผ์ด ๋๋ฌด ์์ ๊ฐ๋ ค์ ๋ญ๋ผ ๋ง์๋๋ฆด์๊ฐ ์์ด์. ์ฃผ๋ณ์ ๋ณด๊ณ ์๋ ค์ค๋ถ์์ผ๋ฉด ๊ทธ๋ฐ๋ถํํ ๋ฌผ์ด๋ณด๊ฑฐ๋, ํฌํค ์์ ๋ฅผ ์ฐพ์์ ๋์ด๋ฒ ๋๋ฆฌ๊ณ ํ๋๊ฒ ๋ ์ข์๊ฑฐ๊ฐ์์
๋ฌผ๋ก ์ ๊ฐ ๋ชจ๋ฅด๊ฒ ๋ค ํ๋ถ๋ถ๋ค์ด ์ ๋ถ ๋ฌธ์ ๊ฐ ์๋ ์ฝ๋ ์ผ์๋๋ ์๋๋ฐ, ์๋์ด ์ํ๋๊น ๋ง์๋๋ฆฌ๋๊ฑฐ์์. ์ค๋ฅ๊ฐ ์์ด ์๋์ด์๋๋๊ฑด ์๋ฒ์๊ฐ์ด๋ ๋๊ธฐํ๋ ๋ญ๋ ๋ฌธ์ ๊ฐ ์๋ค๋๊ฑด๋ฐ, ์กฐ์ธํ๋์ฌ๋์ด ์ฝ๋ ์คํ์ผ์ด ์์ ๋ฌ๋ผ๋ฒ๋ฆฌ๋ฉด ๋ญ ๋ง์๋๋ฆด์ ์๋๊ฒ ์์ด์์
ํฌํค ์ฌ๊ธฐ๊ฐ์ ๋ฌผ์ด๋ณด๋ฉด ์น์ ํ ์๋ ค์ค
https://discord.gg/w3vUkT7a
์ผ๋จ find์ฐ๋๋ฒ๋ฆ๋ถํฐ ๋ฒ๋ ค๋ผ