퍼즐의 힌트를 시작할 때, 힌트를 보고 정보를 말해주어야하는 쪽은 교수측 플레이어지만, 그 트리거를 작동시키는것은 학생측인것이 불합리하다고 생각하여 퍼즐의 힌트를 받는 방법을 바꾸어주었습니다.
석탑에 교수측 플레이어가 상호작용을 할 경우, 퍼즐이 활성화되며 힌트인 촛불이 작동하도록 변경해주었습니다.
석탑의 경우, 작동시 Rpc를 보내는 역할만 하게 됩니다.
public class PuzzleStartObject : MonoBehaviour, IInteractable
{
public string GetInteractText()
{
return "만져보기";
}
public void Interact()
{
GameManager.Instance.repeater.PuzzleStartRequestServerRpc();
}
}
퍼즐 정보를 클라이언트에게 보내는 클래스입니다.
public class NetworkPuzzleRepeater : NetworkBehaviour
{
private int curPuzzleIndex;
//...생략
[ServerRpc(RequireOwnership = false)]
public void PuzzleClearServerRpc(int puzzleIndex)
{
PuzzleClearClientRpc(puzzleIndex);
}
[ClientRpc]
public void PuzzleClearClientRpc(int puzzleIndex)
{
PuzzleManager.Instance.subPuzzleList[puzzleIndex].SetClearByNetwork();
}
[ServerRpc(RequireOwnership = false)]
public void PuzzleStartRequestServerRpc()
{
StartPuzzleClientRpc();
}
[ClientRpc]
public void StartPuzzleClientRpc()
{
if (GameManager.Instance.networkGameManager.ProfessorId == NetworkManager.Singleton.LocalClientId) return;
PuzzleManager.Instance.EnterPuzzlePoint();
}
[ServerRpc(RequireOwnership = false)]
public void PuzzleFailServerRpc()
{
PuzzleFailClientRpc();
}
[ClientRpc]
public void PuzzleFailClientRpc()
{
if (GameManager.Instance.networkGameManager.StudentId == NetworkManager.Singleton.LocalClientId) return;
PuzzleManager.Instance.subPuzzleList[curPuzzleIndex].FailPuzzleByNetwork();
}
}
퍼즐 작동의 경우, 팀원이 만든 내용이기에 해당 내용을 수정하지 않는 쪽으로 구현해주었습니다.
트리거가 작동되면 스크립트를 활성화 하면서 퍼즐이 진행되는 방식이기에, 시작 트리거는 교수측에서 작동하지만 퍼즐의 정답 생성은 학생측에서 진행하는 형태로 구현해주었습니다.
이후, 퍼즐이 실패할경우 다시 힌트를 받기위해 퍼즐을 초기화 해줄 필요가 있었으며, 이를 위해 실패시 작동할 Rpc도 추가해주었습니다.
'내일배움캠프 > 프로젝트' 카테고리의 다른 글
팀 프로젝트 마무리 정리 - 멀티플레이 구현 (0) | 2025.01.15 |
---|---|
팀 프로젝트 마무리 정리 - 로비 (0) | 2025.01.14 |
팀 프로젝트 - 아이템 무작위 배치 (0) | 2025.01.08 |
팀 프로젝트 - 프리팹 용량문제 (0) | 2025.01.07 |
팀 프로젝트 - 조작 관련 UI 추가, 로비 배경 추가 (0) | 2024.12.31 |