首页 > 解决方案 > 一种方法中的堆栈对象似乎与 UNITY 中的另一种方法不同?

问题描述

我有一段这样的代码。问题是 push 和 pop 不能一起工作。实际上,我认为 push 方法运行良好,但 pop 存在问题。因为当对象触发stack.count增加1但点击画布中的按钮时,控制台打印“堆栈为空”并且stack.count = 0。这里有什么问题?

    Stack<Skill> stackSkills;
   
    void Start()
    {
        stackSkills= new Stack<Skill>();
    }

    void OnTriggerEnter(Collider collider){
     
            stackSkills.Push(newSkill);
            Debug.Log(stackSkills.Count); //When i trigger it , it increases.
    }

    public void OnClick(){

        Debug.Log("clicked");
        Debug.Log(stackSkills.Count);
        stackSkills.Pop();
        
    }
}

这是示例:输出

1
2
3
clicked
0
InvalidOperationException: Stack empty.
System.Collections.Generic.Stack1[T].ThrowForEmptyStack () (at <ef151b6abb5d474cb2c1cb8906a8b5a4>:0)

标签: c#unity3ddata-structuresstack

解决方案


发生此问题的原因是在不同的两个游戏对象(Canvas 和 myGameObject)中使用了相同的脚本,它们没有相互关联。我OnTriggerEnter()在 myGameObject 中调用方法,OnClick()在 Canvas 中调用方法。因此它们不共享相同的数据字段。项目中有两个 Stack。


推荐阅读