2017-05-13 9 views
-1

私はその後、徒歩/実行との間にはアニメーションがありません停止キャラクターが歩いたり、実行していると、彼がアイドルに実行徒歩/からアニメーターに状態を変更クリックした点になっているとき、彼は歩くようなので、それが見えることを意味します起動停止。どのようにキャラクターを開始/停止/ゆっくりと走ることができますか?

私はアニメーターに3つの状態があります。ヒューマノイドウォーク、ヒューマノイドラン、ヒューマノイドイドル。 フェージングのようなものが必要です。例えば 行の場合:彼は「ウォーク」を起動したときに

_animator.CrossFade("Walk", 0); 

私はそれは歩行速度に少しゆっくりになりますので1に0に変更します。しかし、「Idle」では、1に変更すると、彼が止まるまでフェードしない何かになります。言い換えれば

iは、フェージング効果を追加したい場合は、文字の開始/ウォーキング/ランニングとも私はクリック/ダブルクリックを停止し、彼はウォークとファイル名を指定して実行を切り替えます。いくつかのフェードエフェクトを作成して、状態間をすばやく切り替えることはありません。

using UnityEngine; 
using System.Collections; 

public class ClickToMove : MonoBehaviour 
{ 
    public int speed = 5; // Determines how quickly object moves towards position 
    public float rotationSpeed = 5f; 

    private Vector3 targetPosition; 
    private Animator _animator; 
    private Vector3 destination; 
    private Quaternion targetRotation; 

    public float clickDelta = 0.35f; // Max between two click to be considered a double click 

    private bool click = false; 
    private float clickTime; 

    void Start() 
    { 
     _animator = GetComponent<Animator>(); 
     _animator.CrossFade("Idle", 0); 
    } 

    void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.Mouse0)) 
     { 
      if (click && Time.time <= (clickTime + clickDelta)) 
      { 
       _animator.CrossFade("Run", 0); 
       click = false; 
      } 
      else 
      { 
       click = true; 
       clickTime = Time.time; 
      } 

      _animator.CrossFade("Walk", 0); 
      Plane playerPlane = new Plane(Vector3.up, transform.position); 
      Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 
      float hitdist = 0.0f; 

      if (playerPlane.Raycast(ray, out hitdist)) 
      { 
       Vector3 targetPoint = ray.GetPoint(hitdist); 
       targetPosition = ray.GetPoint(hitdist); 
       targetRotation = Quaternion.LookRotation(targetPoint - transform.position); 
       destination = targetPosition; 
      } 
     } 

     transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotationSpeed); 

     if ((transform.position - destination).magnitude < 0.7f) 
     { 
      _animator.CrossFade("Idle", 0); 
     } 
    } 
} 
+1

Animator Controllerを使用していませんか?このような国家は、それが何のために設計されたものではないのですか? – Abion47

答えて

0

トランスフォームの持続時間の値を少し(0.25のように)増やすと、状態間のスムーズな移行が得られます。また、「固定期間」のチェックを外します。

関連する問題