Déplacer un objet avec la souris (clic & drag)
Déplacer un objet avec la souris (clic & drag)
Bonjour.
J'annonce de suite, j'y connais rien du tout en programmation, mais je cherche a appréhender le langage en faisant des choses simples.
Mon soucis:
J'ai dans ma scène un objet que je voudrais pouvoir déplacer avec la souris sur un seul axe (Z), en faisant un cliqué glissé.
Le truc simple a première vu... Cet objet est en réalité un bouton qui coulisse. Il doit donc avoir un déplacement limité et suivre parfaitement la position de la souris.
J'ai testé moult script sur le net, mais rien ne fonctionne correctement.
Auriez vous un script a me faire partager svp? Merci =)
J'annonce de suite, j'y connais rien du tout en programmation, mais je cherche a appréhender le langage en faisant des choses simples.
Mon soucis:
J'ai dans ma scène un objet que je voudrais pouvoir déplacer avec la souris sur un seul axe (Z), en faisant un cliqué glissé.
Le truc simple a première vu... Cet objet est en réalité un bouton qui coulisse. Il doit donc avoir un déplacement limité et suivre parfaitement la position de la souris.
J'ai testé moult script sur le net, mais rien ne fonctionne correctement.
Auriez vous un script a me faire partager svp? Merci =)
- Silverglade
- Messages : 264
- Inscription : 04 Août 2012 17:52
Re: Déplacer un objet avec la souris (clic & drag)
Cool pas besoin de faire de sujet vu qu'on cherche la même chose :p
Si je trouve un truc je ferai signe
Edit: Bon ben j'avais dis que je reviendrai si j'avais un truc donc je suis re x)
J'ai lu sur le net qu'il y 'avait tout bêtement un script rigidbodydrag.js dans l'asset "Script".
Pour l'utiliser et "freezer" un axe met le script dans un objet puis rajoutes les composants rigidbody et collider.
Rigidbody qui comporte donc l'onglet contraintes, tu coches tout sauf z et le tour est joué. Testé et approuvé
Au cas ou, le voilà:
Si je trouve un truc je ferai signe
Edit: Bon ben j'avais dis que je reviendrai si j'avais un truc donc je suis re x)
J'ai lu sur le net qu'il y 'avait tout bêtement un script rigidbodydrag.js dans l'asset "Script".
Pour l'utiliser et "freezer" un axe met le script dans un objet puis rajoutes les composants rigidbody et collider.
Rigidbody qui comporte donc l'onglet contraintes, tu coches tout sauf z et le tour est joué. Testé et approuvé
Au cas ou, le voilà:
Code : Tout sélectionner
var spring = 50.0;
var damper = 5.0;
var drag = 10.0;
var angularDrag = 5.0;
var distance = 0.2;
var attachToCenterOfMass = false;
private var springJoint : SpringJoint;
function Update ()
{
// Make sure the user pressed the mouse down
if (!Input.GetMouseButtonDown (0))
return;
var mainCamera = FindCamera();
// We need to actually hit an object
var hit : RaycastHit;
if (!Physics.Raycast(mainCamera.ScreenPointToRay(Input.mousePosition), hit, 100))
return;
// We need to hit a rigidbody that is not kinematic
if (!hit.rigidbody || hit.rigidbody.isKinematic)
return;
if (!springJoint)
{
var go = new GameObject("Rigidbody dragger");
var body : Rigidbody = go.AddComponent ("Rigidbody") as Rigidbody;
springJoint = go.AddComponent ("SpringJoint");
body.isKinematic = true;
}
springJoint.transform.position = hit.point;
if (attachToCenterOfMass)
{
var anchor = transform.TransformDirection(hit.rigidbody.centerOfMass) + hit.rigidbody.transform.position;
anchor = springJoint.transform.InverseTransformPoint(anchor);
springJoint.anchor = anchor;
}
else
{
springJoint.anchor = Vector3.zero;
}
springJoint.spring = spring;
springJoint.damper = damper;
springJoint.maxDistance = distance;
springJoint.connectedBody = hit.rigidbody;
StartCoroutine ("DragObject", hit.distance);
}
function DragObject (distance : float)
{
var oldDrag = springJoint.connectedBody.drag;
var oldAngularDrag = springJoint.connectedBody.angularDrag;
springJoint.connectedBody.drag = drag;
springJoint.connectedBody.angularDrag = angularDrag;
var mainCamera = FindCamera();
while (Input.GetMouseButton (0))
{
var ray = mainCamera.ScreenPointToRay (Input.mousePosition);
springJoint.transform.position = ray.GetPoint(distance);
yield;
}
if (springJoint.connectedBody)
{
springJoint.connectedBody.drag = oldDrag;
springJoint.connectedBody.angularDrag = oldAngularDrag;
springJoint.connectedBody = null;
}
}
function FindCamera ()
{
if (camera)
return camera;
else
return Camera.main;
}
Re: Déplacer un objet avec la souris (clic & drag)
un petit code comme celui là pourrait servir de base (à coller sur l'object à traiter):
Code : Tout sélectionner
using UnityEngine;
using System.Collections;
public class MouseDrag : MonoBehaviour {
private Vector3 mPos;
// Use this for initialization
void Start () {
}
void Update () {
mPos = Input.mousePosition;
}
void OnMouseDrag() {
Vector3 val = (Input.mousePosition - mPos) * Time.deltaTime;
transform.Translate(val); // x et y
//transform.Translate(0,0, val.x); // juste pour l'axe des Z
}
}
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Déplacer un objet avec la souris (clic & drag)
Bonjour. Merci pour vos réponses.
Alors autant le code Silverglade est long mais il fonctionne, que celui de Max ne marche pas (en tout cas pas chez moi... ^^ )
Merci à vous deux!
J'oubliais ! Je voudrais faire un build vers ANDROID. Du coup j'ai testé d'autre script car la gestion du Touch est différent de celui d'un clic souris.
Vous avez là aussi une petite idée?
Pour déplacer mon objet dans ma scène et gérer le tactile sur une tablette ANDROID, j'ai utilisé ça:
Ca fonctionne, moyennement... car le bouton ne se déplace pas sur son axe Z , mais par rapport à la camera...
Autre problème, si je place plusieurs boutons dans ma scène (nommés différemment), ils vont tous bouger en même temps.
Je suis en train de voir avec un ami programmeur si il peut faire quelque chose et je vous tiens informé
Alors autant le code Silverglade est long mais il fonctionne, que celui de Max ne marche pas (en tout cas pas chez moi... ^^ )
Merci à vous deux!
J'oubliais ! Je voudrais faire un build vers ANDROID. Du coup j'ai testé d'autre script car la gestion du Touch est différent de celui d'un clic souris.
Vous avez là aussi une petite idée?
Pour déplacer mon objet dans ma scène et gérer le tactile sur une tablette ANDROID, j'ai utilisé ça:
Code : Tout sélectionner
var object : GameObject;
function Update () {
for (var touch : Touch in Input.touches){
var ray = Camera.main.ScreenPointToRay(touch.position);
var hit : RaycastHit;
if (Physics.Raycast (ray, hit, 100)) {
if(touch.phase == TouchPhase.Began || touch.phase == TouchPhase.Moved) {
var cameraTransform = Camera.main.transform.InverseTransformPoint(0, 0, 0);
object.transform.position = Camera.main.ScreenToWorldPoint(new Vector3 (touch.position.x, touch.position.y, cameraTransform.z - 0.5));
}
}
}
}
Autre problème, si je place plusieurs boutons dans ma scène (nommés différemment), ils vont tous bouger en même temps.
Je suis en train de voir avec un ami programmeur si il peut faire quelque chose et je vous tiens informé
Re: Déplacer un objet avec la souris (clic & drag)
Ben si qui marche mon code , la preuve.yannoch a écrit : que celui de Max ne marche pas (en tout cas pas chez moi... ^^ )
Bon c'est très sommaire je te le consède, et certainement pas vraiment en prise avec ce que tu cherchais
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
Re: Déplacer un objet avec la souris (clic & drag)
Effectivement ca a l'air de marcher plutot bien !
Mais tu sais , je suis vraiment très mauvais... ^^
Là on est en train d'essayer de se battre pour faire fonctionner ça sur une tablette ANDROID.
C'est pas gagner lol
Mais tu sais , je suis vraiment très mauvais... ^^
Là on est en train d'essayer de se battre pour faire fonctionner ça sur une tablette ANDROID.
C'est pas gagner lol
Re: Déplacer un objet avec la souris (clic & drag)
à les tablettes par contre, moi pas connaitre, donc je ne serais d'aucune aide
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ
- Silverglade
- Messages : 264
- Inscription : 04 Août 2012 17:52
Re: Déplacer un objet avec la souris (clic & drag)
Idem, j'ai lu je ne sais plus ou qu'il y avait beaucoup ( trop? ) de manip à faire pour avoir un export stable donc j'ai même pas cherché plus loin
Re: Déplacer un objet avec la souris (clic & drag)
J'ai fais un premier test hier concernant le build vers ANDROID, même si mon script ne fonctionnait pas, et bien j'ai trouvé au contraire que c'était relativement simple et pratique.
Je développe en parallèle une application avec un ami, que l'on programme directement sur Eclipse, et bien le build d'un package est autrement plus complexe.
Hors là, en quelques clic, j'ai pu avoir un installer et toute ma scène en 3d de UNITY vers ma tablette.
Le seul gros soucis, c'est la programmation... Mais je vais y arriver! ^^
Je développe en parallèle une application avec un ami, que l'on programme directement sur Eclipse, et bien le build d'un package est autrement plus complexe.
Hors là, en quelques clic, j'ai pu avoir un installer et toute ma scène en 3d de UNITY vers ma tablette.
Le seul gros soucis, c'est la programmation... Mais je vais y arriver! ^^