Не могу получить функцию из другого скрипта
У меня есть скрипт где создаются объекты и мне нужно к нему обратиться через Другой скрипт чтоб игрок когда его задевал, с ним происходили какие-то действия, но когда я пытаюсь обратиться к нему, вылетает следующая ошибка
NullReferenceException: Object reference not set to an instance of an object
RandomSpawn.SpawnRandom () (at Assets/Scripts/RandomSpawn.cs:19)
PlayerController.OnTriggerEnter2D (UnityEngine.Collider2D collision) (at Assets/Scripts/PlayerController.cs:83)
вот скрипты по ссылке
Я погуглил и дело было в том, что я основном классе не инициализировал объект, я это сделал:
RandomSpawn Spawn = new RandomSpawn();
Но эта ошибка все равно вылетатет...
Есть предположения, что нужно инициализовать еще и объекты в этой функции, тоесть Coin и Массив listObjects
Но как это сделать?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RandomSpawn : MonoBehaviour
{
public GameObject[] listObjects;
public GameObject Coin;
int random;
void Start()
{
random = Random.Range(0, listObjects.Length);
SpawnRandom();
}
public void SpawnRandom()
{
Instantiate(Coin, listObjects[random].transform.position, Quaternion.identity);
}
}
Сюды нужно вставить SpawnRandom
RandomSpawn Spawn = new RandomSpawn();
private void OnTriggerEnter2D (Collider2D collision)
{
if (collision.tag.Equals("Coin"))
{
HealthBar.fill += 0.2f;
Destroy(collision.gameObject);
Spawn.SpawnRandom();
}
}
Также я сделал вот так (это костыльно, ибо я хочу чтобы передавалась функция, а не полностью объект создавать, но это хотя бы как-то) и вроде бы я через Spawn обратился к этим объектам, но все равно не работает
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerController : MonoBehaviour
{
public static Rigidbody2D rb;
public float speed;
private float moveInput;
public float JumpForce;
public bool isGrounded = false;
public Transform GroundCheck;
public float GroundRadius = 0.5f;
public LayerMask whatIsGrounded;
private bool playerLeft = false;
private RandomSpawn Spawn;
void Start()
{
rb = GetComponent <Rigidbody2D>();
}
// Update is called once per frame
void FixedUpdate()
{
// Проверка, игрок на земле или нет
isGrounded = Physics2D.OverlapCircle(GroundCheck.position, GroundRadius, whatIsGrounded);
// Движение игрока
moveInput = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);
// Прыжок игрока
if (Input.GetKey(KeyCode.Space) && isGrounded)
{
Jump();
}
// Поворот игрока
if (playerLeft == true && moveInput > 0)
{
Flip();
}else if (playerLeft == false && moveInput < 0)
{
Flip();
}
// Смерть игрока
if (HealthBar.fill <= 0)
{
SceneManager.LoadScene(0);
}
}
private void OnTriggerEnter2D (Collider2D collision)
{
if (collision.tag.Equals("Coin"))
{
HealthBar.fill += 0.2f;
Destroy(collision.gameObject);
Instantiate(Spawn.Coin, Spawn.listObjects[Spawn.random].transform.position, Quaternion.identity);
}
if (collision.tag.Equals("Water"))
{
SceneManager.LoadScene(0);
}
if (collision.tag.Equals("Enemy"))
{
HealthBar.fill -= 0.5f;
}
}
void Jump()
{
rb.AddForce(transform.up * JumpForce, ForceMode2D.Impulse);
}
void Flip()
{
playerLeft = !playerLeft;
Vector3 Scaler = transform.localScale;
Scaler.x *= -1;
transform.localScale = Scaler;
}
}