Объект неправильно создаётся в иерархии объектов unity

Сервер у меня создаёт карту для игрока с префаба, вызывает у него метод ShowCardInfo(), проблема в том, что у хоста все карты появляются в руке, информация о карте спавнится, всё работает, а вот у клиента карты спавнятся вне иерархии, рядом с канвасом, из-за чего не отображаются на камере, да и метод ShowCardInfo() не работает на них

Вот функция спавна:

private void GiveCardToHand(List<Card> deck, Transform hand)
{
    if (deck.Count == 0)
        return;

    Card card = deck[0];

    GameObject cardGameObject = Instantiate(_cardPrefab, hand.position, hand.rotation, hand);
    cardGameObject.transform.SetParent(hand);
    NetworkServer.Spawn(cardGameObject);

    CardProperty cardProperty = cardGameObject.GetComponent<CardProperty>();
    cardProperty.ShowCardInfo(card);

    CmdShowCardInfoForOthers(cardGameObject, card, hand);

    deck.RemoveAt(0);
}

[Command]
private void CmdShowCardInfoForOthers(GameObject cardGameObject, Card card, Transform hand)
{
    cardGameObject.transform.SetParent(hand);

    RpcShowCardInfoForOthers(cardGameObject, card);
}

[ClientRpc]
private void RpcShowCardInfoForOthers(GameObject cardGameObject, Card card)
{
    CardProperty cardProperty = cardGameObject.GetComponent<CardProperty>();
    cardProperty.ShowCardInfo(card);
}

Вот ShowCardInfo():

public class CardProperty : MonoBehaviour
{
    public Card selfCard;
    public Image image;
    public TextMeshProUGUI cardName;
    public TextMeshProUGUI info;
    public TextMeshProUGUI attack;
    public TextMeshProUGUI defence;

    [SerializeField] private GameObject _hideObject;

    public void HideCardInfo(Card card)
    {
        selfCard = card;
        _hideObject.SetActive(true);
    }

    public void ShowCardInfo(Card card)
    {
        selfCard = card;
        _hideObject.SetActive(false);

        image.sprite = Resources.Load<Sprite>(card.imagePath);
        image.preserveAspect = true;
        cardName.text = card.name;
        info.text = card.info;

        attack.text = card.attack.ToString();
        defence.text = card.defence.ToString();
    }
}

Ответы (1 шт):

Автор решения: Shcherbakovsky

попробуй переместить строку

cardGameObject.transform.SetParent(hand);

после того, как ты создаешь префаб на сервере

NetworkServer.Spawn(cardGameObject);

Ты как-будто не назначаешь родителя на клиенте(Command тоже на сервере выполняется).

→ Ссылка