Player 인스턴스 생성하기
GameManager의 Start()에서 player를 생성한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | private void Start() { Instance = this; if(playerPrefab == null) { Debug.LogError("<Color=Red><a>Missing</a></Color> playerPrefab Reference. Please set it up in GameObject 'Game Manager'", this); } else { if (PlayerManager.LocalPlayerInstance == null) { Debug.Log("We are Instantiating LocalPlayer from " + SceneManager.GetActiveScene().name); PhotonNetwork.Instantiate(this.playerPrefab.name, new Vector3(0f, 5f, 0f), Quaternion.identity, 0); } else { Debug.Log("Ignoring scene load for " + SceneManager.GetActiveScene().name); } } } | cs |
PhotonNetwork.Instantiate를 이용하여 네트워크 객체를 스폰함.
(https://doc.photonengine.com/ko-kr/pun/current/gameplay/instantiation)
플레이어 인스턴스 파악
PlayerManager에 Instance를 만들어 플레이어가 생성되면 Instance를 설정해준다.
1 2 3 4 5 6 7 8 9 10 11 12 | public static GameObject LocalPlayerInstance; private void Awake() { if(photonView.isMine) { PlayerManager.LocalPlayerInstance = this.gameObject; } DontDestroyOnLoad(this.gameObject); ... } | cs |
그리고 위와 같이 인스턴스를 체크하여(위의 생성코드 11번째줄 - if (PlayerManager.LocalPlayerInstance == null))
없을 경우에만 생성해주도록 한다.
경기장 밖에 있을때 플레이어 위치 관리
만약 플레이어가 나가서 경기장이 줄어들었다면 내 캐릭터가 없어진 바닥위에 있을수도 있을것이다.
이것을 방지하기 위해서 아래와 같이 바닥이 없으면 시작점으로 이동하게 한다.
1 2 3 4 5 6 7 | private void OnLevelWasLoaded(int level) { if(!Physics.Raycast(transform.position, -Vector3.up, 5f)) { transform.position = new Vector3(0f, 5f, 0f); } } | cs |
'프로그래밍 공부 > Photon' 카테고리의 다른 글
10. 튜토리얼 문제 해결 (0) | 2018.08.07 |
---|---|
9. 플레이어 UI 프리팹 (0) | 2018.08.07 |
7. 네트워킹을 위한 플레이어 변경 (0) | 2018.08.07 |
5. 플레이어 만들기 / 6. 플레이어 카메라 동작 (0) | 2018.08.07 |
3. 게임 씬 / 4. 게임 매니저와 레벨 (0) | 2018.08.06 |