2

x および y 方向へのプレーヤーのタッチに基づいて、3d モデルを回転させたいと考えています。そのため、水平および垂直のタッチを検出しています。

しかし、これではz方向の回転を制限したい。このために、私は複数のコードを試し、他のフォーラムでも提案を求めました。現在のところ、私のために働いている提案はありません。

基本的に、z方向の回転はしたくありません。次の画像は、どこで問題が発生したかを示しています。モデルが z 方向に完全に回転しました。これを止めたい。

ここに画像の説明を入力

これは、同じことを達成するための私の複数の試みです。

void Update ()
{
    // If there are two touches on the device...
    if (Input.touchCount == 1 && GameManager.Instance.IsGameStart) {

        // Store currnet touch.
        Touch touch = Input.GetTouch (0);

        //   transform.RotateAround (transform.position, Vector3.up, -     touch.deltaPosition.x  Time.deltaTime  15f);
        //   transform.RotateAround (transform.position, Vector3.right, touch.deltaPosition.y  Time.deltaTime  15f);
        //   transform.RotateAround (transform.position, Vector3.forward, 0f);

        //   transform.Rotate (Vector3.up, -touch.deltaPosition.x  Time.deltaTime  10f, Space.World);
        //   transform.Rotate (Vector3.right, touch.deltaPosition.y  Time.deltaTime  5f, Space.World);
        //   transform.Rotate (Vector3.forward, 0f, Space.World);

        myRigidbody.MoveRotation (myRigidbody.rotation  Quaternion.Euler (Vector3.right  touch.deltaPosition.y  Time.deltaTime  5f));
        myRigidbody.MoveRotation (myRigidbody.rotation  Quaternion.Euler (Vector3.up  -touch.deltaPosition.x  Time.deltaTime  10f));

    }
}

上記の各ブロックは、z 方向を制限する独自の取り組みを表しています。今、同じことを達成するための提案を教えてください。

同様に、Unityフォーラムで行われている私の議論 3Dモデルのタッチベースの回転

編集: z 回転でリジッドボディを制限してみました。それで、私のインスペクターはこのように見えます。

ここに画像の説明を入力

EDIT :ゲーム開発のチャット ルームに関する議論の後。私は次のようなコードを持っています:

float prevZ = transform.eulerAngles.z;
transform.Rotate (Vector3.up, -touch.deltaPosition.x  Time.deltaTime  10f, Space.World);
transform.Rotate (Vector3.right, touch.deltaPosition.y  Time.deltaTime  5f, Space.World);

Vector3 modelVec = transform.eulerAngles;
modelVec.z = prevZ;
transform.eulerAngles = modelVec;

解決に近づいていますが、現在、私のゴルフ グローブ モデルは、上部または下部のサイド ドラッグから 180 度以上移動できません。私はちょうど約180度に達し、それはちょうど他の方向に回転します.

4

2 に答える 2

0

コメントの後、最初からやり直す必要があるようです。

私が理解していることに基づいて、これを試してください:

Vector3 rotation = new Vector3();
rotation.y = -touch.deltaPosition.x * Time.deltaTime * yRotSpeed;
rotation.x = touch.deltaPosition.y * Time.deltaTime * xRotSpeed;
rotation.z = 0;
transform.Rotate(rotation);

そして、次を追加することをお勧めします:

public float yRotSpeed;
public float xRotSpeed;

スクリプトのフィールドとして、将来ユニティ エンジン内で回転速度を調整できるようにします。

于 2016-05-05T06:36:44.980 に答える
0

このようにしてください。

 // private variables
private Vector3 inputRotation;      // difference of input mouse pos and screen mid point
private Vector3 mouseinput;

// Update is called once per frame
void Update() {
    FindPlayerInput();
}
   void FindPlayerInput()
    {
    mouseinput = Input.mousePosition;
    mouseinput.z = 0; // for no rotation in z direction
    inputRotation = mouseinput - new Vector3(Screen.width * 0.5f, Screen.height * 0.5f,0);
    ProcessMovement();
    }
    void ProcessMovement(){
    transform.rotation = Quaternion.LookRotation(inputRotation);
    }
于 2016-06-03T10:47:11.263 に答える