Cel mai bun răspuns
Pentru un platformer 2D (de la o parte la alta) cel mai simplu mod de a gândi cum pentru a face acest lucru, jucătorii se vor transforma și ar face ca Sprite Renderer să se întoarcă în felul acesta și viteza Translate să se întoarcă și în acest fel. Într-adevăr, nu există o cale de căutare într-un platformer pentru un inamic. Un exemplu ar fi ceva de genul:
[SerializeField] Transform player;
[SerializeField] SpriteRenderer rend;
[SerializeField] float speed;
void Update()
{
if(player.pos.x < transform.position.x)
{
renderer.flipX = true;
transform.Translate(new Vector2(-speed, 0f));
}
else
{
renderer.flipX = false;
transform.Translate(new Vector2(speed, 0f));
}
Răspuns
Unul dintre proiectele la care lucram când am avut timp (= între slujbe: d) a fost un nivel 2d foarte clasic, vechi de școală veche motor de joc bazat pe sprite, potrivit pentru platforme și altele asemenea. Doar pentru că.
Este de fapt un lucru destul de distractiv de abordat, scriind propriul tău motor 2d, este suficient de mic încât să îl poți face lucrează de unul singur în câteva luni Mai mult de ani, deci nu este ca un motor 3d mare, unde este un proiect de plăcintă în cer, în care nu ajungi niciodată să faci un joc cu el. Este încă destul de rezonabil dacă un pic anacronic să-ți rulezi propriul motor 2d.
Majoritatea motorului meu de joc (scris în C ++, deasupra Win32 simplu) consta din: - clasa grafică (o pânză de nivel scăzut unde puteți desena linii, poligoane sau pixeli bruti) - clasă sprite, pentru desenarea animațiilor și sprite prin combinarea pieselor dintr-o imagine, precum și desenarea textului bitmap - clasă tileet, pentru gestionarea fundalurilor tileet - o ierarhie de clasă UI cu componente simple ( butoane, panouri, listă etc.) - un motor simplu de fizică (nimic fantezist, doar ceva care vă permite să mutați obiecte cu o anumită viteză și să declanșați coliziunea cu alte obiecte și peisaj) - o clasă simplă de sunet - jocul principal buclă / mașină de stare a jocului care a legat toate acestea împreună, a trimis mesaje de la mouse și tastatură, a trimis evenimente către obiectele UI, a redat toate sprite-urile, a actualizat toate obiectele de fizică etc. este practic „inima” joc. Dacă doriți să înțelegeți cum funcționează jocurile de bază (și implicit motoarele de joc), concentrați-vă pe acest domeniu, gestionând starea jocului, evenimentele jocului și bucla principală de actualizare / extragere. - codul de desen Win32 dependent de platformă într-un mic fișier
De asemenea, am scris niște convertoare de fișiere, un editor de plăci și un editor de animație folosind .NET / C ++ / CLI pentru a merge cu ele. Într-adevăr, cea mai mare parte a lucrării a fost în scrierea cursurilor de sprite și fizică, precum și a editorului de sprite.