如何在 Unity 中不活动后使光标消失
How to make cursor dissapear after inactivity in Unity
我的目标很简单,就像很多应用程序一样,我想让我的光标在我的用户不活动一段时间后不可见。
我的解决方案似乎并没有真正优化,这是算法:
void Start {
Timer t = new Timer(5000);//Create a timer of 5 second
t.start();
}
void Update {
if(MouseMoved){
t.reset();
}
timeLeft = t.deltaTime;
if ( timeLeft == 5000 )
{
Cursor.visible = false;
}
}
我真的不喜欢在每一帧都检查如果鼠标移动,我更希望我的鼠标移动触发一些东西,但我迷路了,有人有更好的解决方案吗?
有两种方法可以在更新循环之外检查此类事情,据我所知:
1 - 自定义事件。
编写您自己的自定义事件将允许您在更新函数之外调用类似 "OnMouseMove()" 的内容,它只会在鼠标光标的位置发生变化时执行。
2 - 协程
创建一个单独的协同程序可以减少执行此检查的频率。为此,您创建一个 IEnumerator 并将鼠标移动逻辑放入其中。类似于:
IEnumerator MouseMovement()
{
while(true)
{
if(MouseMoved)
{
//Do stuff
}
yield return new WaitForSeconds(1f);
}
}
协程在 运行 时每秒执行一次检查。您可以通过以下语句启动协程:
StartCoroutine(MouseMovement());
要停止它,您可以调用
StopCoroutine(MouseMovement());
如果你在计时器达到 0 时启动它并在光标移动时停止它,你也可以阻止协程一直运行,只在光标不活动时使用它。
这应该是完成任务的好方法,使用协程,没有任何内存问题:
private Coroutine co_HideCursor;
void Update()
{
if (Input.GetAxis("Mouse X") == 0 && (Input.GetAxis("Mouse Y") == 0))
{
if (co_HideCursor == null)
{
co_HideCursor = StartCoroutine(HideCursor());
}
}
else
{
if (co_HideCursor != null)
{
StopCoroutine(co_HideCursor);
co_HideCursor = null;
Cursor.visible = true;
}
}
}
private IEnumerator HideCursor()
{
yield return new WaitForSeconds(3);
Cursor.visible = false;
}
我的目标很简单,就像很多应用程序一样,我想让我的光标在我的用户不活动一段时间后不可见。
我的解决方案似乎并没有真正优化,这是算法:
void Start {
Timer t = new Timer(5000);//Create a timer of 5 second
t.start();
}
void Update {
if(MouseMoved){
t.reset();
}
timeLeft = t.deltaTime;
if ( timeLeft == 5000 )
{
Cursor.visible = false;
}
}
我真的不喜欢在每一帧都检查如果鼠标移动,我更希望我的鼠标移动触发一些东西,但我迷路了,有人有更好的解决方案吗?
有两种方法可以在更新循环之外检查此类事情,据我所知:
1 - 自定义事件。
编写您自己的自定义事件将允许您在更新函数之外调用类似 "OnMouseMove()" 的内容,它只会在鼠标光标的位置发生变化时执行。
2 - 协程
创建一个单独的协同程序可以减少执行此检查的频率。为此,您创建一个 IEnumerator 并将鼠标移动逻辑放入其中。类似于:
IEnumerator MouseMovement()
{
while(true)
{
if(MouseMoved)
{
//Do stuff
}
yield return new WaitForSeconds(1f);
}
}
协程在 运行 时每秒执行一次检查。您可以通过以下语句启动协程:
StartCoroutine(MouseMovement());
要停止它,您可以调用
StopCoroutine(MouseMovement());
如果你在计时器达到 0 时启动它并在光标移动时停止它,你也可以阻止协程一直运行,只在光标不活动时使用它。
这应该是完成任务的好方法,使用协程,没有任何内存问题:
private Coroutine co_HideCursor;
void Update()
{
if (Input.GetAxis("Mouse X") == 0 && (Input.GetAxis("Mouse Y") == 0))
{
if (co_HideCursor == null)
{
co_HideCursor = StartCoroutine(HideCursor());
}
}
else
{
if (co_HideCursor != null)
{
StopCoroutine(co_HideCursor);
co_HideCursor = null;
Cursor.visible = true;
}
}
}
private IEnumerator HideCursor()
{
yield return new WaitForSeconds(3);
Cursor.visible = false;
}