목차
비밀번호 생성하기
알고리즘
포톤에는 비밀번호 기능이 따로 없어서 하나의 아이디어를 쓴다고 함!
=> 방장이 방 생성하는 과정에서, 방 이름을 (방 이름+비밀번호)로 해서 만든다.
=> 하지만 생성된 목록에는 (방 이름)만 뜨게 한다.
=> 방에 입장하고 싶은 사람은 그 버튼을 눌러본다
=> 하지만 입장 되지 않는다. 보이는건 방 이름 뿐이지만, (방 이름+비밀번호) 로 만들었기 때문에
=> 진짜 방이름은 (방 이름+비밀번호) 이다.
즉, 사실은 방 이름(방 이름 + 비밀번호 )으로만 입장하는거지만
방 이름과 비밀번호 까지 둘 다 쳐서 들어가야하는것 같이 느껴지는 원리 이다.
LobbyManager.cs ---->
inputPassword 하나 생성
hashTable 을 통해 room_name 정보와, password 를 추가
PhotonNetwork.CreateRoom 에 방 이름과 방 비밀번호를 같이 해서 입력하자
(방 이름 + 비밀번호) 가 방 이름인 방을 만들겠다는 말이다!
ex) 방 이름 = 들어와, 비밀번호 = 123 입력하면,
만드는 방 이름 => 들어와123
방이름 InputField 복붙해서 Password InputField 하나 더 만들어 준다.
InputPassword InputFlied 클릭해서,
ContentType 에 integerNumber 를 선택해서 숫자만 나오게 하자
LobbyManager.cs 에 드래그 앤 드랍 하자
방 이름에 room_name 만 나오게 하기
근데 이렇게 하게 되면, 그냥 당연히
방 목록에 방 이름에 (방 이름 +방 비번)까지 보이게 됨
이렇게 만들었었기 때문에.
RoomItem.cs 에서
이렇게 첫 매개변수를, 커스텀 (room_name) 으로 바꾸자.
정보를 설정 할 때, 방 이름을 (room_name + password) 이 아닌 room_name 으로만 할거니까!
근데 이렇게 하고 실행 하면, 이름이 안나오네,,?
설정을 해줘야 하는게 있음
LobbyManager.cs --->
CreateRoom() ->
키 값을 추가 해준다.
위처럼 추가한 키값을 여기에 넣어줘야 함
그리고 LobbyManager.cs 에
JoinRoom 할 때도 RoomName 과 inputPassword 와 같이 합쳐져서 들어가게 한다.
이제 이렇게 하면,
방 이름 : 들어와
방 비번: 123
이렇게 하면
방 이름 (들어와) 으로만 방이 생성된다.
하지만, 이제 누군가가 생성된 방에 들어 갈 때 방이름만 넣고 들어가게되면
들어가지 못하게 된다.
방 비번까지 넣고 들어가야 하기 때문에
소환하는 위치 다양하게 만들기
소환 될 때, 여기 위치에 소환되게.
처음에 들어간 PhotonView 의 View ID 는 1000번 째임
1001번이 만든 총알은 1002번이 됨
두번째에 들어간 애는 2000번째
이렇게 해버리면 자동으로 View ID 가 잡힘
모든 피씨가 방장이 GameManager 를 Instantiate 한거로 인식함
(참고) 누가 방에 입장했을 때, 누가 왔는지 뜨게 하는 방법
GameManager.cs------>
에서 MonoBehaviourPunCallbacks 로 바꾸고,
이런 것도 있음
// 방에 플레이어가 참여 했을 때 호출해주는 함수
public override void OnPlayerEnteredRoom(Player newPlayer)
{
base.OnPlayerEnteredRoom(newPlayer);
print(newPlayer.NickName + "님이 방에 들어왔습니다.");
}
미션
인원수만큼 360 도에서 나눈 후, 5만큼 떨어진
그 지점을 구하기
GameManager.cs ---->
게임매니져 Start 부분에서,
위처럼 작성하면, 피자 같이 만들 수 있다.
위에서 spawnPos = new Vector3[4] 라고 해둔건, 플레이할 때 예시로 만든건데
원래는 maxPlayer 로 해두면 됨.
턴 제 만들기
게임에 들어가서, MaxPlayer 가 다 들어오면 총 쏘게 하는것도 많음 게임중에.
이번에 턴제로 하는 룰을 만들어 보자
내 턴이 아니면, return 되게
PlayerFire.cs ---->
내 턴인지 확인 하는 bool 형 코드를 작성
GamaManager 에 PhotonView 추가 하자.
GameManager.cs---->
player 가 들어오면 들어온 player의 photonView 를 담는다.
GameManager 를 Singleton 으로 만들자
방장이 직접 중앙에서 관리하는 GameManager 가 되는거임
PlayerMove 에서 photonView 를 GameManager 한테 주는거임.
중앙에서 관리하려고
GamaManager 에서 일 처리되는건 A의 PC 에서만 되는거임.
다른 PC인 B, C 에서는 방장인 A가 처리해서 알려주는 것뿐
방장이 없다면?
방장은 없을 수가 없음, 방장이 나가면 방장이 넘겨지기 때문
GameManager.cs 로 와서
방장이 아니면 함수를 나가게 한다.
방장이면,
이전 차례였던 애는 총을 쏘지 못하게 한다.
그 후, 아까 players 리스트에 넣어놓았던 player 를 부른다.
그리고, 리스트 수만큼 turnIdx 가 다 차고 나면
그 다음 리스트는 없으니까 % 값으로 해서
다시 1번부터 되게 해놓은거임!
저기 RPC 에 " " 된 곳은 SetMyTurn 을 넣을거임
아까 PlayerFire 에서 만든 함수.
bool isMyTurn 을 키고 끄는 함수임
참고로, PlayerFire.cs 에 isMyTurn 이 false 이면 Update() 에서 return 되게 시켜놨음
이거 PunRPC 해주기
이것도 PunRPC 해주기
왼쪽 컨트롤키 누르면, 방장한테만 Change 되게 해준거임!
방장 => 그 다음 들어온 사람 => 그 다음 들어온 사람 => ... => 마지막 인원
이 순으로, 한 발씩 발사하면 Change() 함수가 불리게 되는데,
이 함수는 불리게 되면 다음 사람이 쏠 수 있게 해주는거다.
근데 저길 보면 RpcTarget.MasterClient 한테만 가게 되어있다.
턴을 각자가 돌리면 엄청 힘들기 때문에
하지만, 한명이 돌리게 한거임