NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: [Unity3D] Jak konvertovat axis do keycode ?

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Garrom Orc Shaman:8.10.2017 19:44

Zdravím. Používám vlastní systém pro vstupy. Ve statickém skriptu mám uložené hodnoty keycode. Poté se ve skriptech ptám metodou Input.GetKeyDow­n(keycode). Pro tlačítka to funguje velice dobře problém je když zkusím použít můj Trust dual stick gamepad GTX 28 tak analogové tyčky nefungují (což není nějak překvapující) ovšem co mně mrzí je že D-Pad je zaznamenáván jako osa (axis). Nezná někdo způsob jak převést osu na keycode bez použití InputManager ?
Děkuji.
-Garrom

Odpovědět
8.10.2017 19:44
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Garrom Orc Shaman:8.10.2017 20:36

Když tak nad tím přemýšlím tak spíše hledám nějaký způsob jak číst osy bez použití InputManageru. Když budu mít osy jako float nebude žádný problém převést je na bool.

Nahoru Odpovědět
8.10.2017 20:36
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Garrom Orc Shaman
dez1nd:9.10.2017 6:15

tak analogové tyčky nefungují (což není nějak překvapující) ovšem co mně mrzí je že D-Pad je zaznamenáván jako osa (axis).

vidím to tak, že nemáš správné ovladače. Pracuje ti ten ovladač správně ? někde v nastavení PC se dá zjistit které tlačítko jak reaguje a případně přenastavit, jinak by to mělo fungovat tak že analog = osa, vše ostatní jsou tlačítka

 
Nahoru Odpovědět
9.10.2017 6:15
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:9.10.2017 11:18

Ano, gamepad funguje NAPROSTO správně. Otázka se týkala toho jak ČÍST osy bez použití InputManager protože InputManager nemá možnost měnit binding runtime. Jinak jsi sem velice dobře vědom toho že analog a d-pad jsou osy ovšem to mi je k ničemu když neznám způsob jak je číst.
Edit:
Ano, d-pad jsou tlačítka bohužel Unity3D je chápe jako osu.

Editováno 9.10.2017 11:20
Nahoru Odpovědět
9.10.2017 11:18
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Garrom Orc Shaman
dez1nd:9.10.2017 11:34

A jak chceš převést osu (float) na keycode (bool)? Nejsem si jist ale budeš si muset vytvořit třídu která ti to předělá.
A k tomu že d-pad jsou osy, je to v nastavení projectu v input manageru d-pady jsou asi stejné jako šipky na klávesnici, tudíš jsou to osy.

Editováno 9.10.2017 11:34
 
Nahoru Odpovědět
9.10.2017 11:34
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:9.10.2017 11:41

Ano to bude ve třídě ale já se ptám jak číst osy bez použití input manageru protože dělám vlastní systém vstupu který na rozdíl od input manageru může být měněn za chodu protože já nechci psát hráčům "Now press "W" or whatever what you set as "Forward" to move forward".

Nahoru Odpovědět
9.10.2017 11:41
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
dez1nd
Člen
Avatar
dez1nd:9.10.2017 11:59

Normálně bych ten Input manager použil, napsal bych si ale vlastní třídu ve které bych to všechno měnil, ostatně na tom je založeno spoustu videí na YT.

 
Nahoru Odpovědět
9.10.2017 11:59
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:9.10.2017 12:26

Pokračuj...
Takže jestli jsem tě pochopil ty chceš nějak zastínit input manager a reagovat na jiná tlačítka / osy než jsou nastavena v input manageru. To zní zajímavě. Nemáš náhodou link na jedno z takových videí ?

Nahoru Odpovědět
9.10.2017 12:26
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Garrom Orc Shaman
dez1nd:9.10.2017 12:41

Promiň, ale jsem teď v práci, tekže nemůžu hledat na YT.
Já jsem si vytvořil svoji třídu InputManager, ve kterém jsem si přiřadil float Vertical, float Horizontal. Dále v update jsem měl že myCharacterCon­troller.setFlo­at("Vertical") = Vertical; a jen někde v nastavení uchovávej jestli se Vertical = Input.GetAxis("Ver­tical"), nebo Vertical = Input.GetKey(ke­ycode.W). a v metodě start si to nastavení načti. Potom hodnotu Vertical můžeš měnit za chodu.....Snad to z toho pochopíš.

 
Nahoru Odpovědět
9.10.2017 12:41
Avatar
dez1nd
Člen
Avatar
Odpovídá na dez1nd
dez1nd:9.10.2017 12:45

a jen někde v nastavení uchovávej jestli se Vertical = Input.GetAxis("Ver­tical"), nebo Vertical = Input.GetKey(ke­ycode.W). toto je blbost :)

 
Nahoru Odpovědět
9.10.2017 12:45
Avatar
dez1nd
Člen
Avatar
dez1nd:9.10.2017 12:47

Důležité je aby jsi to nedělal takto.

pohyb.vpred = Input.GetKey(keycode.w); // protože to nejde měnit

ale aby jsi to udělal takto

public vpred = Input.GetKey(keycode.w); // toto už můžeš nahradit za jinej keycode
pohyb.vpred = vpred;
 
Nahoru Odpovědět
9.10.2017 12:47
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:9.10.2017 13:34

To neřeší jak reagovat na osy z gamepadu. To co jsi popsal je princip mého aktuálního systému vstupu. Podívej se ZDE . Já nepotřebuji uchovávat osy já potřebuji reagovat na šestou a sedmou osu a né nahradit systém os jelikož já osy vůbec nepotřebuji jen na ně musím reagovat.

Nahoru Odpovědět
9.10.2017 13:34
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na Garrom Orc Shaman
Garrom Orc Shaman:9.10.2017 13:53

Jinými slovy já nepotřebuji virtuální osy ale potřebuji reagovat na fyzické osy aneb. analogové páčky a d-pad.
Také jsem se zapomněl zmínit že gamepad který používám má rozložení na PS3 a ne na xbox jak jsi si nejspíše myslel.

Nahoru Odpovědět
9.10.2017 13:53
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Garrom Orc Shaman
dez1nd:10.10.2017 6:16

V tom případě, tě bohužel nechápu :-S

 
Nahoru Odpovědět
10.10.2017 6:16
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:10.10.2017 16:22

Jsou dva druhy os,

  • Virtuální
  • Fyzické

Virtuální osy jsou v podstatě jen čísla která jsou manipulována stiskem tlačítka. Když se podíváš do input manageru tak všechny osy které tam vidíš jsou virtuální jelikož neexistují ve fyzickém světě ale jsou to jen čísla založená v paměti.
V technologii herních zařízení existují nejen tlačítka (v počítači zpracováno jako keycode) ale také ovládací prvky jako jsou kola volantů nebo analogové páčky. Zpracovávat tyto prvky jako tlačítka nedává smysl jelikož na rozdíl od tlačítek která buď to jsou nebo nejsou zmáčknutá, tyto prvky mohou být v různých polohách. Osy mají hodnotu od plně negativní k plně pozitivní takže pro čtyři směry potřebuješ dvě osy , jednu horizontální a jednu vertikální.

Nahoru Odpovědět
10.10.2017 16:22
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
dez1nd
Člen
Avatar
Odpovídá na Garrom Orc Shaman
dez1nd:10.10.2017 17:36

Tohle zrovna chápu, nepochopil jsem co myslíš úplně na začátku, ten převod os na keycode

 
Nahoru Odpovědět
10.10.2017 17:36
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:10.10.2017 18:11

To je problém se kterým bych se popral potom. Momentálně je největší problém druhá zpráva v tomto vláknu.

Když tak nad tím přemýšlím tak spíše hledám nějaký způsob jak číst osy bez použití InputManageru. Když budu mít osy jako float nebude žádný problém převést je na bool.

Nahoru Odpovědět
10.10.2017 18:11
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:10.10.2017 18:15

Také hledám odpověď a zdá se to být nemožné. Nakonec se asi uchýlím k nějaké DLL. Problém je v tom že neznám žádnou dll pro c# umožnující zpracovávat herní nařízení. Znám DirectInput ale ta bude spíše pro c++ a o verzi pro c# nevím, pokud vůbec existuje

Nahoru Odpovědět
10.10.2017 18:15
Life for Code, Code for Life. I chose my path, I should stick on it.
Avatar
Odpovídá na dez1nd
Garrom Orc Shaman:11.10.2017 11:20

Tak to vypadá že budu používat SharpDX což mi umožňuje přistupovat k DirectInput s použitím C#. Už jsem s tím trochu experimentoval a zdá se že to funguje v pohodě. DirectInput se sice "Oficiálně" nedoporučuje ale já v tom nevidím žádný problém.

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
11.10.2017 11:20
Life for Code, Code for Life. I chose my path, I should stick on it.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.