コード例 #1
0
        /// <summary>
        /// Spawn the vehicle and enter it.
        /// </summary>
        public void Spawn()
        {
            // Create a reference to the vehicle
            Vehicle vehicle = null;

            // Create the vehicle
            switch (vehicleSpawnType)
            {
            case VehicleSpawnType.Loadout:

                int playerVehicleIndex = PlayerData.GetSelectedVehicleIndex(itemManager);
                if (playerVehicleIndex == -1)
                {
                    if (itemManager != null && itemManager.vehicles.Count > 0)
                    {
                        playerVehicleIndex = 0;
                    }
                }

                if (playerVehicleIndex != -1)
                {
                    // Create the vehicle
                    Transform vehicleTransform = ((GameObject)Instantiate(itemManager.vehicles[playerVehicleIndex].gameObject, vehicleSpawnPoint.position, vehicleSpawnPoint.rotation)).transform;
                    vehicle      = vehicleTransform.GetComponent <Vehicle>();
                    vehicle.name = vehicleName;


                    // Get the vehicle loadout
                    List <int> selectedModuleIndexesByMount = PlayerData.GetModuleLoadout(playerVehicleIndex, itemManager);

                    bool hasLoadout = false;
                    for (int i = 0; i < selectedModuleIndexesByMount.Count; ++i)
                    {
                        if (selectedModuleIndexesByMount[i] != -1)
                        {
                            hasLoadout = true;
                        }
                    }

                    // Create the vehicle loadout
                    if (hasLoadout)
                    {
                        for (int i = 0; i < selectedModuleIndexesByMount.Count; ++i)
                        {
                            if (selectedModuleIndexesByMount[i] == -1)
                            {
                                continue;
                            }

                            Module module = GameObject.Instantiate(itemManager.modulePrefabs[selectedModuleIndexesByMount[i]], null);

                            vehicle.ModuleMounts[i].AddMountableModule(module, itemManager.modulePrefabs[selectedModuleIndexesByMount[i]], true);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < vehicle.ModuleMounts.Count; ++i)
                        {
                            vehicle.ModuleMounts[i].createDefaultModulesAtStart = true;
                        }
                    }
                }

                break;

            case VehicleSpawnType.Prefab:

                vehicle = Instantiate(vehiclePrefab, vehicleSpawnPoint.position, vehicleSpawnPoint.rotation);

                break;
            }

            if (vehicle != null)
            {
                // Set child vehicle that the game agent will exit to when exiting this vehicle.
                VehicleEnterExitManager enterExitManager = vehicle.GetComponent <VehicleEnterExitManager>();
                if (startingChildVehicle != null)
                {
                    if (enterExitManager != null)
                    {
                        if (startingChildVehicle.CanEnter(enterExitManager))
                        {
                            enterExitManager.SetChild(startingChildVehicle);
                        }
                    }
                }

                // Make the starting occupant enter the vehicle
                if (startingOccupant != null)
                {
                    GameAgent occupant;
                    if (spawnOccupantFromPrefab)
                    {
                        occupant = Instantiate(startingOccupant, Vector3.zero, Quaternion.identity);
                    }
                    else
                    {
                        occupant = startingOccupant;
                    }

                    occupant.EnterVehicle(vehicle);
                }

                // Call the event
                onVehicleSpawned.Invoke(vehicle);
            }
        }