【问题标题】:There seems to be 2 different variables with the same name in my class我的班级似乎有 2 个同名的不同变量
【发布时间】:2020-12-18 14:01:23
【问题描述】:

我在 SpawnManager 类中声明了一个私有 int tree_count。 void Start() 和 void Update() 按预期使用变量,但另一种方法 public void Tree_destroyed 似乎使用了不同的 tree_count。

这是我的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class SpawnManager : MonoBehaviour
{

    private int tree_count;

    // Start is called before the first frame update
    void Start()
    {
        tree_count = 500;
    }

    // Update is called once per frame
    void Update()
    {
        if (Time.time < 3.05)
        {
            print(tree_count);
        }

    }
    
    public void Tree_destroyed()
    {
        tree_count--;
        print(tree_count);
    }
}

void Update() 为 tree_count 打印 500,但 public void Tree_destroyed() 为每个方法调用打印 0,并转到 -1、-2、...。

public void Tree_destroyed() 被一个对象用这个脚本调用:

using System.Collections.Generic;
using UnityEngine;

public class TreeBehaviour : MonoBehaviour
{
    public GameObject spawnManager;

    // Start is called before the first frame update
    void Start()
    {
        Destroy(gameObject, 3);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    private void OnDestroy()
    {
        spawnManager.GetComponent<SpawnManager>().Tree_destroyed();
    }
}

知道为什么会这样吗?任何帮助将不胜感激。

编辑 1:对于发生的事情的顺序:首先,初始化 private int tree_count,调用 void Start() 将 tree_count 设置为 500,每帧调用 void Update(),将 tree_count 显示为 500,void 3秒后调用tree_destroyed,显示不同的tree_count,下一帧调用void Update(),显示tree_count仍为500。

编辑 2:场景中只有 3 个对象,相机(未附加脚本),带有 SpawnManager 的对象,以及另一个在销毁时调用 Tree_destroyed 的对象。我确定没有重复的对象或脚本。

【问题讨论】:

  • 你有两个不同的SpawnManager 实例,第二个你永远不会调用Start 方法。这是我的猜测。
  • 你能显示你实际调用'Tree_destroyed()'的代码吗?
  • 所有事情都发生在同一个线程中吗?
  • 我不确定你所说的同一个线程是什么意思。如果您指的是我的计算机处理器如何处理这些脚本,我不知道。
  • 在这种情况下应该没关系,因为 void onDestroy() 是调用 Tree_destroyed() 的那个,它只在 3 秒后发生。我的输出基本上变成了 500, 500, 500, ..., 500, 500, 0, -1, -2,..., -5, -6, -7, 500, 500, 500(输出数量接近0 是基于我实例化的树的数量,在这个例子中是 8)。

标签: c# unity3d


【解决方案1】:

有可能因为这是一个类对象,所以有两个具有相同私有变量的对象实例。在没有看到您项目的其余部分的情况下,这是最有可能的答案。

【讨论】:

  • 这个项目非常新,场景中只有 3 个对象(相机、带有 SpawnManager 的对象和销毁时调用 Tree_destroyed() 的对象),所以我确信没有重复。
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
相关资源
最近更新 更多