2017-08-14 5 views
0

alors je travaille sur un jeu mobile où j'ai une entrée tactile d'un actif du magasin de ressources. Tout fonctionne parfaitement bien, sauf pour une chose: je veux implémenter une fonction "glisser-déposer" donc quand je prends un objet, il devrait suivre la position de mon doigt. Mais parce que le terrain de jeu est une sphère, je dois faire le mouvement avec un Raycast. Donc, mon plan est que l'article devrait suivre la position Raycasts. Ma tentative actuelle ressemble à ceci:Unity Raycast Movement

public void DragTo(float screenX, float screenY) 
{ 
    if (draggingObject == null) 
    { 
     return; 
    } 

    Debug.Log("Dragging"); 

    //Converts the screen space to world space 
    Vector3 mousePosFar = new Vector3(screenX, screenY,  Camera.main.farClipPlane); 
    Vector3 mousePosNear = new Vector3(screenX, screenY, Camera.main.nearClipPlane); 

    Vector3 mousePosF = mainCam.ScreenToWorldPoint(mousePosFar); 
    Vector3 mousePosN = mainCam.ScreenToWorldPoint(mousePosNear); 

    //shoots an ray to the world space 
    RaycastHit hit; 

    if (Physics.Raycast(mousePosN, mousePosF - mousePosN, out hit)) 
    { 
     float step = speed * Time.deltaTime; 
     draggingObject.GetComponent<Rigidbody>().MovePosition(hit.point); 
    } 
} 

J'ai déjà essayé les options suivantes:

draggingObject.GetComponent<Rigidbody>().MovePosition(hit.point); 
draggingObject.transform.position = hit.point; 
draggingObject.transform.position = normal; 

Ils travaillent tous, mais ils ont tous vraiment buggy et comportements étranges. Aussi quand je ne gèle pas le z. axe sur le Rigidbody l'objet "vole" sur l'axe z, jusqu'à ce qu'il atteigne la caméra. Puis il se téléporte à nouveau et tout recommence. Donc, il vole sur le rayon. Donc, si vous avez des idées pourquoi cela arrive, faites le moi savoir. Toute aide est appréciée. (N'oubliez pas non plus que tout se passe sur une sphère)

MISE À JOUR: Cela fonctionne maintenant. Lorsque le glissement a commencé, j'ai changé la couche de l'objet à "Ignorer Raycast" et quand il a fini de le changer à "Default".

Répondre

0

Fonctionne maintenant! Lorsque le glissement a commencé, j'ai changé la couche de l'objet à "Ignorer Raycast" et quand il a fini de le changer à "Default".