在我的Unity游戏中,我有一个车辆预制件与Edy的车辆物理资产一起工作 . 我试图在GameObject的位置和旋转上实例化一个选定的车辆预制件 .
在我的场景中运行我的代码以生成车辆时,我收到此错误
ArgumentException:要实例化的Object为null ArgumentException:要实例化的Object为null . UnityEngine.Object.CheckNullArgument(System.Object arg,System.String message)(at C:/buildslave/unity/build/Runtime/Export/UnityEngineObject.cs:239)UnityEngine.Object.Instantiate(UnityEngine.Object original,Vector3 position ,Quaternion rotation)(在C:/buildslave/unity/build/Runtime/Export/UnityEngineObject.cs:151)UnityEngine.Object.Instantiate [VehicleController](EVP.VehicleController原始,Vector3位置,四元数旋转)(在C:/ buildslave / unity / build / Runtime / Export / UnityEngineObject.cs:206)VehicleSpawner.spawnVehiclesInFirstGarage()(在Assets / Scripts / VehicleSpawner.cs:44)HandleGarage.Start()(在Assets / Scripts / HandleGarage.cs:59)
车辆预制件是空的,因为车辆将由用户在游戏中选择 . (即使我选择了车辆预制件,我仍然会得到同样的错误)
我的代码用于在游戏对象上实例化车辆预制件
public EVP.VehicleTelemetry telemetryComponent;
public EVP.VehicleController vehiclePrefab;
public GameObject spawnObject;
public void spawnVehiclesInFirstGarage ()
{
// Load saved JSON
string jsonData = SecurePlayerPrefs.GetString ("vehicleNames");
// Convert to Class
Database loadedData = JsonUtility.FromJson<Database> (jsonData);
// Loop through Owned Vehicles Garage
for (int i = 0; i < loadedData.vehicleNames.Count; i++) {
// Set up instantiate
var vehicle = Resources.Load("Prefabs/" + (loadedData.vehicleNames [i]));
vehiclePrefab = vehicle as EVP.VehicleController;
// Spawn vehicle on game object
EVP.VehicleController newVehicle = Instantiate(vehiclePrefab, spawnObject.transform.position, spawnObject.transform.rotation) as EVP.VehicleController;
telemetryComponent.target = newVehicle;
}
}
1 回答
可能的解决方案
vehiclePrefab = vehicle as EVP.VehicleController;
可能导致问题,因为日志var vehicle = Resources.Load("Prefabs/" + (loadedData.vehicleNames [i]));
已经给出Sport Coupe (UnityEngine.GameObject)
,这是正确的类型 .而不是使用
as EVP.VehicleController
,尝试:这是Unity's documentation for loading prefabs via scripting .
void Start()
正在调用spawnVehiclesInFirstGarage()
. 如果是这样,请尝试将其放入void Update()
,添加if( prefab != null && !isInstantiated)
检查 .其他故障排除(如果解决方案不起作用)
尝试通过检查器分配预制件,看看是否遇到同样的问题 .
在现有代码上,尝试
Debug.Log(vehiclePrefab)
.