2016-04-07 3 views
0

C#で作業しているコードに問題があります。C#エラーのプレーヤークライムコード

このコードが意味することは、プレーヤーが前に1x1x1ブロックに立っていて、1x2x1以上の何かを乗り越えることができないように、プレイヤーを前後に動かすことです。問題が発生しています。Image遠く離れていくと0,0,0から悪化します。誰も私を助けることができる?

コード:controller.Moveへの引数は、動きベクトルではなく、絶対的な位置であると仮定すると

  //Player Climbs Up One Block Heights But Dose Not Climb Anything Higher 
    if ((PlayerClimAction.posOneHit == true) && (PlayerClimAction.posTwoHit == false)) 
     { 


     // Moves the Player Up By 0.9 
     controller.Move ((transform.position + transform.up * (float) 0.9f) * Time.deltaTime); 

     // Moves The Player Forward By 0.9 
     controller.Move ((transform.TransformDirection (input) * (float) 0.9f) * Time.deltaTime); 

     //Debug 
     print("Up Vector3: " + (transform.position + transform.up * (float) 0.9f) * Time.deltaTime); 

     print("////////////////////////////////////////////////"); 

     print ("Forward: " + (transform.TransformDirection (input) * (float) 0.9f) * Time.deltaTime); 

     // Reset Triggers 
     PlayerClimAction.posOneHit = false; 
     PlayerClimAction.posTwoHit = false; 


    }else 
    { 
     controller.Move (motion * Time.deltaTime); // Move Normaly 
    } 
+0

これはちょっと役立つかもしれません。 [Image](http://postimg.org/image/bn7j5uhbx/):これは何が起こっているのかの視覚的なものです。 –

答えて

1

トーンの情報に大きな感謝。そのおかげで私は自分のコードを編集し、これにそれを変更することができました:

 //Player Climbs Up One Block Heights But Dose Not Climb Anything Higher 
    if ((PlayerClimAction.posOneHit == true) && (PlayerClimAction.posTwoHit == false)) 
     { 

     // Moves the Player Up By 0.5 
     controller.Move ((transform.up * (float) 0.5f)); 

     // Moves The Player Forward 
     controller.Move (motion * Time.deltaTime); // Move Normaly 


     // Reset Triggers 
     PlayerClimAction.posOneHit = false; 
     PlayerClimAction.posTwoHit = false; 

    }else 
    { 
     controller.Move (motion * Time.deltaTime); // Move Normaly 
    } 

それは距離であるので、私は、ちょうどelse文で定期的に運動と重複して登るに前方への移動を変更しますプレイヤーが通常通りに移動するスピードと、私がcontroller.Move ((transform.position + transform.up * (float) 0.9f) * Time.deltaTime);からcontroller.Move (transform.up * (float) 0.9f * Time.deltaTime);に変更すべきであるというトーンの提案のために、私は事をスムーズにするのを助けました。

TY投稿を見たすべての人に

0

(それはあなたのコードの残りの部分が示唆するものだ)

ライン

controller.Move ((transform.position + transform.up * (float) 0.9f) * Time.deltaTime); 

は、

controller.Move (transform.up * (float) 0.9f * Time.deltaTime); 

controller.Moveへの引数には、いくつかの問題

Time.deltaTimeによってcontroller.Move乗算transform.positionにa)の最初の呼び出しを持っている絶対的な位置であるべき一方場合。これにより、すべての軸の移動が発生します(0,0,0から離れるほど悪化する)。への2回目と3回目の呼び出しには、計算にtransform.Positionが含まれていない。 transform.TransformDirectionおよびmostionを表す)。また、私はそれがtypoであると仮定し、motionである必要があります。

+0

まず最初に、Dのプライベートキャラクターコントローラーコントローラーと 'controller = GetComponent ();'というこれまでの助けを感謝します。これはコントローラーのコードです。私は 'charatorController'変数型を使用しています。それが役に立ったら教えてください。私は変更を試みたが、それは以前と同じオフターゲットの方向にプレイヤーをpingしていたが、今は極端な値になっている。 tyの提案 –

+0

と 'TransformDirection(input)'は、キー入力、WASDまたはUp Down Left Rightに基づいてプレーヤーが向いている方向に反論しています。 –

+0

また、タイプミスXDを修正しました。あなたはそれらを愛さなければならない –