2014-12-15 1 views
3

나는 단결로 시작 했으므로 지식 부족을 용납하시기 바랍니다. 나는 마이크로 소프트의 xna 환경으로 프로그래밍하기 시작했다. 나는 이제 단결로 전환했지만 어려움을 겪고 있습니다. Xna에는 눌려진 버튼/키를 확인하는 "KeyboardState"기능이있었습니다. 유니티에는 동일한 기능이 없으므로 지난 15 개 프레임에 대해 입력을 저장/캐시 할 수있는 방법이 궁금합니다. Event.KeyboardEvent 및 KeyCode가 도움이 될지도 모르지만 길을 잃었습니다. 아무도 도와 줄 수 있니 ???Unity C# : 캐싱 키보드/컨트롤러 상태?

답변

1

15 프레임의 입력을 저장하거나 캐시하고 싶습니까? 입력을 수집하는 방법을 알려주고, 글로벌 Keycode[] 배열에 저장하여 원하는 경우 입력을 캐시 할 수 있습니다.

이 코드는 눌려진 키를 콘솔에 인쇄합니다.

void OnGUI() { 
    Event e = Event.current; 
    if (e.isKey){ 
     string key = e.keyCode.ToString(); 
     Debug.Log(key); 
    } 
} 
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); 
     } 
    } 

}