Ошибка: Trying to Invoke method: Player.Lose couldn't be called?
Добпый день, я хочу активировать возврат своего персонажа после смерти. То есть, чтобы игра автоматически перезапускалась. Но у меня выскакиет - "Trying to Invoke method: Player.Lose couldn't be called". Я пытался найти ошибку в коде, но безуспешно. Буду рад если поможете)
Первая часть кода:
< code lang = "cs" >
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class Main : MonoBehaviour
{
public void Lose()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
Вторая часть кода:
< code lang = "cs" >
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
Rigidbody2D rb;
public float speed;
public float jumpHeight;
public Transform groundCheck;
bool isGrounded;
Animator anim;
int curHp; //current health point (текущее количество жизней)
int maxHp = 3; //максимальное количество жизней
bool isHit = false;
public Main main;
public void RecountHp(int deltaHp)
{
curHp = curHp + deltaHp;
if (deltaHp < 0)
{
StopCoroutine(OnHit()); // чтобы корутины не накладывались друг на друга
isHit = true; // и не происходило конкурирующего значения между
StartCoroutine(OnHit()); // значениями зелёного и синего цветов
}
print(curHp);
if (curHp <= 0)
{
//.enabled позволяет выключить или включить любой компонент у объекта
GetComponent().enabled = false;
Invoke("Lose", 2f);
}
IEnumerator OnHit()
{
if (isHit) // сначала начинается карутина
GetComponent().color = new Color(1f, GetComponent().color.g - 0.04f, GetComponent().color.b - 0.04f);
// затем идёт к красному цвету
else
GetComponent().color = new Color(1f, GetComponent().color.g + 0.04f, GetComponent().color.b + 0.04f);
// после isHit = false, мы будем к стандартному цвету и до него дойдём, а после условие будет проверятся заново, заново и заново (пока g == 1f)
if (GetComponent().color.g == 1f)
StopCoroutine(OnHit());
if (GetComponent().color.g <= 0) // когда мы достигаем красного цвета мы делаем
isHit = false; // то мы isHit делаем false
yield return new WaitForSeconds(0.02f);
StartCoroutine(OnHit());
}
strelok_1014, всё что идёт после слов "первая часть кода:" и до "вторая часть кода:" и потом всё что после "вторая часть кода:" нужно завернуть в <code lang="cs">...</code>
3. В процессе создания вопроса пользователь Сервиса обязан:
...
3.8. Использовать для демонстрации фрагментов кода только специальный тег <code> или специальные демонстрационные ресурсы (например, JsFiddle - https://jsfiddle.net/). Размещение фрагментов кода в виде изображений запрещено.
StopCoroutine(OnHit());
Неправильное использование. По факту у вас ничего не останавливается.
Поэтому Lose вызывается много раз и в конечном итоге тогда, когда объекта уже не существует.
Не знаю насколько это будет полезно для тебя сейчас, спустя год. Но ты пытаешься запустить метод в другом методе.
Надо было перейти на пару скобочек ниже, и всё в ажуре!