我在编辑器中播放我的统一项目和播放它制作的版本之间存在一些差异。
在编辑器中,当我玩游戏时,我的代码会在我的玩家击中目标点时生成敌人,这很有效。敌人产生并做他们需要做的事情。但是,当我构建项目并运行它时,我的播放器会点击相同的位置,但什么也没有出现。
我在开发模式下运行该项目,它声称我没有设置我认为我拥有的参考。我的意思是,如果它不起作用,为什么它在编辑器中起作用?
为了尝试解决这个问题,我重新导入了我正在使用的资产。我重新制作了敌人的出生点。但我仍然遇到同样的问题。
有没有人遇到过这个?如果是这样,当它在编辑器中工作而不是在构建中时,我该如何解决这个问题?
这是我的产卵功能:
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 中运行它时,一切正常。老实说,我不知道为什么当它在编辑器中运行良好但在构建中运行良好时会出现此问题。