일단 내가 만드려는게 로비에서 방을 생성해서 들어가면
콘서트장이 나와
거기에서 이제 영상을 틀건데 처음에 바로 진입한애는 영상이 처음부터 나오고
이 방에 나중에 진입한애는 그 흘러간 시간만큼 변수를 받아서 영상을 그 시간 지난만큼 후에부터 시작하게
말 그대로 영상 싱크를 맞추는 개념? 인건데
OnPhotonSerializeView 이 함수를 써서 플레이어 객체에서 포톤뷰 스크립트써서 시간 데이터를 주고 받아야 하는거야?
아니면 별도로 빈오브젝트에 타이머 스크립트만 만들어서
영상을 틀어주는 스크립트에 변수를 전달해줘야 하는거야?
순서를 모르겠어..
마스터와 마스터가 아닌 애들 전부 시작시간 주고받고 가장 빠른사람걸 메인으로 쓰면 될 것 같은데 뷰컴포넌트가 필요했나? 원격함수로 다 동기화시키는거...이름이 갑자기 생각이 안나네
게임씬이 아니고 룸이면 맞네, 마스터가 가장 빠르겠네. 마스터꺼 재생시간 가져오면 되자너.
이제 공부하고 있어서 마스터꺼 가져온다는 말이 포톤이 제공하는 함수중에 마스터클라이언트꺼 변수 받아오는게 있는거임? 룸 들어갈때 캐릭터오브젝트 프리팹화된걸 가져오는데 거기에다 스크립트 붙이면 되나.. 일단 영상 재생하는 오브젝트랑 스크립트는 캐릭터랑은 별개로 해놨음
아 그리고 로비씬이랑 로비에서 방 생성한 후에 콘서트장 나오는 씬 따로임
마스터 소유의 객체 RoomData 만들어서 IObservable 인터페이스 달고 영상 플레이타임을 마스터가 갱신하게 하셈. 클라이언트들은 접속 시 RoomData에서 현재 플레이타임 받아와서 영상 그 시간대부터 시작시키면 됨.
아.. 내가 빡대가린가.. 마스터 소유의 객체를 만들라는게 어케하는지 모르겠음. 빈오브젝트 하나 만들어서 그거에 if(PhotonNetwork.IsMasterClient)) 이거 사용해서 변수들 제어 하라는거야?
맞습니더
아 그리고 좀 알아봤는데 그냥 계속 갱신하지 말고, OnPlayerEnteredRoom이라고, MonobehaviourPunCallbacks 상속받으면 override 함수로 OnPlayerEnteredRoom이라는 함수가 있음. 파라미터로 접속한 플레이어 받아오는데, 걔한테 영상 진행시간 보내주는 작업해도 괜찮음
영상 따로 제어하는 매니저 있으면 걔한테 이 기능을 때려박으면 되겠다.
정리-현재 로비에서 룸(메인씬)에 진입하면 콘서트장이 나오고 영상을 재생하는 오브젝트와 스크립트 함수는 이미 존재한다. 하지만 나중에 룸에 진입하는 유저와 처음부터 진입한 유저가 같은 영상(싱크맞추기)을 보게 하기 위해 시간을 체크하는 오브젝트를 따로 만들어 PhotonNetwork.IsMasterClient를 이용. update에서 변수+=time.deltatime으로 진행시간을 계속 체크한다. 나중에 진입하는 유저는 이 진행시간 변수를 영상 재생하는곳으로 가져와서 해당 시간의 영상을 재생하게 한다.
뒤에 말해준 저 기능 함수를 시간체크하는곳에 함수로 만들어서 새로온 유저에게 쏴주면 받는것을 어찌해야 하지..
받는거는 간단하게 SetPlaytime(float time) 함수 만들고, 함수 위에다가 [PunRPC] 달아주셈. 그리고 내가 위에 써놓은 OnPlayerEnteredRoom 함수 내에 photonView.RPC("SetPlaytime", newPlayer, playtime); 해버리셈.
아.. 미안하다 분명히 다 가르쳐준거 같은데 내가 적용을 못하네 아씨.. 개빡친다 영상재생 함수가 이미 있는 에셋을 쓰는거라 머리 터질거 같네 합치려니깐
https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=54136