3 Stimmen

Drehung in Unity3D

Dies ist ein vereinfachter Code von dem, was ich zu tun versuche:

var angle = 1.57;
if ( this.transform.rotation.y > angle ){
  this.transform.rotation.y--;
} else if ( this.transform.rotation.y < angle ){
  this.transform.rotation.y++;
}

Ich bin es gewohnt, in AS3 zu programmieren, und wenn ich das in Flash tue, funktioniert es perfekt, aber in Unity3D nicht, und ich habe eine harte Zeit herauszufinden, warum, oder wie könnte ich diesen Effekt bekommen.

Kann mir jemand helfen? Danke!

bearbeiten:

mein Objekt ist ein Starrkörperauto mit 2 Kapselkollidern, das auf einem "holprigen" Boden fährt, und irgendwann verliert es einfach die Richtungsgenauigkeit, und ich denke, das liegt an seinem hierarchischen Rotationssystem.

(Dank an Kay für den Hinweis auf transform.eulerAngles)

0voto

BilalDja Punkte 1032

Sie sollten versuchen, Ihren Rotationsfaktor mit Time.deltaTime

Ich hoffe, das hilft

Frieden

0voto

swiftBoy Punkte 34715

Hier ist mein Skript für GameObject Rotation mit Touch

//
//  RotateController.cs
//
//  Created by Ramdhan Choudhary on 12/05/13.
//

using UnityEngine;
using System;

public class RotateController
{

        private float RotationSpeed = 9.5f;
        private const float mFingerDistanceEpsilon = 1.0f;
        public float MinDist = 2.0f;
        public float MaxDist = 50.0f;
        private Transform mMoveObject = null;
        private bool isEnabledMoving = false;

        //************** Rotation Controller Constructor **************//
        public RotateController (Transform goMove)
        {
                isEnabledMoving = true;
                mMoveObject = goMove;
                if (mMoveObject == null) {
                        Debug.LogWarning ("Error! Cannot find object!");
                        return;
                }
        }

        //************** Handle Object Rotation **************//
        public void Update ()
        {
                if (!isEnabledMoving && mMoveObject != null) {
                        return;
                }

                Vector3 camDir = Camera.main.transform.forward;
                Vector3 camLeft = Vector3.Cross (camDir, Vector3.down);

                // rotate
                if (Input.touchCount == 1) {
                        mMoveObject.Rotate (camLeft, Input.touches [0].deltaPosition.y * RotationSpeed * Time.deltaTime, Space.World);
                        mMoveObject.Rotate (Vector3.down, Input.touches [0].deltaPosition.x * RotationSpeed * Time.deltaTime, Space.Self);
                }

        }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X