버그 해결을 위한 모든 질문을 던져
0 votes
132 views

PUN2 로 네트워크를 구성중인데요

두명의 플레이어가 방에 있으면 먼저 방을 만든 마스터 클라이언트는

적을 떄리면 다른 플레이어에게 적이 날라가는게 보이는데

마스터 클라이언트가 아닌 두번째로 방에 들어온 플레이어가 적을 때리면

날라갈뻔하다가 다시 제자리로 돌아오면서 마스터 클라이언트 화면에는 아예

그 적의 움직임이 변하지 않습니다. 결론은 마스터 클라이언트 외에 플레이어들이

적의 포지션,로테이션 을 바꿀수가 없다는 것입니다.

이거로 2틀째 삽질중인데 미치겠네요;;; 도와주세요 ㅜㅜ

아래에 코드 첨부해요~
 

 

-------------------------------------------------------------------------------------

코드 수정을 해서 다시 올려드립니다

우선 플레이어에 달려있는 공격콜라이더오브젝트에 있는 스크립트입니다.

public bool Hit = false;
private PhotonView view;

private void Awake()
{
view = GetComponent<PhotonView>();
}

void OnTriggerStay(Collider other)
{
if (other.gameObject.tag == "EnemyCube" && Hit)
{
view.RPC("HitTarget", RpcTarget.MasterClient, other);
}
}

void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "EnemyCube" && Hit)
{
view.RPC("HitTarget", RpcTarget.MasterClient, other);
}
}

[PunRPC]
void HitTarget(Collider other)
{
GameObject CloneEnemy = other.gameObject;

Vector3 hitDir = Vector3.Normalize(
CloneEnemy.transform.position - transform.position);

CloneEnemy.GetComponent<EnemyCube>().fireDir = hitDir;
CloneEnemy.GetComponent<EnemyCube>().Fire = true;
}




그 다음은 적이 날라가는 코드입니다.

[HideInInspector]
public bool Fire = false;

private float fireSpeed = 20.0f;

private float rotSpeed = 5000.0f;

private Transform tr;

[HideInInspector]
public Vector3 fireDir;

private PhotonView view;

void Awake()
{
tr = GetComponent<Transform>();
view = GetComponent<PhotonView>();
}

void Update()
{
if(Fire)
{
view.RPC("FlyAway", RpcTarget.MasterClient);
}
}

[PunRPC]
void FlyAway()
{
tr.position += new Vector3(fireDir.x, fireDir.y + 0.1f, fireDir.z) * Time.deltaTime * fireSpeed;
tr.Rotate(fireDir * Time.deltaTime * rotSpeed, Space.World);
}

asked (2 point)
수정됨 , 132 views

2 answers

0 votes
위치 동기화가 안되는 것이라면 PhotonNetwork.Instantiate 으로 생성한 포톤 네트워크 프리팹에 PhotonTransform View 가 추가 되어있는지 확인해보세요
answered (4 point)
네. 그렇게 되있는데 안되네요;;;;;;
0 votes
GameObject를 넘기는게 아니고 Network Id를 넘기셔야되고,

저런식으로는 적이 날아갈때 동기화가 떨리거나 이상하게 될껍니다.

피격포인트, 날아가는 힘, 도착포인트등을 인자로 넘기고 날아가는 모션은 클라에서 각자 처리하도록 해야 자연스럽게 나올꺼예요.
answered (20 point)
답변 감사합니다.

물리 리지드바디 같은거 다뺘고

충돌체크 직접 구현해서 해결했습니다.

그리고 RPC 에는 아이디 넘겨줘서 찾아서 하니 되네요

도움 감사합니다

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

186 질문
289 answers
314 댓글
307 users