Объект неправильно создаётся в иерархии объектов 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 тоже на сервере выполняется).