进入区域敌人自动朝向玩家并做出攻击
敌人端代码
private Animator animator;//声明一个动画
private GameObject Player;//要看向的物体(玩家)
public GameObject Prefab;//预制体(子弹)
void Start()
{
animator = GetComponent<Animator>();//获取当前物体动画
Player = GameObject.Find("PolyArtWizardStandardMat");//查找玩家
}
// Update is called once per frame
void Update()
{
}
//IK使用的方法
private void OnAnimatorIK(int layerIndex)
{
if (Vector3.Distance(transform.position, Player.transform.position) <= 10)//判断玩家是否在身边,10为触发范围
{
animator.SetLookAtWeight(1);//设置头部权重
animator.SetLookAtPosition(Player.transform.position);//使头部看向玩家
transform.LookAt(Player.transform);//身体转向玩家
animator.SetBool("Eattack", true);//触发施法动画
}
else {
animator.SetBool("Eattack", false);//关闭施法动画
}
}
void Eattck()//根据动画关键帧创建动作
{
GameObject Prefabs=Instantiate(Prefab, transform.position + transform.TransformVector(0, 1, 1), Quaternion.identity);//将子弹实例化
Transform Prefabss = Prefabs.transform;
Prefabs.transform.forward = transform.forward;//使预制体与当前物体朝向一致
Prefabss.transform.SetParent(transform);//将预制体作为当前物体的子物体
}
子弹飞行需将脚本挂载到子弹上,创建飞行速度和销毁机制,方向是由上边脚本控制的,保持与释放者方向一致。
float timer = 0;
void Start()
{
}
void Update()
{
transform.Translate(Vector3.forward * 50f * Time.deltaTime);//向前方移动
timer += Time.deltaTime;
if (timer > 2)
{
Destroy(gameObject);//2秒后自动销毁
}
}
public GameObject prefab;
private void OnCollisionEnter(Collision collision)//监听发生碰撞
{
Instantiate(prefab, transform.position, Quaternion.identity);//碰撞是创建一个预制体
if (collision.gameObject != null && collision.gameObject.tag != "Player")//通过标签判断碰撞物体是否为玩家
{
Destroy(gameObject);//销毁自身
}
if (collision.gameObject.tag == "Player")
{
Destroy(gameObject);//销毁自身
Destroy(collision.gameObject);//销毁被碰撞物体
}
这个脚本碰到玩家后将玩家销毁,真正应用时可以灵活使用,可以是子弹,火球,加血,减血,或者附加增益等各种效果。
注意的时需要将子弹作为敌人角色的子物体,不然会乱飞。