[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]
コメント