- 포톤과 유니티를 활용한 블라인드 오목입니다.
- 블라인드 오목이므로, 흑돌 백돌 모두 승리규칙 외의 규칙을 정해두지 않습니다.
- 싱글톤 패턴, 오브젝트 풀링 적용
- 오목판은 Tilemap으로 구현
- Tilemap collider 2D Component를 추가해서 마우스와 cell 좌표를 통해 오목알을 착수할 수 있도록 구현
- 닉네임 설정, 로비 입장, 방 입장, 공지, 채팅 구현
- 게임시작(솔로 안됨)
- 오목알 바꾸기 구현
- 상대방이 놓는 오목알도 내 오목알 색깔과 같게 배치(블라인드 오목)
- 오목의 승패가 결정된 후 상대방이 놓은 오목알과 내가 놓은 오목알을 보여줌
- 클라이언트 간 동기화
![](https://private-user-images.githubusercontent.com/105009308/324740403-eeaba493-74b1-4f94-a2c8-d9e2f3639ba5.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIwMzM0ODAsIm5iZiI6MTcyMjAzMzE4MCwicGF0aCI6Ii8xMDUwMDkzMDgvMzI0NzQwNDAzLWVlYWJhNDkzLTc0YjEtNGY5NC1hMmM4LWQ5ZTJmMzYzOWJhNS5naWY_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyNlQyMjMzMDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02MTI1MWRhZmJhNzI3YmZlM2M0MzdkMWZiZTAwMDg2MzU4NjdlYjdiYmFlMGE3OWVmM2JhOTNkYmE1MWIxNjg2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.wzCR_VnHaRHIe6tPteuYfD0VBkJ08UpsC6nZU1xRTWM)
- 닉네임을 입력하고 연결하기 클릭 시 포톤 네트워크에 연결
- PhotonNetwork.ConnectUsingSettings()으로 서버와 사용자를 연결
- InputText에 작성된 Text를 사용자 닉네임으로 저장
![](https://private-user-images.githubusercontent.com/105009308/324739592-57a8a04f-7c6b-46b0-895f-3a4cc3256dd3.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIwMzM0ODAsIm5iZiI6MTcyMjAzMzE4MCwicGF0aCI6Ii8xMDUwMDkzMDgvMzI0NzM5NTkyLTU3YThhMDRmLTdjNmItNDZiMC04OTVmLTNhNGNjMzI1NmRkMy5naWY_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyNlQyMjMzMDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT04MjNkOTliOGMxNTQxOGNjZGE0NGUwNjdhNDZmZDg0MTZjYjgzZGRhZDQ4NjNlMGUyODBjNDgxYjcwNjc2YmQwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.iFamwC64p_JhbhWNmHH7M3XJd1xnXBGSANl6fORlYa0)
- 방 이름을 작성하고 방 만들기를 누르면 방 생성
- RoomOptions를 이용해 방 인원 2명으로 제한 등 방 제한 옵션 생성
- RoomOptions의 GameState를 통해 게임중인지 대기중인지 표시
![](https://private-user-images.githubusercontent.com/105009308/324739599-37bfbd96-224d-499d-bd5c-dc6115593933.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIwMzM0ODAsIm5iZiI6MTcyMjAzMzE4MCwicGF0aCI6Ii8xMDUwMDkzMDgvMzI0NzM5NTk5LTM3YmZiZDk2LTIyNGQtNDk5ZC1iZDVjLWRjNjExNTU5MzkzMy5naWY_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyNlQyMjMzMDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03OTJjYjAzZjY1ZTQ1Mzc5ZjQyMDYyYWNkMWJiNDEzMDViMTk4ZmZjMjc2NWMxMjAwOTE3NDI3ZmNhZjJkYjdiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.WFu7yUSiVOxtIk4gzb7nWARr2fQt2SHfwBzEuOEzeeM)
- 방에 입장하면 OnPlaerEnteredRoom함수를 재정의하여 누가 참가했는지 알림
- RPC를 통해 알림창 동기화
- ScrollView를 통해 채팅창 구현
- 채팅을 보낼 때마다 RPC를 호출을 통해 동기화
![](https://private-user-images.githubusercontent.com/105009308/324739580-125a8626-aabe-4238-87b9-68a816360dc0.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIwMzM0ODAsIm5iZiI6MTcyMjAzMzE4MCwicGF0aCI6Ii8xMDUwMDkzMDgvMzI0NzM5NTgwLTEyNWE4NjI2LWFhYmUtNDIzOC04N2I5LTY4YTgxNjM2MGRjMC5naWY_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyNlQyMjMzMDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xOGI1MmMxMGU5OThlYTA4OTk3ODZiY2NjNWY1NGRkMDYzZDEzOTNhZjlkMmU0MjVlNzdiZDNjNDQxYjJiMTc3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.0xmuYvk8xyRpiwM75jCRqppa8sA4G1hrToRdbNFmFY0)
- (IsMasterClient() && PhotonNetwork.CurrentRoom.PlayerCount != 1) 제약으로 방장이 아닐 때 또는 1명일 때 게임 시작을 할 수 없도록 만듬
- 돌 바꾸기 또한 같은 제약으로 방장만 돌을 바꿀 수 있음
![](https://private-user-images.githubusercontent.com/105009308/324739331-c573ffc3-ec0a-498f-b1a8-94515aff338e.gif?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIwMzM0ODAsIm5iZiI6MTcyMjAzMzE4MCwicGF0aCI6Ii8xMDUwMDkzMDgvMzI0NzM5MzMxLWM1NzNmZmMzLWVjMGEtNDk4Zi1iMWE4LTk0NTE1YWZmMzM4ZS5naWY_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzI2JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyNlQyMjMzMDBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jNTVhNjg3MGUxZDFjOTM5MjdmNzM1M2E0NGZjYzkxOGJmOTQxYTY3NjJlYjdiMzlmZTdlZjQ3MWRlYTZmYjFlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.KiRXukKhipLco9tlG_GmREK05J2tmHjxO3rbF0iPcm8)
- 보드판을 타일맵으로 만들고, 마우스 위치를 월드 좌표로 변환하여 타일맵에 마우스가 올라가있는지 판단
- 착수 시 해당 셀의 이미지 활성화 및 본인의 컬러로 설정 후 턴 변경 [RPC 동기화]
- 블라인드 오목으로 상대방이 놓은 돌도 본인의 돌로 표시
- 매 클릭 시 승리 조건 검사 함수 동작 5개의 연속된 돌이 있는 경우 승리
- 누군가 승리할 경우 상대방과 자신이 놓은 돌을 표시