我刚开始团结,所以请原谅任何缺乏知识。我开始使用microsoft的xna环境进行编程。我现在已经转为团结,但我遇到了麻烦。 Xna有一个" KeyboardState"检查按下了哪些按钮/键的功能。我听说Unity没有相同的功能,所以我想知道如何存储/缓存过去15帧的输入。我听说过Event.KeyboardEvent和KeyCode可能有所帮助,但我输了。谁能请帮忙???
答案 0 :(得分:1)
您想要将输入存储或缓存15帧吗?我可以告诉你如何收集输入,你可以通过将其存储在全局Keycode[]
数组中来从中缓存它。
此代码会将正在按下的键打印到您的控制台。
void OnGUI() {
Event e = Event.current;
if (e.isKey){
string key = e.keyCode.ToString();
Debug.Log(key);
}
}
答案 1 :(得分:0)
您可以迭代所有可能的密钥代码并存储其值以供将来使用:
using UnityEngine;
using System.Collections.Generic;
public class KeyboardState : MonoBehaviour {
/// <summary>
/// Keyboard input history, lower indexes are newer
/// </summary>
public List<HashSet<KeyCode>> history=new List<HashSet<KeyCode>>();
/// <summary>
/// How much history to keep?
/// history.Count will be max. this value
/// </summary>
[Range(1,1000)]
public int historyLengthInFrames=10;
void Update() {
var keysThisFrame=new HashSet<KeyCode>();
if(Input.anyKeyDown)
foreach(KeyCode kc in System.Enum.GetValues(typeof(KeyCode)))
if(Input.GetKey(kc))
keysThisFrame.Add(kc);
history.Insert(0, keysThisFrame);
int count=history.Count-historyLengthInFrames;
if(count > 0)
history.RemoveRange(historyLengthInFrames, count);
}
/// <summary>
/// For debug Purposes
/// </summary>
void OnGUI() {
for(int ago=history.Count-1; ago >= 0; ago--) {
var s=string.Format("{0:0000}:", ago);
foreach(var k in history[ago])
s+="\t"+k;
GUILayout.Label(s);
}
}
}