Porto ancora un'altra domanda con il trascinamento del mouse (sto usando Unity con C #), ma con un dettaglio particolare meno comune: l'esistenza di ostacoli nel mezzo del percorso attraverso il quale si verifica il trascinamento (spazio 3D, non 2D) .
Lasciatemi spiegare. Supponiamo di avere un piano sul quale voglio trascinare un cubo chiamato "obj". È facile. Ecco la mia semplice implementazione per questo:
void Update () {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray, out hit, 1000000))
obj.transform.position = new Vector3(hit.point.x,0.25F,hit.point.z);
}
Funziona. Tuttavia, supponiamo che io abbia anche alcuni altri cubi sull'aereo, che sono gli ostacoli. Ovviamente, quando il giocatore muove "obj" sull'aereo, tale movimento dovrebbe essere bloccato dagli ostacoli. E poi, mentre si scontra con gli ostacoli, "obj" dovrebbe spostarsi solo ai lati di quell'ostacolo. Se il mouse viene spostato e "obj" smette di scontrarsi con ostacoli, riprende il movimento libero di trascinamento.
Per rendere più difficile la sfida, sto cercando di raggiungerla senza l'uso di componenti RigidBody agli ostacoli (l'oggetto trascinato può averlo). Qualche idea su qual è il modo più efficace per raggiungere questo obiettivo? Grazie molto!
EDIT: I commentatori hanno portato alla mia attenzione che dovrei menzionare che gli oggetti possono ruotare quando scattano.
EDIT 2: Considerando la difficoltà della formulazione originale, ho cambiato la domanda permettendo l'uso di componenti Rigidbody sugli oggetti trascinati. La soluzione non è in grado di utilizzare i componenti Rigidbody per gli ostacoli.