2016-10-28 5 views
0

ワンクリックすると、キャラクターがマウスの位置に移動します。 しかし、マウスのボタンを押している場合は、私はそれが文字を回転させたい。 何らかの理由で、アイドル状態になっています。だから、私がワンクリックをすると、キャラクターは小さなジャンプでジャンプし、マウスの位置に歩いていない。ワンクリックマウスとマウスを切り替えるにはどうすればいいですか?

if(Input.GetMouseButton(0))の全体部分を削除すると、マウスをクリックするとマウスの位置までうまくいくが、一度この部分を追加すると歩行しない。マウスボタンが押されている場合、常に

void Update() 
    { 
     if (Input.GetKeyDown(KeyCode.Mouse0)) 
     { 
      _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; 
      } 
     } 

     if (Input.GetMouseButton(0)) 
     { 
      _animator.CrossFade("Idle", 0); 
      RaycastHit hit; 
      Ray ray1 = Camera.main.ScreenPointToRay(Input.mousePosition); 

      if (Physics.Raycast(ray1, out hit) && hit.collider.name != "ThirdPersonController") 
      { 
       transform.LookAt(hit.point); 
      } 
      else 
      { 
       transform.LookAt(ray1.GetPoint(100)); //the number here is compltely arbitrary 
      } 
     } 
    } 

答えて

1

Input.GetMouseButton(int)戻ります。 Input.GetMouseButtonDown(int)は、マウスボタンがクリックされた最初のフレームに、のみを返します。

だからあなたのコードを考えると、可能性がある:

  • いいえ]ボタンが押されていないされています。 ifブロックは入力されません。
  • これは、マウスボタンをクリックしたときにフレームと一致します。これはです。 ifブロックの両方が実行されます。あなたのアニメーターの状態はWalkに設定され、すぐにIdleに設定され、あなたのキャラクターは動かない。
  • マウスボタンが数フレーム前に押し下げられ、まだ押し続けられています。 2番目のifブロックのみが実行されます。あなたのアニメーターの状態はIdleに設定されており、その文字は移動しません。

あなたは、この特定の制御方式を使用することを決定した場合は、遅延のいくつかの並べ替えを実装することを検討すべきである - 多分、マウスボタンが0.2秒より短い押すはクリックとしてカウントし、長い0.2秒以上押す必要があるとしてカウントする必要がありますa 保留。このようにして、あなたの述語は重複しません。

関連する問題