[英]How do i use an arduino controller and a keyboard at the same time?
如何同時使用控制器和鍵盤?
所以我使用 Arduino 作為我的控制器,使用ReadByte()
作為我的輸入 這是我的播放器腳本
void Start()
{
controller = GetComponent<Controller2D>(); // Je krijgt toegang tot de script Controller2D
sp.DtrEnable = true;
sp.ReadTimeout = 100;
sp.Open(); // Uw serialpoort openen
}
void Update()
{
if (sp.IsOpen) // Als uw serialpoort open is
{
try
{
print(sp.ReadByte()); // Ga je de inkomende waarde lezen
}
catch (System.Exception) { }
}
if (controller.collisions.above || controller.collisions.below) // Als je een botsing hebt van boven of beneden dan ga je stoppen met springen
{
moveDistance.y = 0;
}
if (Input.GetKeyDown(KeyCode.Space) || sp.ReadByte() == 1 && controller.collisions.below) // Als je op spatie drukt en als je op een platform staat dan ga je boven springen
{
moveDistance.y = jumpDistance; // Je gaat springen langs de y-as
//moveDistance.x = 0; // Als je alleen springt dan ga je loodrecht boven en niet schuin
}
Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); // Je neemt de Horizontal en vertical inputs van de unity zelf
if (sp.ReadByte() == 2) // Als je de 2de drukknop indrukt
{
moveDistance.x = -moveSpeed ; // Ga je links bewegen
}
if (sp.ReadByte() == 3) // Als je de 3de druknop indrukt
{
moveDistance.x = moveSpeed; // Ga je rechts bewegen
}
moveDistance.x = input.x * moveSpeed; // Door input kan je nu links of rechts bewegen met de pijlen
moveDistance.y += gravity * Time.deltaTime; // Je valt met een zwaartekracht dus je gaat sneller en sneller vallen.
controller.Move(moveDistance * Time.deltaTime); // Leest de input
}
通常我希望同時使用控制器和鍵盤作為我的輸入,但是在我運行這個游戲后,我立即得到一個
TimeoutException:操作已超時
錯誤,但我可以使用 Arduino 作為輸入,但它只是由於某種原因被禁用的鍵盤
可能是錯誤的原因不確定,但一般來說我不會重復使用sp.ReadByte()
而只使用一次,存儲值並比較:
void Update()
{
byte arduinoInput = 0;
if (sp.IsOpen) // Als uw serialpoort open is
{
try
{
arduinoInput = sp.ReadByte();
print(arduinoInput); // Ga je de inkomende waarde lezen
}
catch (System.Exception) { }
}
if (controller.collisions.above || controller.collisions.below) // Als je een botsing hebt van boven of beneden dan ga je stoppen met springen
{
moveDistance.y = 0;
}
if (Input.GetKeyDown(KeyCode.Space) || arduinoInput == 1 && controller.collisions.below) // Als je op spatie drukt en als je op een platform staat dan ga je boven springen
{
moveDistance.y = jumpDistance; // Je gaat springen langs de y-as
//moveDistance.x = 0; // Als je alleen springt dan ga je loodrecht boven en niet schuin
}
Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); // Je neemt de Horizontal en vertical inputs van de unity zelf
if (arduinoInput == 2) // Als je de 2de drukknop indrukt
{
moveDistance.x = -moveSpeed ; // Ga je links bewegen
}
if (arduinoInput == 3) // Als je de 3de druknop indrukt
{
moveDistance.x = moveSpeed; // Ga je rechts bewegen
}
moveDistance.x = input.x * moveSpeed; // Door input kan je nu links of rechts bewegen met de pijlen
moveDistance.y += gravity * Time.deltaTime; // Je valt met een zwaartekracht dus je gaat sneller en sneller vallen.
controller.Move(moveDistance * Time.deltaTime); // Leest de input
}
當端口尚未打開但您已經嘗試讀取或僅由多次訪問引起時,可能會為幀拋出錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.