Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过光线投射从列表引用中删除游戏对象_C#_Unity3d - Fatal编程技术网

C# 如何通过光线投射从列表引用中删除游戏对象

C# 如何通过光线投射从列表引用中删除游戏对象,c#,unity3d,C#,Unity3d,嗨,我正在尝试创建一个纸牌游戏,我有一个叫做手的类,这只手有一个公共列表卡和a方法: public void AddCard(GameObject card) { cards.Add(card); GameObject cardObject = Instantiate(card, startPosition, actualCardRotation); } public GameObject RemoveCard(GameObject card) { cards.Re

嗨,我正在尝试创建一个纸牌游戏,我有一个叫做手的类,这只手有一个
公共列表卡和a方法:

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属性
公共手牌玩家和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;
            }
        }
    }
public void SelectCardToPlay()
{
Vector3 mousePos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 mousePos2D=新的Vector2(mousePos.x,mousePos.y);
RaycastHit2D hit=Physics2D.Raycast(mousePos2D,Vector2.zero);
if(hit.collider!=null&&hit.collider.CompareTag(“卡”))
{
Console.text=hit.collider.gameObject.GetComponent().description;
if(Input.GetMouseButtonDown(0))
{
playedPlayerCard=playerHand.RemoveCard(hit.collider.gameObject);
playedPlayerCard.AddCard(playedPlayerCard,3);
playedComputerCard=computerHand.PickRandomCard();
计算机选择卡纸。添加卡(播放计算机卡,3);
配子状态=5;
}
}
}

似乎我通过点击得到的对象。collider与手牌列表或类似的东西不一样,有什么提示吗?

在你的AddCard中,你正在添加输入卡,我假设它是一个预制卡,因为你使用它来生成一张新卡。然后我假设你要从列表中删除的是这张衍生卡,因为那可能就是你要击中的对象

只需将您的AddCard更改为:

public void AddCard(GameObject card)
{
   GameObject cardObject = Instantiate(card, startPosition, actualCardRotation);
   cards.Add(cardObject);
}
看看这是否有效



如果这不是问题所在,请确保您在所有点上调试的对象都是正确的。添加一些
Debug.Log(gameObject.name)四处查看。

谢谢你说得对,我在列表中添加了错误的卡