2012-03-15 26 views
1

ここに行く!私はユニティを使用していますが、コードはC#でも使えますが、主にjavaです。3d球の周りのボールの動き

私のゲームでは、プレイヤーは球体(剛体)をコントロールし、ボール物理学が適用され、コリソンで作業が完了しており、マリオギャラクシーエスケイの周りを自分自身で案内しなければなりません。

私が抱えている問題は、私が惑星上のどこにいるかによって、制御システムが私が押しているものの逆をするように見えるということです。惑星やカメラの方向がどんな方向であっても、常に前方に、左には常に残されるように制御システムを拘束する方法はありますか?

I have found some documentation regarding spherical corodinate systemsこれが行く方法であるかどうかは不明ですもし私がその問題を過度に複雑にしていたら。

は、コードは、地球上のプレーヤーのボールをキープするために使用: `/ *

FauxGravityAttractor.js 

// Set to true for mono-directional gravity 
var useLocalUpVector : boolean = false; 

// Force applied along gravity up-vector (negative = down) 
var fauxGravity = -10.0; 

function Attract (body : FauxGravityBody){ 

    var gravityUp : Vector3; 
    var localUp: Vector3; 
    var localForward : Vector3; 

    var t : Transform = body.transform; 
    var r : Rigidbody = body.rigidbody; 


    // Figure out the body's up vector 

    if(useLocalUpVector){ 
     gravityUp = transform.up; 

    } else { 

     gravityUp = t.position - transform.position; 
     gravityUp.Normalize(); 
    } 



    // Accelerate the body along its up vector 

    r.AddForce(gravityUp * fauxGravity * r.mass); 
    r.drag = body.grounded ? 1 : 0.1; 



    // If the object's freezerotation is set, we force the object upright 

    if(r.freezeRotation){ 

     // Orient relatived to gravity 

     localUp = t.up; 
     var q = Quaternion.FromToRotation(localUp, gravityUp); 
     q = q * t.rotation; 
     t.rotation = Quaternion.Slerp(t.rotation, q, 0.1); 
     localForward = t.forward; 

    } 

}' 

とボールの動きをスクリプト:

using UnityEngine; 
using System.Collections; 

public class MarbleControl : MonoBehaviour { 



public float movementSpeed = 6.0f; 

void Update() { 

    Vector3 movement = (Input.GetAxis("Horizontal") * Vector3.left * movementSpeed) + (Input.GetAxis("Vertical") * -Vector3.forward *movementSpeed); 

    rigidbody.AddForce(movement, ForceMode.Force); 
} 

void OnTriggerEnter (Collider other ) { 

    if (other.tag == "Pickup") 

    { 

     MarbleGameManager.SP.FoundGem(); 

     Destroy(other.gameObject); 

    }  

} 

}

あなたのヘルプははるかに高く評価されます。

乾杯サム

+0

これは本当にボールの動きにどのように影響しているかによって異なります。より詳細な情報を提供できますか?おそらく一部のコードですか?どのようにボールを動かすのですか?それが地球上にとどまることをどうやって確認しますか?要するに、あなたのコントロールは、ボールに対するローカルなオブジェクト空間ではなく、aboslute座標/ワールド空間に基づいているように思えます。 – Supr

+3

宇宙の周りのボールではなく、ボールの周りの宇宙を動かします。 –

+0

[このArcballの実装](http://nehe.gamedev.net/tutorial/arcball_rotation/19003/)にも興味があるかもしれませんが、 – Shai

答えて

0

Vector3.leftVector3.forward[-1,0,0][0,0,-1]のような定数が正しいですか?そのような場合は、大理石のオリエネーションに関連して調整されたベクトルでそれらを置き換える必要があるように見えます。 Vector3.leftは、大理石の左方向にしたい方向を指すベクトルのワールド空間座標に置き換えられます。

関連する問題