Как убрать игровой объект из списка ссылок с помощью raycast - PullRequest
1 голос
/ 26 мая 2019

Привет, я пытаюсь создать карточную игру, и у меня есть класс под названием рука, у этой руки есть public List<GameObject> cards; и методы:

public void AddCard(GameObject card)
{
   cards.Add(card);
   GameObject cardObject = Instantiate(card, startPosition, actualCardRotation);
}

public GameObject RemoveCard(GameObject card)
{
        cards.Remove(card);
        return card;
 }

тогда у меня есть атрибуты cardGameController public Hand playerHand, computerHand;, в котором есть функция выбора карты для игры и вызова функции RemoveCard, но здесь не работает код:

public void SelectCardToPlay()
    {
        Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y);

        RaycastHit2D hit = Physics2D.Raycast(mousePos2D, Vector2.zero);
        if (hit.collider != null && hit.collider.CompareTag("Card"))
        {
            Console.text = hit.collider.gameObject.GetComponent<Card>().description;

            if (Input.GetMouseButtonDown(0))
            {
                playedPlayerCard = playerHand.RemoveCard(hit.collider.gameObject);
                playerSelectedCardBoard.AddCard(playedPlayerCard, 3);

                playedComputerCard = computerHand.PickRandomCard();
                computerSelectedCardBoard.AddCard(playedComputerCard, 3);

                gameState = 5;
            }
        }
    }

Похоже, что объект, который я получаю с помощью hit.collider, не совпадает со списком рук или чем-то в этом роде, есть какие-то подсказки?

1 Ответ

1 голос
/ 26 мая 2019

В вашей AddCard вы добавляете входную карту, которая, как я полагаю, является префабом - поскольку вы используете ее для создания новой карты. Затем я предполагаю, что именно эту порожденную карту вы хотите удалить из списка, поскольку это, вероятно, объект, который вы бьете?

Просто измените свою AddCard на:

public void AddCard(GameObject card)
{
   GameObject cardObject = Instantiate(card, startPosition, actualCardRotation);
   cards.Add(cardObject);
}

И посмотри, работает ли это.


Если это не проблема, убедитесь, что вы точно отлаживаете, какой объект вы получаете по всем пунктам. Добавьте туда Debug.Log(gameObject.name); здесь и там, чтобы увидеть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...