[Résolu] Rotation

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
jyd
Messages : 7
Inscription : 10 Jan 2021 14:47

[Résolu] Rotation

Message par jyd » 10 Jan 2021 20:37

Merci à ceux qui peuvent m'aider.
J'ai un script qui permet la rotation d'un objet dans toutes les directions en glissant la souris. Je souhaiterais que mon objet pivote horizontalement ou verticalement selon le glissement de la souris. Si je drague verticalement, il n'y aurait pas de mouvement horizontal et vice versa.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotate3D : MonoBehaviour
{
    float rotSpeed = 150;
    void OnMouseDrag()
    {
        float rotX = Input.GetAxis("Mouse X") * rotSpeed * Mathf.Deg2Rad;
        float rotY = Input.GetAxis("Mouse Y") * rotSpeed * Mathf.Deg2Rad;
        transform.Rotate(Vector3.up, -rotX);
        transform.Rotate(Vector3.right, rotY);
    }
}
Dernière édition par jyd le 12 Jan 2021 09:28, édité 1 fois.

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: Rotation

Message par Max » 10 Jan 2021 22:03

Bonsoir,

en fait je pense que tu as une rotation non souhaité sur le troisième axe lorsque tu fait tes rotations en même temps sur les deux axes gérés par la souris. Si c'est cela, il faut simplement forcer à zéro le troisième axe.

PS: quand tu postes un script, pense à le poster encadré des balises codes (j'ai corrigé tes précédents messages).
Pour en savoir plus, lire la charte(lien dans ma signature). Merci.
Image
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

jyd
Messages : 7
Inscription : 10 Jan 2021 14:47

Re: Rotation

Message par jyd » 12 Jan 2021 02:35

Voici un script qui donne un meilleur résultat, le contrôle de l'objet devient facile sur un axe ou sur l'autre.
https://www.youtube.com/watch?v=kplusZYqBok

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Rotate3D : MonoBehaviour
{
    Vector3 Pos = Vector3.zero;
    Vector3 mPos = Vector3.zero;

    void Update()
    {
        if (Input.GetMouseButton(0))
        {
            mPos= Input.mousePosition - Pos;

            if (Vector3.Dot(transform.up, Vector3.up) >= 0)
            {
                transform.Rotate(transform.up, -Vector3.Dot(mPos, Camera.main.transform.right), Space.World);
            }
            else
            {
                transform.Rotate(transform.up, Vector3.Dot(mPos, Camera.main.transform.right), Space.World);
            }
            transform.Rotate(Camera.main.transform.right, Vector3.Dot(mPos, Camera.main.transform.up), Space.World);
        }
        {
            Pos = Input.mousePosition;
        }
    }
}

Répondre

Revenir vers « Scripting »