Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Resolved Passing GameObject to ServerRPC

Discussion in 'Netcode for GameObjects' started by unity_VngtZy77FXMDEg, May 12, 2023.

  1. unity_VngtZy77FXMDEg

    unity_VngtZy77FXMDEg

    Joined:
    Sep 1, 2021
    Posts:
    5
  2. cerestorm

    cerestorm

    Joined:
    Apr 16, 2020
    Posts:
    598
    If the serverRpc is on the hit object you can just pass in the values as parameters. You'll have to elaborate on how your objects are set up.

    I know nothing about colliders or rigidbodies and such so I may not be able to give you the correct solution for your problem. :)
     
  3. unity_VngtZy77FXMDEg

    unity_VngtZy77FXMDEg

    Joined:
    Sep 1, 2021
    Posts:
    5
    Hi thanks for the rply. I have the OnTriggerEnter and ServerRPC script inside a bullet prefab and i want to call a serverrpc with the hit object as a parameter inside the OnTriggerEnter method when the bullet hits a player.
    like this:
    private void OnTriggerEnter(Collider other)
    {
    if(other.CompareTag("Player"))
    {
    TakeDMGServerRPC(other.gameObject)
    }
    }
    [ServerRpc]
    public void TakeDMGServerRPC(GameObject hitPlayer)
    {
    hitPlayer.GetComponent<Stats>().currentHealth.Value -= 20;
    }
    I have fixed the issue for now with this
    private void OnTriggerEnter(Collider other)
    {
    if(!IsServer) return;
    if(other.CompareTag("Player"))
    {
    TakeDMGServerRPC(other.gameObject)

    }
    }
    but I would like to now a method to give a gameobject as parameter in serverrpc
    I think like this post https://forum.unity.com/threads/netcode-gameobject-as-parameter-of-serverrpc-function.1363132/
    but I didnt understand this xD (sorry for my bad english)
     
  4. cerestorm

    cerestorm

    Joined:
    Apr 16, 2020
    Posts:
    598
    This may work but I've not tried it:
    Code (CSharp):
    1. [ServerRpc]
    2. public void TakeDMGServerRPC(NetworkObjectReference playerGameObject)
    3. {
    4. playerGameObject.GetComponent<Stats>().currentHealth.Value -= 20;
    5. }
    NetworkBehaviourReference is another option as the rpc parameter where you can pass in a NetworkBehaviour like Player or Stats in directly rather than the game object.
     
  5. unity_VngtZy77FXMDEg

    unity_VngtZy77FXMDEg

    Joined:
    Sep 1, 2021
    Posts:
    5
    Thank you :) I added if(!playerGameObject.TryGet(out NetworkObject networkObject) and now it works

    Code (CSharp):
    1.     private void OnTriggerEnter(Collider other)
    2.     {
    3.         if(other.CompareTag("Player"))
    4.         {        
    5.             TakeDMGServerRPC(other.gameObject.transform.parent.gameObject);
    6.         }
    7.     }
    8.     [ServerRpc]
    9.     public void TakeDMGServerRPC(NetworkObjectReference playerGameObject)
    10.     {
    11.         if (!IsOwner) return;
    12.         if(!playerGameObject.TryGet(out NetworkObject networkObject))
    13.         {
    14.             Debug.Log("error");
    15.         }
    16.         networkObject.transform.GetChild(1).gameObject.GetComponent<Stats>().currentHealth.Value -= 20;
    17.  
    18.     }
    19. }
     
    cerestorm likes this.