Jak kódovat fyzikálně založený znakový ovladač v Unity3D

Jak kódovat fyzikálně založený znakový ovladač v Unity3D
Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti. Přečtěte si více.

Ovladač postavy vám může pomoci implementovat do vaší hry jednoduchou pohybovou fyziku.





K ovladačům postav Unity3D můžete přistupovat z několika úhlů. Pokud používáte knihovnu s výkonnými třídami a funkcemi, vytvoření ovladače postav založeného na fyzice může být zábavným místem pro zahájení vývoje hry.





Krok 1: Vytvořte scénu s objekty hráče a terénu

  jednotný znakový ovladač 3D prostor

Jakmile je Unity otevřené a vytvoříte nový projekt, můžete začít přidáním několika objektů do vaší scény. Tyto objekty můžete vytvářet v libovolném pořadí, ale buďte opatrní, abyste se ujistili, že používáte správná nastavení. I když je tento projekt základní, je to skvělý způsob začněte s Unity .





3D rovinný objekt pro terén

První objekt, který přidáte do scény, je rovina. Klepněte pravým tlačítkem myši do podokna hierarchie a najeďte na něj 3D objekt a vyberte Letadlo ze seznamu. Můžete upravit velikost letadla, abyste získali větší testovací plochu, ale nemusíte s tím dělat nic jiného.

Model přehrávače krychlových objektů

Dále je čas přidat do scény kostku, která bude fungovat jako model hráče. Klepněte pravým tlačítkem myši do podokna hierarchie a najeďte na něj 3D objekt a vyberte Krychle z rozbalovací nabídky. Umístěte novou kostku tak, aby seděla nad rovinou, kterou jste také přidali. Musíte také přidat komponentu tuhého tělesa, abyste z krychle udělali fyzikální objekt.



Vyberte kostku a přejděte do Inspektora. Klikněte na Přidat komponentu ve spodní části panelu vyhledejte tuhé těleso a vyberte Pevné tělo ze seznamu, když se objeví. Zaškrtněte Použijte Gravitaci zaškrtněte políčko a zbytek nastavení nechte tak, jak jsou.

Můžeš najít aktiva Unity zdarma online k vylepšení vašeho projektu.





Fotoaparát třetí osoby

Vaše scéna by již měla mít kameru, kterou můžete použít jako svou třetí osobu. Umístěte kameru tak, aby seděla v pohodlné poloze třetí osoby nad vaší kostkou. Před přetažením kamery na krychli přejděte do podokna hierarchie a vytvořte vztah rodič-dítě. Kamera bude automaticky sledovat vaši kostku, když je toto hotovo.

Rychlý test

I když vaše scéna ještě nemá žádný kód, můžete otestovat práci, kterou jste dosud dělali. Klikněte na Hrát si tlačítko v horní části obrazovky pro načtení hry. Měli byste vidět, jak kostka padá a přistává na vrcholu letadla, a kamera by měla sledovat kostku, jak padá.





Krok 2: Nastavte soubor C#

Nyní je čas vytvořit soubor C#, abyste mohli začít programovat nějaký pohyb. Přejděte do sekce Projekt, klikněte pravým tlačítkem myši, najeďte myší na Vytvořit a ze seznamu vyberte Složka. Pojmenujte složku Scripts nebo něco podobného.

jak společně sledovat film online

Procházejte novou složku a opakujte proces, ale ze seznamu vyberte C# Script. Tomuto souboru můžete dát libovolný název, ale bude to také název hlavní funkce v něm. Ujistěte se, že váš nový C# vypadá takto.

 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;

public class Character_Control: MonoBehaviour {
    void Start() {
    }

    void Update() {
    }
}

Krok 3: Použijte C# k vytvoření dopředného a zpětného pohybu s rychlostí

Před přidáním do funkcí v souboru skriptu deklarujte některé veřejné proměnné. První na řadě je pevné tělo pro uložení modelu hráče. Vyhlašte také plovák, abyste mohli sledovat rychlost pohybu. Tyto proměnné jsou v hlavní třídě, mimo jakékoli funkce.

 public Rigidbody rigidbody; 
public float speed;

Dále je čas přidat jeden řádek kódu do funkce Start. To používá deklaraci GetComponent k přiřazení komponenty tuhého tělesa krychle k proměnné tuhého tělesa, kterou jste vytvořili.

 void Start() { 
    rigidbody = GetComponent < Rigidbody > ();
}

Nyní můžete přidat nějaký kód, který rozhýbe váš model hráče. Tento kód je pěkný a jednoduchý; potřebujete pouze dva příkazy if, jeden pro pohyb vpřed a jeden pro pohyb vzad. Pomocí Input.GetKey můžete určit, kdy je klávesa stisknuta. V tomto případě hledáte stisk kláves W a S.

Stisknutím kterékoli z těchto kláves přidáte sílu do tuhého tělesa krychle pomocí rigidbody.AddForce. Směr a rychlost přidané síly můžete vypočítat vynásobením její polohy v ose Z (transform.forward) proměnnou rychlosti. Neexistuje žádná třída transform.backward, kterou byste mohli použít pro zpětný pohyb, ale toho lze dosáhnout vynásobením transform.forward číslem -1.

 if (Input.GetKey("w")) { 
    rigidbody.AddForce(transform.forward * speed);
}

if (Input.GetKey("s")) {
    rigidbody.AddForce((transform.forward * -1) * speed);
}

Uložte soubor C# a přejděte zpět do Unity. Najděte skript v podokně Projekt a přetáhněte jej na kostku znakového modelu v hierarchii, abyste přiřadili skript danému objektu. Když vyberete kostku, měli byste vidět skript jako komponentu v podokně Inspektor. Klikněte dovnitř proměnného rámečku tuhého tělesa a vyberte tuhé těleso své krychle.

Nyní můžete použít tlačítko Play ke spuštění hry a otestování kódu. Ale počkej! Vyskytl se problém; vaše kostka se bude spíše kutálet, než aby se pohybovala přímo vpřed. Vraťte se k inspektorovi krychle, najděte komponentu Pevné tělo a před dalším spuštěním hry zaškrtněte políčka Freeze Rotation na ose X a Z. Nyní by to mělo fungovat.

Krok 4: Použijte C# k vytvoření levého a pravého soustružení s kroutícím momentem

Na rozdíl od pohybu vzad a vpřed vyžaduje otáčení modelu hráče kostky sílu zvanou krouticí moment. K tomu potřebujete další proměnnou: public float pro přiřazení hodnoty točivého momentu.

 public float torque;

Kód pro odbočení doleva a doprava v tomto skriptu je velmi podobný kódu používanému pro pohyb vpřed a vzad. Existuje -li příkaz pro každý směr, který hledá stisk klávesy D (otočení doprava) nebo klávesy A (otočení vlevo).

notebook říká, že je připojen, nenabíjí se

Prvním krokem v každém příkazu if je určení směru zatáčky pomocí metody Input.GetAxis a přiřazení výsledku proměnné float. Poté pomocí rigidbody.AddTorque aplikujte rotační sílu na model postavy Cube vynásobením točivého momentu, otočení a osy Z kostky.

 if (Input.GetKey("d")) { 
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

if (Input.GetKey("a")) {
    float turn = Input.GetAxis("Horizontal");
    rigidbody.AddTorque(transform.up * torque * turn);
}

Uložte si kód a vraťte se zpět do Unity a otestujte jej. Můžete upravit rychlost a dobu náběhu rotace modelu vašeho přehrávače výběrem krychle a úpravou proměnných hmotnosti, tažení a točivého momentu tuhého tělesa ve vašem skriptu. Tento příklad projektu se ustálí na 1 hmotě, 1 tažení a 2 kroutícím momentu.

Krok 5: Použijte C# k naprogramování skákání

Jako poslední prvek tohoto ovladače postav Unity je čas vytvořit svůj skok. Vytvoření skoku je složitější než ostatní základní ovládací prvky, na kterých jste pracovali, protože skok musí mít omezenou výšku. Začněte tím, že přidáte soukromou booleovskou proměnnou, abyste mohli sledovat, zda hráč skáče nebo ne.

 private bool isJumping = false;

Tato proměnná neudělá nic bez příkazu, který ji otestuje. V tomto případě stačí základní příkaz if ke kontrole, zda je proměnná nepravdivá. Přidání stejné podmínky k dalšímu příkazu if zastaví hráče v pohybu během skoků.

 if (!isJumping) { 
}

Přidání stejné podmínky k dalšímu příkazu if zastaví hráče v pohybu během skoků.

iphone 12 pro max vs pro
 if (Input.GetKey("w") && !isJumping) { 
    rigidbody.AddForce(transform.forward * speed);
}

V rámci příkazu !isJumping if potřebujete další příkaz if, tentokrát pro kontrolu stisknutí tlačítka skoku. Nastavení proměnné isJumping na hodnotu true je první věcí, kterou musíte udělat v tomto příkazu if, po kterém následuje deklarace rigidbody.angularVelocity k odstranění sil aktuálně působících na krychli.

Nyní můžete použít deklaraci rigidbody.AddForce k přidání síly do krychle na její ose Z, čímž se vytvoří pohyb nahoru jako skok. Nakonec je čas použít deklaraci vyvolání k volání jiné funkce po 0,8 sekundách.

 if (!isJumping) { 
    if (Input.GetKeyDown("space")) {
        isJumping = true;
        rigidbody.AddForce(transform.up * speed * 120);
        rigidbody.angularVelocity = Vector3.zero;
        Invoke("Move_Setter", 0.8 f);
    }
}

Tato funkce nastaví proměnnou isJumping zpět na false, takže pohyb/skákání je možné znovu a zpoždění 0,8 sekundy zastaví její spuštění příliš brzy.

 void Move_Setter() { 
    isJumping = false;
}

Krok 6: Otestujte svůj kód ovladače postavy

Uložte soubor a vraťte se do Unity, abyste otestovali kód, který jste napsali. Stejně jako většina kompilátorů poskytuje Unity informace o chybách a dalších problémech s vaším kódem, aby bylo snazší zjistit, co byste mohli potřebovat změnit. Celý kód tohoto projektu si můžete prohlédnout na našem webu GitHub strana.

Vytváření ovladačů znaků Unity

Při vytváření ovladače postavy v Unity si můžete vybrat z celé řady různých přístupů. Jednou z možností je použití fyziky, ale pokud chcete, můžete také použít vestavěný systém ovládání postavy.

Prozkoumávání různých možností, jako je toto, je skvělý způsob, jak se dozvědět o nástrojích, jako je Unity.