私はあなたの質問は、私には少し不明であったように、私ができる最善のようにあなたの質問に答えることを試みてきました。
まず、力と物理を使用しているので、void Update()
ではなくvoid FixedUpdate()
関数を使用する必要があります。これにより、コードが均一な間隔で実行されるようになります。これは、物理を扱う際に非常に重要です。
なぜ新しいゲームオブジェクトをインスタンス化したのかもわかりません。このスクリプトをUnityのCamera GameObjectに追加してから、Rigidbodyコンポーネントをカメラに追加するだけです。これは、この2行だけ含まれている必要がありますあなたのStart()
機能、簡素化されます:
Input.gyro.enabled = true;
RB = gameObject.GetComponent<Rigidbody>();
次に、クォータニオンは左利きた座標を、Unityは右利きの座標を持っているのに対し、Input.gyro.attide
から返されることに注意することが重要です。
Quaternion GyroToUnity(Quaternion quat)
{
return new Quaternion(quat.x, quat.z, quat.y, -quat.w);
}
私は、この変換を達成するために他の方法があると確信しているが、この方法は、私の作品:Unityへのジャイロスコープからこの変換は、以下の機能を実現することができます。
ここでは、カメラの回転について説明します。まず、カメラの回転を、カメラのtransform.rotation
をジャイロスコープから変換したQuaternionと同じに設定して設定します。しかし、ジャイロスコープのz軸がUnityのy軸と同じ方向を指しているので、もう一つの問題があります。これは単にtransform.Rotate(90,0,0);
を実行することで修正できます。最後に、次のコード行を使用したカメラの回転を設定します。
transform.rotation = Quaternion.Euler(new Vector3(0f, transform.rotation.eulerAngles.y, 0f));
最終私たちはカメラに力を加える処理する必要があります。どのように動きを処理するかを正確にはわかりませんが、カメラの回転に関してz軸を中心にして動きたいと思っていました。これを行うには、カメラのRigidbodyコンポーネントのAddRelativeForce(Vector3 relativeForce)
を使用する必要があります。
しかし、力の方向を決めるには、以前にUnityに変換したQuaternionからx軸回りの回転の度合いにアクセスする必要があります。 yourQuat.eulerAngles.x
となり、0 < = x <となるようにfloat
が返されます。私たちがカメラの座標系の方向を向いている場合、iOSデバイスを正面に向けると約0.0の値が返されます。
Vector3 relativeForce;
if (yourQuat.eulerAngles.x > 315 || yourQuat.eulerAngles.x < 90)
relativeForce = Vector3.forward;
else if (yourQuat.eulerAngles.x < 315)
relativeForce = Vector3.back;
else
relativeForce = Vector3.zero;
最後に、後続のVector3
値を取ると、役立ちますので、
RB.AddRelativeForce(relativeForce);
希望のように使用します。私はこの質問をいじったが、私はこのコードが適切にカメラを向けることがわかりました。これがあなたが探していた機能と正確でない場合は、プログラムを微調整して必要なものを正確に実行できるようになるはずです。
私はあなたが何をしようとしているのか分かりませんが、カメラの親に剛体を追加して、力をカメラに直接加えるのではなく、 ?さもなければ、カメラが元の位置から動くと、カメラ親を回転させる効果が変化する。 – lockstock