Now I have added in this sections work (save/load stuff) and the portals do not work once again. The fade works but they will not load the next scene. I have added in a 3rd scene and set up the portals so specs, renamed the identifiers in the Enum (to make it easier to understand what one goes to what) and tested a few times with nothing but broken portals.
Code is exactly like in the course with the exception of the code snippet you supplied me in my last issue in the portal script.
Here is a link to the latest version of the game if you need it : https://www.dropbox.com/s/5njl68mn38fw820/RPG%20Tutorial.zip?dl=0
Here is the code for Portal.cs if this is all you need :
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
namespace RPG.SceneManagement {
public class Portal : MonoBehaviour
{
enum DestinationIdentifier { Lake, Town, Farm, Obsticles}
[SerializeField] int sceneToLoad = -1;
[SerializeField] Transform spawnPoint;
[SerializeField] DestinationIdentifier destination;
[SerializeField] float fadeOutTime = 1f;
[SerializeField] float fadeInTime = 2f;
[SerializeField] float fadeWaitTime = 0.5f;
private void OnTriggerEnter(Collider other) {
if(other.tag == "Player") {
StartCoroutine(Transition());
}
}
private IEnumerator Transition() {
if(sceneToLoad < 0) {
Debug.LogError("Scene to load is not set");
yield break;
}
DontDestroyOnLoad(gameObject);
Fader fader = FindObjectOfType<Fader>();
yield return fader.FadeOut(fadeOutTime);
// Save current level
SavingWrapper wrapper = FindObjectOfType<SavingWrapper>();
wrapper.Save();
yield return SceneManager.LoadSceneAsync(sceneToLoad);
// Load current level
wrapper.Load();
Portal otherPortal = GetOtherPortal();
updatePlayer(otherPortal);
wrapper.Save();
yield return new WaitForSeconds(fadeWaitTime);
yield return fader.FadeIn(fadeInTime);
Destroy(gameObject);
}
private void updatePlayer(Portal otherPortal) {
GameObject player = GameObject.FindWithTag("Player");
player.GetComponent<NavMeshAgent>().Warp(otherPortal.spawnPoint.position);
player.transform.rotation = otherPortal.spawnPoint.rotation;
// Course code before adjustment by Sam
//player.transform.position = otherPortal.spawnPoint.position;
//player.transform.rotation = otherPortal.spawnPoint.rotation;
}
private Portal GetOtherPortal() {
foreach (Portal portal in FindObjectsOfType<Portal>()) {
if (portal == this) continue;
if (portal.destination != destination) continue;
return portal;
}
return null;
}
}
}
As stated previously, I’m still rather new to Unity and C#. With that said, I did attempt to debug the issue as best I knew how. Double checked all trigger settings, rolled back to a previous save and did the section again, put a debug snippet in the portal script before and after the altered code (from previous issue). I’d like to think I’m pretty thorough on my end before I ask for help.