my gameover scene doesn’t load I know the reason is cuz my gameobject gets destroyed where script is attached to but I don’t know how to fix it. I tried a lot so code might look weird.
Player script
using System;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using UnityEditorInternal;
using UnityEngine;
using UnityEngine.XR.WSA.Input;
using UnityEngine.SceneManagement;
public class Player : MonoBehaviour
{
//config param
[Header("Player")]
[SerializeField] float MoveSpeed = 10f;
[SerializeField] float padding = 1f;
[SerializeField] int health = 200;
DamageDealer damageDealer;
Level level;
[SerializeField] int delayInSeconds = 2;
[SerializeField] AudioClip playerShot;
[SerializeField] AudioClip playerDeath;
[SerializeField] [Range(0, 1)] float deathVolume = 0.7f;
[SerializeField] [Range(0, 1)] float laserVolume = .4f;
[Header("Projectile")]
[SerializeField] GameObject laserPrefab;
[SerializeField] float projectileSpeed = 10f;
[SerializeField] float projectileFiringPeriod = 0.2f;
Coroutine firingCoroutine;
float xMin;
float xMax;
float yMin;
float yMax;
// Start is called before the first frame update
void Start()
{
SetUpMoveBoundries();
}
// Update is called once per frame
void Update()
{
Move();
Fire();
}
private void OnTriggerEnter2D(Collider2D collision)
{
health -= 100;
if (health <= 0)
{
FindObjectOfType<Level>().LoadGameOver();
Destroy(gameObject);
AudioSource.PlayClipAtPoint(playerDeath, Camera.main.transform.position, deathVolume);
}
if (!damageDealer) { return; }
damageDealer.Hit();
}
private void Fire()
{
if (Input.GetButtonDown("Fire1"))
{
firingCoroutine = StartCoroutine(FireContinuously());
}
if (Input.GetButtonUp("Fire1"))
{
StopCoroutine(firingCoroutine);
}
}
IEnumerator FireContinuously()
{
while (true)
{
GameObject laser = Instantiate(laserPrefab, transform.position, Quaternion.identity) as GameObject;
AudioSource.PlayClipAtPoint(playerShot, Camera.main.transform.position, laserVolume);
laser.GetComponent<Rigidbody2D>().velocity = new Vector2(0, projectileSpeed);
yield return new WaitForSeconds(projectileFiringPeriod);
}
}
private void Move()
{
var deltaX = Input.GetAxis("Horizontal")* Time.deltaTime;
var deltaY = Input.GetAxis("Vertical") * Time.deltaTime;
var newxPos = Mathf.Clamp(transform.position.x + deltaX * MoveSpeed, xMin, xMax);
var newyPos = Mathf.Clamp(transform.position.y + deltaY * MoveSpeed, yMin, yMax);
transform.position = new Vector2(newxPos,newyPos );
}
private void SetUpMoveBoundries()
{
Camera gameCamera = Camera.main;
xMin = gameCamera.ViewportToWorldPoint(new Vector3(0, 0, 0)).x + padding;
xMax = gameCamera.ViewportToWorldPoint(new Vector3(1, 0, 0)).x - padding;
yMin = gameCamera.ViewportToWorldPoint(new Vector3(0, 0, 0)).y + padding;
yMax = gameCamera.ViewportToWorldPoint(new Vector3(0, 1, 0)).y - padding;
}
IEnumerator WaitAndLoad()
{
yield return new WaitForSeconds(delayInSeconds);
SceneManager.LoadScene("GameOver Scene");
}
}
Level Script
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Level : MonoBehaviour
{
[SerializeField] int delayInSeconds = 2;
public void LoadStartMenu()
{
SceneManager.LoadScene("Start Scene");
}
public void LoadGameOver()
{
SceneManager.LoadScene("GameOver Scene");
}
public void LoadGameScene()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
public void QuitGame()
{
Application.Quit();
}
}