В настоящее время у меня есть объект GameMaster, который я использую для сохранения статистики в переходных сценах. Одно из полей, которое я храню, это значение playerMaxHealth
. Я пытаюсь загрузить это значение в объект Player в значение playerStats.MaxHealth
в начале каждой сцены. В этот момент мой экземпляр GameMaster работает отлично, и значения сохраняются от сцены к сцене, но у меня возникают проблемы с доступом к значению playerMaxHealth
из недавно загруженного объекта Player. Я пробовал множество вещей, в том числе решения на этом сайте, и я никогда не смогу получить доступ к этому объекту. Я включил код из моей текущей попытки, в виде обоих сценариев, а также в текущее сообщение об ошибке (оно меняется с каждым другим методом, который я пробую). Как правильно получить доступ к этому значению и загрузить его в значение Player playerStats.MaxHealth
?
GAMEMASTER:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameMaster : MonoBehaviour
{
public static GameMaster Instance;
public static int playerLevel = 1;
public static int playerExp = 0;
public static int expTilNextLevel = 1000;
public static int playerMaxHealth = 100;
void Awake () {
if (Instance == null) {
DontDestroyOnLoad(gameObject);
Instance = this;
}
else if (Instance != this){
Destroy (gameObject);
}
}
void Update() {
if(Input.GetKeyDown(KeyCode.L)){
AddExp();
}
if(Input.GetKeyDown(KeyCode.H)){
//Player.DamagePlayer(10);
}
}
public static void KillPlayer (Player player) {
Destroy (player.gameObject);
}
public static void KillEnemy (Enemy enemy) {
Destroy (enemy.gameObject);
AddExp();
}
private static void AddExp () {
playerExp += 100;
if (playerExp >= expTilNextLevel) {
playerLevel++;
playerExp = playerExp - expTilNextLevel;
expTilNextLevel = (int)((float)expTilNextLevel * 1.5f);
}
Debug.Log("Player Exp: " + playerExp + "/" + expTilNextLevel + " Player Lvl: " + playerLevel);
}
}
PLAYER:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
[System.Serializable]
public class PlayerStats {
public int MaxHealth = 100;
public int Health = 100;
public int Exp = 0;
public int Strength = 1;
}
public PlayerStats playerStats = new PlayerStats();
void Start() {
GameObject gameMaster = GameObject.FindWithTag("GameMaster") as GameObject;
playerStats.MaxHealth = gameMaster.playerMaxHealth;
Debug.Log("Player Max Health: ");
}
public void DamagePlayer(int damage){
playerStats.Health -= damage;
if (playerStats.Health <= 0) {
GameMaster.KillPlayer(this);
Debug.Log ("YOU DIED");
}
}
}
Сообщение об ошибке: «GameObject» не содержит определения «playerMaxHealth» и недоступен метод расширения «playerMaxHealth»'можно найти первый аргумент типа' GameObject '(вам не хватает директивы using или ссылки на сборку?)