2016-09-23 5 views
0

現在、RB2Dベロシティを使用していますが、ボタンを押してもスライディングを止めることはできません。マリオからの氷のような感じです。どのように私のキャラクターがどこにでも滑り止めをしますか?RigidBody2D Velocityを使用して氷上にいるようなキャラクターの感情を止めるには

私のコードは次のとおりです。

void Movement() { 

    if (Input.GetAxisRaw ("Horizontal") > 0.1) { 

     GetComponent<Rigidbody2D>().velocity = new Vector2 (speed, GetComponent<Rigidbody2D>().velocity.y); 

    } 
    if (Input.GetAxisRaw ("Horizontal") < -0.1) { 

     GetComponent<Rigidbody2D>().velocity = new Vector2 (-speed, GetComponent<Rigidbody2D>().velocity.y); 

    } 
    if (Input.GetAxisRaw ("Vertical") > 0.5 && grounded) { 

     GetComponent<Rigidbody2D>().velocity = new Vector2 (GetComponent<Rigidbody2D>().velocity.x, jumpHeight); 

    } 
} 

私の速度は5に設定され、jumpHeightは10であり、私は私のプレーヤーで事前に任意の助け

感謝を箱コライダーとRigidBody2Dの両方を持っている

答えて

1

変換を使用して、キーを押したときにオブジェクトを移動し、物理を使用せずに直接移動することができます。

また、ベロシティを使用すると、ボタンを押してオブジェクトの移動を停止しているときに、0.0fに設定できます。

crabcrabcamが現在使用している:

void Movement() { 

    if (Input.GetAxisRaw ("Horizontal") > 0.1) { 

     GetComponent<Rigidbody2D>().velocity = new Vector2 (speed, GetComponent<Rigidbody2D>().velocity.y); 

    } else if (Input.GetAxisRaw ("Horizontal") < -0.1) { 

     GetComponent<Rigidbody2D>().velocity = new Vector2 (-speed, GetComponent<Rigidbody2D>().velocity.y); 

    } else if (Input.GetAxisRaw("Horizontal") == 0 && grounded) { 

     GetComponent<Rigidbody2D>().velocity = new Vector2 (Vector2.zero, GetComponent<Rigidbody2D>().velocity.y); 

    } 


    if (Input.GetAxisRaw ("Vertical") > 0.5 && grounded) { 

     GetComponent<Rigidbody2D>().velocity = new Vector2 (GetComponent<Rigidbody2D>().velocity.x, jumpHeight); 

    } 

} 

これは、空気中のそれがフワッとなりますが、接地しながら、それが応答を停止する:)

+0

Transform.translate()を使用していますか?これは、文字が壁の内外にバグを起こすためです。私は速度を行くが、感謝を与えるでしょう:) – crabcrabcam

+0

設定の速度は感謝:)働いた。 – crabcrabcam

+0

私はTransfor.positionを移動させようとしていましたが、速度は物理学を動かすためにもっと勢いを増していました。 答えを受け入れてくれてありがとう。プログラマが言ったように、Vector2.zeroを使用してください。 ハッピーコーディング! – cjf93

1

文の場合に使用することができ、その後、別のelse if文第二に、他の追加プレーヤーの移動を停止します。たぶん

if (Input.GetAxisRaw("Horizontal") > 0.1) 
{ 
Move right 
} 
else if (Input.GetAxisRaw("Horizontal") < -0.1) 
{ 
Move left 
} 
else 
{ 
Stop moving/Vector2.zero; 
} 

このような何か:

void Movement() 
{ 

    if (Input.GetAxisRaw("Horizontal") > 0.1) 
    { 

     GetComponent<Rigidbody2D>().velocity = new Vector2(speed, GetComponent<Rigidbody2D>().velocity.y); 

    } 
    else if (Input.GetAxisRaw("Horizontal") < -0.1) 
    { 

     GetComponent<Rigidbody2D>().velocity = new Vector2(-speed, GetComponent<Rigidbody2D>().velocity.y); 
    } 
    else 
    { 
     GetComponent<Rigidbody2D>().velocity = Vector2.zero; 
    } 

    if (Input.GetAxisRaw("Vertical") > 0.5 && grounded) 
    { 

     GetComponent<Rigidbody2D>().velocity = new Vector2(GetComponent<Rigidbody2D>().velocity.x, jumpHeight); 

    } 
} 
+0

私はあなたが答えた直前にこれを手に入れました。私のコードはこれとほぼ同じです:)ありがとう。 – crabcrabcam

+1

まだ表示されていない(私はそれを承認しました)編集であなたのコードを見ましたが、それらは同じではありません。あなたのコードには 'Vector2.zero;'はありません。これは即座に止めるべきです。また、ハッピーコーディングの場合、3つの可能なもの(左、右、押されていない)を探しているだけなので、コード内の最後の 'else if'ステートメントは単に' else'でなければなりません! – Programmer

+0

コードを承認していただきありがとうございます:) – crabcrabcam

0

あなたはInput.GetAxis("Horizontal")を使用する必要があります。簡単なコードサンプルを以下に示します。

public float maxSpeed = 10f; 
public float jumForce = 700f; 
public Transform groundCheck; 
float groundRadius = 0.2f; 
public LayerMask whatIsGrounded; 
bool grounded = false; 


void FixedUpdate() 
{ 
    grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGrounded) 

    float move = Input.GetAxis("Horizontal"); 

    rigidbody2D.velocity = new Vector2(move * maxSpeed, rigidbody2D.velocity.y); 
} 

void Update() 
{ 
    if(grounded && Input.GetKeyDown(KeyCode.Space)) 
    { 
     rigidbody2D.AddForce(new Vector2(0, jumpForce)); 
    } 
} 
関連する問題