Schioccare le forme insieme nel gioco


8

Sto cercando di capire come far combaciare le forme insieme al giocatore che può muoversi su una tela.

inserisci qui la descrizione dell'immagine

Mentre il quadrato si avvicina all'altro oggetto, voglio tirare quella forma (data una certa vicinanza) e farlo scattare perfettamente lungo il bordo dell'oggetto.

Regole:

  • Solo se i bordi sono paralleli tra loro
  • Se un riquadro figlio (trascinato) ha la metà della dimensione del riquadro padre (in avvicinamento), il punto medio del bordo del riquadro padre può determinare se il figlio esegue uno snap a sinistra / a destra / su / giù

inserisci qui la descrizione dell'immagine

Qualcuno ha fatto qualcosa del genere? Sto usando c # e unità. Saluti.

Risposte:


7

Ho scritto un prototipo di qualcosa del genere. Ho creato alcune risorse che assomigliavano a questa:

inserisci qui la descrizione dell'immagine

Quindi sostanzialmente questo oggetto "ShipPart" ha punti di snap predefiniti. Questi quattro collider aiuteranno a determinare se stai tentando di far scattare un oggetto in posizione o meno.

Successivamente ho creato una classe ShipPart, che contiene alcune cose come:

//Neighbor information
ShipPart Left, Right, Top, Bottom;

//current rotation
float Rotation;

//The ship core it is attached to
Ship Ship;

//The coordinates in references to the ship core
int X ;
int Y ;

Contiene inoltre funzioni e proprietà per facilitare il trascinamento della selezione e il controllo dello stato dei ShipParts vicini.

Una funzione importante è la funzione Attach (), che collegherà questo ShipPart alla tua nave.

public void Attach(Ship ship, int x, int y)
{
    GetComponent<Rigidbody2D> ().isKinematic = true;

    Ship = ship;

    X = x;
    Y = y;

    transform.parent = Ship.transform;
    transform.position = Vector2.zero;
    transform.localPosition = new Vector2(x, -y);
}

Quindi, infine, la classe Ship, tiene traccia del tuo pezzo Core, di tutte le parti allegate, tutti i dati delle navi vengono gestiti qui. Puoi effettuare il raycast per le parti di navi in ​​questa classe. Controlla la parte che stai trascinando per vedere se qualcuno dei collider si sta scontrando con altre parti.

In caso di collisione, verificare se la rotazione rientra nella soglia specificata, quindi bloccarla in posizione.

Questo in realtà è molto più complicato da spiegare di quanto pensassi. Fammi sapere se hai domande e approfondirò qualsiasi cosa tu abbia bisogno di più aiuto.

inserisci qui la descrizione dell'immagine


Grazie per una risposta ben illustrata: ho una domanda :), i punti di snap predefiniti, sono questi punti di cui stai verificando la prossimità? Quindi quando sono vicini, viene visualizzata la casella verde .. il che significa che se si rilascia ora, lo scatto viene quindi eseguito?
Dolyth,

1
Sì, le caselle verdi indicano che è disponibile uno snap e dove si bloccherà. Il collider esiste in questa stessa area ed è ciò che viene utilizzato per determinare se è possibile scattare o meno. Trasmetto in streaming quattro punti mentre muovo attivamente una parte per determinare se stiamo sovrapponendo o meno un punto di aggancio e, se lo siamo, quanto siamo vicini a quell'oggetto.
Jgallant,

come si visualizzano le caselle verdi quando si scattano? Hai tutti gli script in github da qualche parte? Grazie, Melissa
MContributor
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.