[ad_1]
ここにキーボードの E を押したときにゲーム オブジェクトを表示するコードがあります。唯一の問題はホストで動作することです。 クライアントが E を押して対話しても何も起こりません。解決策は何ですか、または私が間違っていることは何ですか。時間がかかりました。
私が試したこと:
using System.Collections.Generic; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; public class InteractiveComputer : NetworkBehaviour { public GameObject computerScreen; public float interactionRange = 3f; // Adjust the interaction range as needed private float displayDuration = 5f; // Duration to display the computer screen private bool isComputerScreenVisible = false; private bool isInteracting = false; // Flag to prevent multiple interactions private void Start() { if (IsServer) { isComputerScreenVisible = false; computerScreen.SetActive(false); } } bool IsPlayerInRange() { foreach (var player in NetworkManager.Singleton.ConnectedClientsList) { if (player != null && Vector3.Distance(transform.position, player.PlayerObject.transform.position) <= interactionRange) { return true; } } return false; } void Update() { if (!IsServer) return; // Check if the player is nearby if (IsPlayerInRange()) { // Check if the 'e' key is pressed if (Input.GetKeyDown(KeyCode.E) && !isInteracting) { InteractWithComputerServerRpc(); } // Check if the 'A' button on the gamepad is pressed if (Gamepad.current != null && Gamepad.current.buttonSouth.isPressed && !isInteracting) { InteractWithComputerServerRpc(); } } } [ServerRpc] private void InteractWithComputerServerRpc() { isComputerScreenVisible = true; RpcUpdateComputerScreenVisibilityClientRpc(isComputerScreenVisible); // Set a timer to hide the computer screen after the specified duration Invoke(nameof(HideComputerScreenClientRpc), displayDuration); // Set interacting flag to prevent multiple interactions isInteracting = true; } [ClientRpc] private void RpcUpdateComputerScreenVisibilityClientRpc(bool isVisible) { isComputerScreenVisible = isVisible; computerScreen.SetActive(isVisible); // If the computer screen is shown on the client, set the interacting flag to true if (isVisible) { isInteracting = true; } } [ClientRpc] private void HideComputerScreenClientRpc() { isComputerScreenVisible = false; computerScreen.SetActive(false); // Reset interacting flag after hiding the computer screen isInteracting = false; } } //works well but for the server can only interact but client no
[ad_2]
コメント