这两天因为研究“四元数旋转”死了不少脑细胞在养伤
这章主要内容是敌人的AI控制
先贴出来代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
* 基本思路:
* 1. 七秒钟进行一次攻击
* 2. 每次攻击先向前飞行 再随机播放攻击动画 然后调头回去
* */
public class Death_Wing : MonoBehaviour
{
//设置动画控制器
public Animator anim;
//主角游戏对象
public Camera player;
//记录敌人上一次思考时间
private float aiThankLastTime;
//记录当前是否为攻击状态
private bool isAttack;
//持续攻击状态
private bool Continue_Attack = false;
//记录攻击动画,外部控制防止无限循环
private int randomNum = 0;
void Start()
{
anim = GetComponent<Animator>();
}
void Update()
{
isTime();
if(isAttack==true || Continue_Attack == true)
{
Attack(); //因为有移动操作,所以用上time.deltatime,所以要放到update里
}
}
//时间函数
void isTime()
{
//这里表示敌人每4.5秒进行一次攻击
if (Time.time - aiThankLastTime >= 4.5f)
{
aiThankLastTime = Time.time;
isAttack = true;
Continue_Attack = true;
}
else
{
anim.SetFloat("AttackNum", 0f);
isAttack = false;
}
}
//攻击函数
void Attack()
{
// 判断敌人与主角之间的距离
float distance = Vector3.Distance(player.transform.position, this.transform.position);
if (distance <= 4.0f)
{
//达到指定距离,开始播放攻击动画
//随机数控制随机攻击
randomNum = new System.Random().Next(1, 3);
switch (randomNum)
{
case 1:
anim.SetFloat("AttackNum", 1.0f);
break;
case 2:
anim.SetFloat("AttackNum", 2.0f);
break;
case 3:
anim.SetFloat("AttackNum", 3.0f);
break;
}
Continue_Attack = false;
}
else
{
//控制死亡之翼向左追击
//当敌人进入追击状态时,将面朝主角方向奔跑
this.transform.LookAt(player.transform);
transform.Translate(0, 0, 4.0f * Time.deltaTime, Space.Self);
}
}
}
AI的部分有基础的萌新也可以看懂
主要讲一下动画的混合
网上的教程有说用blend tree的,我的感觉就是 学不会 注意红字部分
左侧Layers部分有两个,我新建了一个Attacks层
Base Layer里面是飞行动画
Attack里面是攻击动画
修改权重(权重大概可以理解为重要程度,或者是体现度)权重为0就不混合,权重越大体现的程度越高
后面的parameters也可以进行动画的切换控制
这样就能做到死亡之翼一边飞一边进行攻击