2017-01-13 10 views
0

Unityで高度な敵AIスクリプトを作成しようとしていますが、私は少しこれで苦労しています。私はすでにアニメーションとすべてをインポートしましたが、スクリプトの部分はうまくいきません。私がやろうとしている何Unity Enemy AIスクリプトC#

: NPCは(をisWalking)再び歩き、その後、数秒間、一定の半径内(をisWalking)歩くアイドル(isIdle)必要があります。プレイヤーはNPCの視界半径内部に入った場合には、プレイヤーが至近距離(isAttacking)内にあるとき

、NPCはプレイヤー(isRunning)、攻撃の後に実行する必要があります。プレイヤーが範囲外になると、NPCは2回目のアイドルアニメーションを1回再生し(isIdle2)、最初のアイドルアニメーション(isIdle)に戻ります。

最後に、Eキーを押すと、NPCはトークアニメーションを1回再生する必要があります(isTalking)。

これは私の現在のスクリプトです:あなたが仕事をしたいどのような

using UnityEngine; 
using System.Collections; 

public class guardAttack : MonoBehaviour { 

public Transform player; 
static Animator anim; 

// Use this for initialization 
void Start() 
{ 
    anim = GetComponent<Animator>(); 
} 

// Update is called once per frame 
void Update() 
{ 
    Vector3 direction = player.position - this.transform.position; 
    float angle = Vector3.Angle(direction,this.transform.forward); 
    if (Vector3.Distance (player.position, this.transform.position) < 10 && angle < 30) { 

     direction.y = 0; 

     this.transform.rotation = Quaternion.Slerp (this.transform.rotation, 
      Quaternion.LookRotation (direction), 0.1f); 

     anim.SetBool ("isIdle", false); 
     if ((direction.magnitude > 5)) { 
      this.transform.Translate (0, 0, 0.10f); 
      anim.SetBool ("isRunning", true); 
      anim.SetBool ("isAttacking", false); 
      anim.SetBool ("isTalking", false); 
      anim.SetBool ("isIdle2", false); 

     } else { 
      anim.SetBool ("isRunning", false); 
      anim.SetBool ("isAttacking", true); 
      anim.SetBool ("isTalking", false); 
      anim.SetBool ("isIdle2", false); 
     } 
     } else { 
     anim.SetBool("isIdle", true); 
     anim.SetBool("isRunning", false); 
     anim.SetBool("isAttacking", false); 
     anim.SetBool("isIdle2",false); 

     if (Input.GetKeyDown (KeyCode.E)) { 
      anim.SetBool("isTalking", true); 

     } 
    } 

} 
} 
+0

実際の質問/問題は何ですか? – TyCobb

答えて

0

は、有限状態マシンです - と私はMecanimを意味するものではありません - AIロジックのために。ここではクイックチュートリアルで、インターフェイスを使用し、スクリプトの「知識のツールボックス」を追加します。それは少し圧倒して見えるかもしれませんが、あなたがそれを与えるなら、それはあなたがやろうとしていることを正確に解決し、あなたのゲームの他の側面を助けます。

ちょうどこの「リフレクティブ」な動作は、AIの領域で表面を傷つけることであることを覚えておいてください。

https://unity3d.com/learn/tutorials/topics/scripting/using-interfaces-make-state-machine-ai?playlist=17117