2017-09-21 3 views
1

Sup。 Cボタンを押すとスプライトが速すぎます。それは攻撃として跳ねるオオカミです。しかし、ちょうど1つの場所から次の場所に行くと、私は単に間違った種類のコードを完全に使用しているという考えを持っています。私はそれがRigidbody2D = new Vector2でもっとやらなければならないと推測しています....しかし、そこからどこへ行くべきかわかりません。ここでは私が現在取り組んでいることがあります。2dスプライトがC#スクリプト(1つ)のtransform.translateで高速すぎる

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.UI; 

public class tulMoveMount : MonoBehaviour { 

    private Animator anim; 
    private Rigidbody2D rb; 

    private bool goRight = true; 
    private bool jump = false; 
    private bool idle = true; 
    public float lungeDistance; 
    public float lungeSpeed; 
    public float lungeHeight; 

    void Start() 
    { 
     anim = GetComponent<Animator>(); 
     rb = GetComponent<Rigidbody2D>(); 
    } 

    void Update() 
    { 
     HandleCommands(); 
    } 


    void HandleCommands() 
    { 
     if (!jump && goRight && Input.GetKeyDown (KeyCode.C)) { 
      idle = false; 
      jump = true; 
      anim.SetTrigger ("jump"); 
      rb = transform.Translate (lungeSpeed + lungeDistance, lungeHeight, 0); // HERE 
      idle = true; 
      jump = false; 
      anim.SetTrigger ("idle"); 
     } 
     if (!jump && !goRight && Input.GetKeyDown (KeyCode.C)) { 
      idle = false; 
      jump = true; 
      anim.SetTrigger ("jump"); 
      rb = transform.Translate (lungeSpeed + -lungeDistance, lungeHeight, 0); // HERE 
      idle = true; 
      jump = false; 
      anim.SetTrigger ("idle"); 
     } 
    } 
} 

答えて

1

一点からあなたがCoroutingLerp使用することができます別の円滑な翻訳を取得するには。

Lerpでは、最初のパラメータは開始位置で、2番目のパラメータはタージです。 3番目のパラメータは0と1の間のfloatです.0の場合、Lerpの最初のパラメータを取得します。それが1の場合は、2番目の値を取得します。もし両者の中間点が0.5であれば...

だから、あなたはfpsレートとは無関係のコースタインを起動し、あなたのGameObjectをスタートターゲットとあるターゲットから別のターゲットに移動するのに要する時間の間の距離。

public class WolfMovement : MonoBehaviour { 

    Vector3 start; 
    Vector3 target; 

    float lungeSpeed = .8f; 
    float lungeDistance = 5; 

    private IEnumerator coroutine; 

    void Update() { 
     if(Input.GetKeyDown(KeyCode.M)) 
     { 
      start = transform.position; 
      target = new Vector3(transform.position.x + lungeDistance,transform.position.y , transform.position.z); 

      coroutine = MoveObject(start,target,lungeSpeed); 
      StartCoroutine(coroutine); 

     } 
    } 

    IEnumerator MoveObject (Vector3 start, Vector3 target, float speed){ 
     float i = 0.0f; 
     float rate = 1.0f/speed; 
     while (i < 1.0) { 
      i += Time.deltaTime * rate; 
      transform.position = Vector3.Lerp(start, target, i); 
      yield return null; 
     } 
    } 

} 
+1

あなたは基本的に私にコード全体を提供し、問題を解決しました。あなたがスーパーヒーローから来たのはわかりませんが、ありがとうlol –

+0

@JoeClark LOL。どういたしまして。 2Dスプライトを反転させた問題を解決しようとしましたが、もし接近したかどうかはわかりません –

1

多くのフレームにわたって動きを滑らかにしますTime.DeltaTimeによる翻訳を乗算し、あなたは、あなたが望む速度を得るためにのみlungeSpeedを微調整する必要があります。

rb = transform.Translate ((lungeSpeed + lungeDistance, lungeHeight, 0)*Time.deltaTime); 
+0

yea!私は以前にそれを試してみましたが、何らかの理由でそれを気に入らず、エラーメッセージを表示し続けます。私は問題があるかもしれませんが、今は学校でCPUを使用しています。私はプロジェクトにプラグインして以来、私はそれらの多くを見てきました。私は私のチャンスを取得し、あなたに戻って取得するとき私のホームCPU上でそれを試してみましょう。フィードバック –

+0

@ JoeClarkありがとうございますあなたが探している効果を得るには、この行に '* Time.deltaTime'が置かれている場所で遊ぶ必要があるかもしれません。 – Bejasc

関連する問題