初めて実際にプロパティを実装しようとしていますが、私が気付いていない基本的なものが不足しているようです。私は一度スクリプトから別の値にbool値を渡して、それを常にUpdate()
を使って上げようとしています。プロパティが他のクラスに渡されない
GameManager.cs
私はプレーヤーのアイドル状態をチェックしています。プレイヤーがアイドル状態になると、プロパティーはUserActive
に設定されます。 PreCountdownTimer.cs
で私はちょうど_userActive
が更新しているかどうかを確認するためにテストしていますが、そうではありません。 GameManager()
のプロパティ値がPreCountdownTimer()
に渡されないのはなぜですか?
GameManager.cs
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public static GameManager Instance = null;
public Object introScene;
private bool _userActive;
public bool UserActive { get; set; }
private bool _onIntroScreen;
public bool OnIntroScreen { get; set; }
public GameObject preCountdownTimerPrefab;
private GameObject _preCountdownTimerInstance;
private float _preCountdownLength;
public float PreCountdownLength { get; protected set; }
private float _preCountdownInterval;
public float PreCountdownInterval { get; protected set; }
private float _checkMousePositionTimingInterval = 0.1f;
private Vector3 _currentMousePosition;
private Vector3 _prevMousePosition;
private Scene _currentScene;
void Awake()
{
if (Instance == null)
Instance = this;
else if (Instance != null)
Destroy(gameObject);
DontDestroyOnLoad(gameObject);
}
void OnEnable()
{
SceneManager.sceneLoaded += OnSceneLoaded;
}
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
_currentScene = scene;
}
void Start()
{
PreCountdownLength = 5.0f;
PreCountdownInterval = 1.0f;
_onIntroScreen = true;
_userActive = false;
_prevMousePosition = Input.mousePosition;
InvokeRepeating("LastMousePosition", 0, _checkMousePositionTimingInterval);
}
void Update()
{
_currentMousePosition = Input.mousePosition;
// CHECK FOR PLAYER IDLE
if (_currentScene.name != introScene.name)
{
_onIntroScreen = false;
if (_currentMousePosition != _prevMousePosition)
{
_userActive = true;
}
else
{
_userActive = false;
}
}
else if (_currentScene.name == introScene.name)
{
_onIntroScreen = true;
}
// IF IDLE START PRE-COUNT TIMER ELSE DESTROY
if (!_userActive && !_onIntroScreen)
{
if (_preCountdownTimerInstance == null)
_preCountdownTimerInstance = Instantiate(preCountdownTimerPrefab);
}
else if (_userActive)
{
if (_preCountdownTimerInstance != null)
Destroy(_preCountdownTimerInstance);
}
}
void LastMousePosition()
{
_prevMousePosition = Input.mousePosition;
}
}
PreCountdownTimer.csあなたは、フィールドやプロパティを持っているGameManager
で
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PreCountdownTimer : MonoBehaviour {
private IEnumerator preCounter;
private float _preCountdownInterval;
private bool _preCountdownActive;
private bool _userActive;
private bool _onIntroScreen;
private float _timerLength;
void Start()
{
_timerLength = GameManager.Instance.PreCountdownLength;
}
void Update()
{
_userActive = GameManager.Instance.UserActive;
_onIntroScreen = GameManager.Instance.OnIntroScreen;
Debug.Log("User Activity: " + _userActive);
}
}
どこからPreCountdownTimer.Updateメソッドが呼び出されていますか? – Andrew