【发布时间】:2017-01-13 22:42:10
【问题描述】:
我正在尝试在 Unity 中制作高级敌人 AI 脚本,但我对此有点挣扎。我已经导入了动画和所有内容,但脚本部分并不顺利。
我正在尝试做的事情: NPC 应该在一定半径内行走 (isWalking),闲置 (isIdle) 几秒钟,然后再次行走 (isWalking)。
当玩家进入 NPC 的视野范围内时,NPC 应该追随玩家(isRunning),并在玩家接近时攻击(isAttacking)。当玩家超出范围时,NPC 应该播放第二个空闲动画(isIdle2),然后返回第一个空闲动画(isIdle)。
最后,当按下 E 键时,NPC 应该播放一次谈话动画(isTalking)。
这是我当前的脚本:
using UnityEngine;
using System.Collections;
public class guardAttack: MonoBehaviour
{
public Transform player;
static Animator anim;
// Use this for initialization
public void Start()
{
anim = GetComponent<Animator>();
}
// Update is called once per frame
public 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.1 f);
anim.SetBool("isIdle", false);
if ((direction.magnitude > 5))
{
this.transform.Translate(0, 0, 0.10 f);
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);
}
}
}
}
【问题讨论】:
-
实际的问题/问题是什么?
标签: c# animation unity3d artificial-intelligence controls