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.
Tvůrce
Zobrazeno 19 zpráv z 19.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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.
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
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.
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.
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".
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í ?
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
myCharacterController.setFloat("Vertical") = Vertical; a jen někde v
nastavení uchovávej jestli se Vertical = Input.GetAxis("Vertical"), nebo
Vertical = Input.GetKey(keycode.W). a v metodě start si to nastavení načti.
Potom hodnotu Vertical můžeš měnit za chodu.....Snad to z toho
pochopíš.
a jen někde v nastavení uchovávej jestli se Vertical = Input.GetAxis("Vertical"), nebo Vertical = Input.GetKey(keycode.W). toto je blbost
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.
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.
Jsou dva druhy os,
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í.
Tohle zrovna chápu, nepochopil jsem co myslíš úplně na začátku, ten převod os na keycode
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.
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
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.
Zobrazeno 19 zpráv z 19.