找到变量变化后的时间

Any*_*nya -2 c# unity-game-engine

您如何找到自某个变量发生变化以来的时间?以一个布尔变量为例,您如何找到自上次更改以来的时间?我想使用布尔变量作为触发器(当它为真时激活触发器),但仅在经过一段精确的,恒定的时间(例如0.5秒)后才更改为真(它只能从false更改为真正).

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class hitRegistration : MonoBehaviour
{

    AudioSource hitSound;
    private bool hitState = false;
    // Use this for initialization
    void Start()
    {
        hitSound = gameObject.GetComponent<AudioSource>();
    }
    void OnMouseOver()
    {
        Debug.Log("Mouse is over game object.");
        if (Input.GetKey(KeyCode.X) && hitState == false)
        {
            hitSound.Play();
            hitState = true;
        }
    }
    private void OnMouseExit()
    {
        Debug.Log("Mouse is no longer over game object.");
        if (hitState == true)
        {
            // sound clip gets cut if the cursor leaves before its finished.
            Destroy(gameObject);
        }
    }

    // Update is called once per frame
    void Update()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

"OnMouseOver()"只是将鼠标放在相关游戏对象上时调用的函数.我想延迟销毁游戏对象,直到某个时间过去.

Eri*_*ert 9

首先,正如评论中所指出的,你可能正试图以错误的方式解决这个问题而你可能会问一个"XY"问题 - 你问一个关于提议的坏解决方案的问题,而不是问一个问题关于你面临的实际问题.

要回答您实际问过的问题,无论好坏:没有办法将行为与读取或写入C#中的变量相关联,但您可以将行为与属性相关联:

private bool hitState; // The "backing store".
private bool HitState 
{
  get 
  {
    return hitState;
  }
  set
  {
    hitState = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你会使用HitState而不是hitState整个课程的其余部分.

现在,您可以添加在读取或写入属性时发生的任何逻辑:

private DateTime hitStateTime = default(DateTime);
private bool hitState; // The "backing store".
private bool HitState 
{
  get 
  {
    return hitState;
  }
  set
  {
    hitState = value;
    hitStateSet = DateTime.Now;
  }
}
Run Code Online (Sandbox Code Playgroud)

现在你知道它何时被设置.等等.

  • @Chad是的它确实..如果你让setter部分执行所需的步骤来存储这个持久性.吸气者从那里读取它.OP没有规定这一点 (2认同)