2017-09-03 12 views
-1

私はUnityでゲームを作っています。ボタンをクリックするとオブジェクトを一定距離移動してから、もう一度クリックするまで停止します。私はLerp関数を試してみましたが、目的の効果を正しく行うことができませんでした。クリックしたときにゲームオブジェクトを一定距離移動する

+0

https://docs.unity3d.com/ScriptReference/Vector3.SmoothDamp.html – z3nth10n

答えて

0

これを即座に実行したい場合は、マウス入力を検出してから、目的の方向にオブジェクトを移動するだけですに。ちょうどそれを行ういくつかのサンプルC#コードがあります(更新機能内)。

if(Input.GetMouseButtonDown(0)) 
{ 
    transform.Translate(Vector3ToMove); 
} 

変数Vector3ToMoveは、現在の位置から移動したいベクトルを格納するVector3になります。これは機能的ですが、滑らかではなく、特に見るのが楽しいものではありません。滑らかな動きを実現するには、Lerp関数を使用する必要があります。このLerp関数は、以前に間違っていた位置に到達するために、複数のフレームに対して呼び出される必要があります。ここでは、直前の例のようにVector3.Lerp

Vector3 TargetPosition; 
float speed = 1f; 

void Start() 
{ 
    TargetPosition = transform.position; 
}  

void Update() 
{ 
    if(Input.GetMouseButtonDown(0)) 
    { 
     TargetPosition += Vector3ToMove; 
    } 

    transform.position = Vector3.Lerp(transform.position, TargetPosition, speed * Time.deltaTime); 
} 

Vector3ToMoveを使用して、滑らかな効果を達成するためにいくつかのサンプルコードを使用すると、オブジェクトの位置に適用するベクトルの増分でいます。そこに用意されている例の速度変数を微調整して滑らかな速度を得たい場合は、Vector3.SmoothDampを使ってやや異なるスムージング効果を得ることもできます。

+0

ありがとうございました!それはまさに私が必要なものです:) –

+0

しかし、私はマウスやキーボードからキャンバスボタンを移動したくない場合はどうすればいいですか? –

+0

Unityイベントシステムを使用すると、Input if文に入れたコードを持つ関数を作成し、次に、押されたイベントを使用して関数を呼び出すUnity UIイベントシステムを使用します。 https://unity3d.com/learn/tutorials/topics/user-interface-ui/ui-events-and-event-triggers –

関連する問題