안녕하세요 선배님들, 지금 포톤으로로 개발중입니다.
플레이어가 방에 입장 후 큐브 오브젝트에 가까이가서 들기 버튼을 누르면 큐브가 위로 올라가서 플레이어를 따라 다니는 구성인대요
플레이어A(마스터클라이언트O)가 큐브를 들면 플레이어B(마스터클라이언트X) 화면에서는 큐브를 들고있는 액션이 나오는대
플레이어B(마스터클라이언트X)가 큐브를 들면 플레이어A(마스터클라이언트O) 화면에서는 큐브를 들고있는 액션이 나오지 않고
위치값도 동기화가 되지 않는거 같습니다. 큐브를 내려 놓으면 제자리로 훅 날라가 버립니다 ㅜㅜ.
플레이어 A,B,큐브 모두 포톤뷰와 포톤 트랜스폼뷰가 달려있는 상태이구요.
코드입니다 살려주세요 ㅜㅜ
void Update()
{
if (pv.IsMine)
{
if (tagIn)
{
RayItem();
}
if (isTagItem)
{
if (_ItemCtr. Item != null)
{
pv.RPC("TagItemMove", RpcTarget.AllBuffered);
}
}
}
}
public void RayItem()
{
Debug.DrawRay(this.gameObject.transform.position, this.gameObject.transform.forward * 15, Color.red, 10f);
if (Physics.Raycast(this.gameObject.transform.position, this.gameObject.transform.forward, out hit, distance))
{
if (hit.collider.tag == "Item")
{
tagIn = false;
isItem = true;
if (isPickUp == true)
{
pv.RPC("ItemRayCastPhoton", RpcTarget.All);
}
}
else
{
isItem = false;
Item = null;
tagIn = true;
}
}
}
[PunRPC]
public void ItemRayCastPhoton()
{
Item = hit.collider.gameObject;
isItem = false;
isTagItem = true;
}
[PunRPC]
public void TagItemMove()
{
if (!pv.IsMine)
{
return;
}
_ItemCtr. Item.transform.position = _ItemCtr. ItemPos02.transform.position;
_ItemCtr. Item.transform.rotation = Quaternion.Euler(_ItemCtr.player.transform.rotation.x, _ItemCtr.player.transform.rotation.y, _ItemCtr.player.transform.rotation.z);
GamRay.transform.localRotation = Quaternion.Euler(-90, 0, 0);
_GameManager.playerClone222.GetComponent<Animator>().Play("PickUp");
}
포톤뷰와 트랜스폼뷰가 달려있으면 위치값과 회전값은 동기화가 되는걸로 알고있었는대 뭐가 문제인지 잘 모르겠습니다.
이 댓글은 게시물 작성자가 삭제하였습니다.
혼자 서든처럼 온라인FPS만드느라 개고생했는데 2년전이라 기억이안남
기억을 되살려 보세요
첫 댓글에 답글을 달다가 실수로 지워 버렸습니다. 고의가 아닙니다ㅠㅠ
큐브 오브젝트를 먹을때(?) 소유권을 받아오세요. 예를 들어서 큐브가 마스터꺼인데 다른 플레이어가 그걸 움직이게 하려해도 소유주인 마스터 클라이언트의 큐브 트랜스폼을 기준으로 동기화 되기 때문에 소유권을 받아온다음에 모든 클라이언트에 setparent할 부모와 포지션 알려주고 실행하면 될거에요
소유권이없어서 내려놓으면 원위치가 되는거 같네요 소유주의 큐브는 0,0,0 인데 그걸 아무리 움직여도 움직임이 끝나면 다시 0,0,0으로 되돌아가요 소유권을 가져오면 자신이 움직이는데로 동기화가 되니까, 소유권만 가져오게 하면될듯요
하.. 감사합니다 소유권 이전 시키니깐 잘 되네요 ㅠㅠ 복 받으세요