2017-05-18 2 views
0

Dans mon jeu, le joueur utilise un analogue virtuel pour viser un objet spécifique, quand il libère l'analogue, le personnage doit se déplacer vers cet objet. Je veux stocker que la position de l'objet (plus comme la direction où le joueur doit se déplacer basée sur la position de l'objet) dans une variable mais seulement si elle était la dernière chose que le rayon est entré en collision avec:Store Raycast hit info

Vector3 targetPos; 

RaycastHit hit; 
if (Physics.Raycast (pos, dir, out hit, 10, targetLayer)) { 

    Vector3 moveDir = (hit.point - transform.position).normalized; 
    targetPos = moveDir; 
} else { 
    targetPos = Vector3.zero; 
} 

En faisant cette variable targetPos retourne toujours à zéro après avoir libéré l'analogue même si le dernier objet entré en collision était cet objet spécifique.

Édition: Résolu basé sur le commentaire @MukeshSaini. Merci a tous.

+2

Quelle est votre question? – Programmer

+0

Votre code va-t-il jamais dans l'instruction 'if'? Vous pouvez confirmer en faisant un 'BreakPoint' et un débogage. – Hristo

+0

@Programmer, OP ne veut pas que la valeur 'targetPos' devienne zéro après avoir libéré l'analogique. @ Abdou023, pouvez-vous s'il vous plaît partager plus de code, je pense que vous utilisez raycast même après que l'utilisateur a publié analogique qui pourrait renvoyer faux pour 'Physics.Raycast' et en plaçant' targetPos' à 'Vector3.zero' dans le bloc' else'. –

Répondre

1

Je pense que vous utilisez raycast même après que l'utilisateur analogique libéré qui pourrait être de retour faux pour Physics.Raycast et la mise en targetPos-Vector3.zero dans else bloc.

Vous pouvez mettre une condition à raycast uniquement lorsque l'utilisateur utilise l'analogue qui arrêtera le bloc inutile sinon exécuter après que l'utilisateur a libéré l'analogique et que targetPos conservera sa valeur correcte.