| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 프로그래밍
- loop
- 오류
- 파이썬
- 기초
- dynamic
- DP
- String
- 백준
- Unreal Engine 5
- github
- python
- guide
- Basic
- W3Schools
- C#
- 시작해요 언리얼 2022
- dfs
- 재귀
- 문제풀이
- Algorithm
- Material
- parameter
- w3school
- UE5
- c++
- Tutorial
- Class
- Unity
- Programming
- Today
- Total
목록photon (4)
행복한 개구리
서론 더보기 우선 팀프의 서버와 클라 교류 구조는 다음 그림과 같다 하나의 서버스크립트가 DontDestroy되어 시작하면 앱이 끝날때까지 파괴되지 않으며 서버스크립트와 각 씬의 씬매니저들을 싱글턴을 통해 데이터를 주고받으며 처리한다. 씬매니저는 싱글턴이 아니다. 씬의 전반적인 처리를 맡은 스크립트이다. 팀프로젝트의 씬전환이 비동기방식으로 바뀌며 구조가 꽤 바뀌었는데 이때문에 각 씬의 매니저들이 Awake하며 초기화하던 작업을 서버스크립트의 비동기 씬전환이 되면 초기화하는 방식으로 바뀌었다. 이 과정에서 캐릭터의 위치도 기존 씬매니저가 할당해주던 방식에서 '씬매니저 - 싱글턴 - 서버스크립트'로 전달하여 자신의 캐릭터를 생성해야하는 상황이었다. 구조에 맞게 서버스크립트로 캐릭터를 생성할 위치를 전달하여 ..
결론) Player.CustomProperties["Key"]형식으로 값을 받아오는 것은 OnPlayerPropertiesUpdate콜백 메서드가 실행된 이후(서버에 등록이 완료된 시점)부터 정상적으로 사용 가능하다. 포톤의 커스텀프로퍼티를 사용하는데 Set을 했는데도 자꾸 Null이 나서 커스텀프로퍼티의 사용법을 잘못 알고있는듯 하여 다시 테스트해보았다. Set을 하자마자 확인하면 Null이 나오길래 콜백메서드에도 사용을 해보고 콜백 이후에는 값이 바뀌는지도 함께 테스트해보았다. 예상했던대로 포톤의 CustomProperty는 할당을 받은 뒤 포톤서버에서 수정이 완료되어야 해당 값을 가져올 수 있던 것이다. SetTreasureHunter부분에서 Null값이 나온 이유는 서버에서 수정이 되지 않은 상태..
우선 말하지만, Photon서버에서 트래픽이 많아 데이터를 받는 시간이 지연되는 현상은 전송하는 데이터양을 줄이는 수 밖에는 어찌 해결할 수 없다. => 경험상 인디게임에서는 어지간하면 트래픽지연은 발생하지 않는다. 선 결론을 내자면 1. SendRate와 SerializationRate설정 문제였다. 둘의 수치를 60/30이 아닌 30/60으로 적어둬서 서버로 전송되는 데이터는 적은데 동기화는 그 두배만큼 자주하려 하니 발생한 문제다. 2. PhotonView가 동기화하는 오브젝트가 너무 많아서이다. 팀프로젝트에선 부모오브젝트에 포톤뷰를 하나 넣어두고 동기화를 시켰는데, 전송, 수신주기가 알맞게 설정되어도 렉이 완전히 해결되지 않았다. 부모오브젝트 하위에 오브젝트가 너무 많거나 위치가 변하는 요소가 너..
제목 그대로 Photon을 실행하면 마스터가 PhotonNetwork.Instantiate를 통해 서버에 생성하는 객체를 클라쪽에 동기화가 되지 않는 이슈가 있었다. 이게 골치아팠던 점이 확률적으로 정상일 때도 있고 위 이슈가 발생할 때도 있어서 원인을 찾기 어려웠다. 하지만 유심히 살펴보니 마스터의 씬이 먼저 로드되고 그 다음 클라이언트가 넘어가면 클라이언트에게 맵이 보이지 않았고, 반대로 클라이언트가 먼저 씬 로드를 마치면 나중에 씬이 넘어온 마스터의 객체들을 볼 수 있었다. =>따라서 같은씬에 없을 경우 먼저 들어온 클라이언트가 생성한 후에 다른 클라이언트가 들어오면 나중에 들어온 클라이언트는 먼저 들어온 클라이언트의 객체들을 동기화받지 못한다. 이를 활용하여 RPC로 클라이언트가 모두 씬전환을 마..