成员"GameObject.FindGameObjectWithTag(string)"不能使用实例引用访问



我一直在尝试修复这个错误,它让我抓狂,只有我检查过的其他修复程序说你可能出了一些静态的东西,我检查了多次,我99%确信我没有静态的问题,这是我一直在使用的脚本有问题

private void Update() {
if (Vector3.Distance(player.FindGameObjectWithTag("Tag").transform.position, lastEndPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART) {
SpawnLevelPart();
}
}

这是完整的代码:

using System.Collections;

使用System.Collections.Generic;使用UnityEngine;

公共类LevelGenerator:MonoBehavior{

private const float PLAYER_DISTANCE_SPAWN_LEVEL_PART = 200f;
[SerializeField] private Transform levelPart_Start;
[SerializeField] private List<Transform> levelPartList;
[SerializeField] private GameObject player;
private Vector3 lastEndPosition;
private void Awake() {
lastEndPosition = levelPart_Start.Find("EndPosition").position;
int startingSpawnLevelParts = 5;
for (int i = 0; i < startingSpawnLevelParts; i++) {
SpawnLevelPart();
}
}
private void Update() {
if (Vector3.Distance(player.FindGameObjectWithTag("Player").transform.position, lastEndPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART) {
SpawnLevelPart();
}
}
private void SpawnLevelPart() {
Transform chosenLevelPart = levelPartList[Random.Range(0, levelPartList.Count)];
Transform lastLevelPartTransform = SpawnLevelPart(chosenLevelPart, lastEndPosition);
lastEndPosition = lastLevelPartTransform.Find("EndPosition").position;
}
private Transform SpawnLevelPart(Transform levelPart, Vector3 spawnPosition) {
Transform levelPartTransform = Instantiate(levelPart, spawnPosition, Quaternion.identity);
return levelPartTransform;
}

}

问题不在于您有静态的东西,而在于您需要使用静态方法GameObject.FindGameObjectWithTag(),而不是试图从GameObject的实例player访问它。

private void Update() {
if (Vector3.Distance(GameObject.FindGameObjectWithTag("Tag").transform.position, lastEndPosition) < PLAYER_DISTANCE_SPAWN_LEVEL_PART) {
SpawnLevelPart();
}
}

相关内容

最新更新