1

我在编辑器中播放我的统一项目和播放它制作的版本之间存在一些差异。

在编辑器中,当我玩游戏时,我的代码会在我的玩家击中目标点时生成敌人,这很有效。敌人产生并做他们需要做的事情。但是,当我构建项目并运行它时,我的播放器会点击相同的位置,但什么也没有出现。

我在开发模式下运行该项目,它声称我没有设置我认为我拥有的参考。我的意思是,如果它不起作用,为什么它在编辑器中起作用?

为了尝试解决这个问题,我重新导入了我正在使用的资产。我重新制作了敌人的出生点。但我仍然遇到同样的问题。

有没有人遇到过这个?如果是这样,当它在编辑器中工作而不是在构建中时,我​​该如何解决这个问题?

这是我的产卵功能:

public GameObject SpawnEnemies()
{
    Vector3 _position = new Vector3(transform.position.x, transform.position.y, transform.position.z);

    // instantiate particel system
  //  Instantiate(_particle, _position, Quaternion.identity);
    audio.PlayOneShot(_appearSound);

    _clone = (GameObject)Instantiate(_enemy, _position, transform.rotation);
    _ai = _clone.GetComponent<HV_BaseAI>();
    _ai._waypoints = _wayPoints;

    return _clone;
}

这是由我的部分类控制的,它具有以下功能:

   public List<GameObject> SpawnGroundEnemies()
{
    List<GameObject> groundObjectList = new List<GameObject>();

    for (int i = 0; i < _spawnPoints.Count; i++)
    {
        groundObjectList.Add(_spawnPoints[i].SpawnEnemies());
    }
    return groundObjectList;
}

这又由我的部分控制器控制:

       GameObject g, f;
    g = GameObject.FindGameObjectWithTag("SectionController");
    f = GameObject.FindGameObjectWithTag("SectionController");

    HV_SectionController tempSectionControllerGroundEnemies, tempSectionControllerFlyingEnemies;
    tempSectionControllerGroundEnemies = g.GetComponent<HV_SectionController>();
    tempSectionControllerFlyingEnemies = f.GetComponent<HV_SectionController>();

    _groundEnemiesRemaining = tempSectionControllerGroundEnemies._numberOfGroundEnemies.Count;
    _flyingEnemiesRemaining = tempSectionControllerFlyingEnemies._numberOfFlyingEnemies.Count;
    _enemiesRemaining = _groundEnemiesRemaining + _flyingEnemiesRemaining;

    if (!_moving)
    {
        if (_enemiesRemaining == 0)
        {
            MoveToNextSection();

        }

    }

    if (_moving)
    {
        if (Vector3.SqrMagnitude(_camera.transform.position - _camNavMesh.destination) < 5.0f)
        {
            _moving = false;


            // spawn the next set of enemies
            // need this for each section of the game
            // without this, no enemies will spawn
            if (CurrentSection == 1)
            {
                _numberOfGroundEnemies = _sections[0].SpawnGroundEnemies();
                _enemiesRemaining = _numberOfGroundEnemies.Count;
            }

            if (CurrentSection == 2)
            {
                _numberOfFlyingEnemies = _sections[1].SpawnFlyingEnemies();
                _enemiesRemaining = _numberOfFlyingEnemies.Count;
            }

            if (CurrentSection == 3)
            {
                _numberOfGroundEnemies = _sections[2].SpawnGroundEnemies();
                _enemiesRemaining = _numberOfGroundEnemies.Count;
            }
        }
    }
}

private void MoveToNextSection()
{
    if (_currentSection == _sections.Count)
    {
        _currentSection = 0;
    }
    _camNavMesh.SetDestination(_sections[_currentSection]._cameraTransform.position);
    _lookAtPoint.SetTimer(_sections[_currentSection]._cameraLookAtTarget.position);
    _moving = true;

    _currentSection += 1;
}

谁能看到我做错了什么?

更新

自从这篇文章以来,我尝试再次重新导入我的所有资产。我什至创建了一个新项目并以这种方式进行了新构建,但我仍然遇到同样的问题。另外,为了提供帮助,我截取了两个屏幕来说明我的意思。

首先,在统一编辑器中运行的游戏: 在此处输入图像描述

如您所见,桥上有4个骷髅。当我在统一编辑器中点击播放时,这些家伙就会出现。

现在,当我构建项目时,这是相同的部分: 在此处输入图像描述

正如你所看到的,没有敌人,但是当它是一个开发版本时,它说我没有参考集。在统一生成的输出日志中,它给了我这个消息:

NullReferenceException:对象引用未设置为 C:\Users\sean.obrien\Desktop\Medieval Darkride Level\Assets_scripts\Enemy Scripts\HV_SpawnGroundEnemy.cs:37 中 HV_SpawnGroundEnemy.SpawnEnemies () [0x00052] 处的对象实例

在 C:\Users\sean.obrien\Desktop\Medieval Darkride Level\Assets_scripts\Helper Scripts\HV_Section.cs:26 中的 HV_Section.SpawnGroundEnemies () [0x0000d]

在 C:\Users\sean.obrien\Desktop\Medieval Darkride Level\Assets_scripts\Helper Scripts\HV_SectionController.cs:72 中的 HV_SectionController.Update () [0x000c2]

同样,这仅出现在游戏的构建版本中。当我在 Unity 中运行它时,一切正常。老实说,我不知道为什么当它在编辑器中运行良好但在构建中运行良好时会出现此问题。

4

1 回答 1

0

这里很可能有两种情况。要么你还没有保存你的场景,要么你在构建时没有包含正确的场景。

如果是第一种情况,只需保存场景即可。如果是第二个,那么您需要在构建设置中选择合适的场景然后重新构建。

说明:
您可能已将场景保存为其他文件,但构建设置不会动态更新场景文件。它仍然会指向旧场景。因此,您只需删除旧场景并添加您正在使用的当前场景。

于 2013-04-26T23:54:03.187 回答