Page 1 sur 1

[Résolu] Rotation

Publié : 10 Jan 2021 20:37
par jyd
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);
    }
}

Re: Rotation

Publié : 10 Jan 2021 22:03
par Max
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.

Re: Rotation

Publié : 12 Jan 2021 02:35
par jyd
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;
        }
    }
}