[ad_1]
Saya memiliki kode ini di sini yang menampilkan objek permainan ketika saya menekan E pada keyboard, satu-satunya masalah adalah ia berfungsi dengan host dan tidak ada yang terjadi ketika klien berinteraksi dengannya ketika dia menekan E. apa solusinya atau apa yang saya lakukan salah dan terima kasih telah meluangkan waktu.
Apa yang saya coba:
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]
コメント