该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
var enemyNum:int;//猜猜我是谁?
var health:float;//我的血量
var EnemySpeed:float;//我的速度
var myscore:int;//我的分值
var distmin:float;//我的碰撞杀伤范围
var Enemycenter:Transform;//怪物旋转中心
private var mainCamera:Camera;
var comboTex : Transform;
//技能列表
var skill01:Transform; //麒麟跳
var skill02:Transform; //闪电
private var sarah : Transform;//sarah的位置
private var dist:float;
private var mytransform:Transform;
private var adduptime01:float = 0;
private var adduptime02:float = 0;
private var target : Vector3;//用于判断玩家位置是否发生变化
private var randomangle:int;//定义变量y,怪物随机转动角度的种子
private var randomtime:int;//随机时间种子
private var died:boolean = false;//我的死亡状态
private var destroyTime:float;//怪物自毁倒计时
var maxRadiansDelta:float;
private var maxRadiansDeltaFinal:float;
//private var skilling : boolean = false;
function Start () {
mainCamera = Camera.mainCamera;
maxRadiansDeltaFinal = maxRadiansDelta;
//怪的全局数量+1
//CreateEnemy.amount_enemy ++;这货是BOSS,暂时不要跟杂鱼一起统计
mytransform = gameObject.transform;
//获取并sarah角色为目标
sarah = GameObject.FindWithTag("sarah").transform;
//临时目标对齐玩家位置 怪物瞄准临时目标
target = sarah.position;
mytransform.LookAt(target);
randomtime = Random.value * 3;//给个sarah死亡后第一次变化角度的时间
}
var myState : int = 0;
function Update(){
dist = Vector3.Distance(sarah.position, mytransform.position);
switch(myState){
case 1://释放1号技能
Skill01();
break;
case 2://释放2号技能
Skill02();
break;
case 3://释放3号技能
Skill03();
break;
case 4://释放4号技能
Skill04();
break;
default://标准状态
if(dist<10 && dist>2){
adduptime01 += Time.deltaTime;
if(adduptime01 > randomtime){
myState = Random.Range(0,5);
adduptime01 -= randomtime;
randomtime = Random.value * 3;
}
}
Standard();
break;
}
}
//正常跟随AI
function Standard(){
//如果怪物与角色之间的距离大于distmin,则怪物继续前进
if(dist>distmin){
mytransform.Translate(0,0,EnemySpeed*Time.deltaTime);
playanim(Enemycenter);
}
//如果怪物与角色之间的距离小于distmin,则改变玩家全局变量死亡(died)为1
else if(!MoveAndFire.nohurt){
MoveAndFire.health -= 1;//如果目标不是无敌的,则伤血
MoveAndFire.hurt = 1;//角色进入受伤状态1
}
target = Vector3(sarah.position.x,0,sarah.position.z);
mytransform.forward = Vector3.RotateTowards(mytransform.forward,target - mytransform.position,maxRadiansDeltaFinal*Time.deltaTime,2*Time.deltaTime);
//防怪物转向过小。。。
if(dist > 10){
maxRadiansDeltaFinal = maxRadiansDelta*3;//增加转向速度
}else{maxRadiansDeltaFinal = maxRadiansDelta;}
}
function playanim(i : Transform) {
if (!i.animation.isPlaying){
i.animation.Play("run01");
}
}
private var startTime : float;
private var skill01Plan : int = 0;
var point : Transform[];
private var i = 0;
private var r = 400;
function Skill01(){
switch(skill01Plan){
case 0://技能第一阶段,设置各变量
skill01Plan = 1;
break;
case 1://技能第二阶段,等待之前的动画全部结束,开始播放转身动画
if(!Enemycenter.animation.isPlaying){
adduptime02 += Time.deltaTime;
if(adduptime02 > 0.7){
Enemycenter.animation.Play();
target = Vector3(sarah.position.x,0,sarah.position.z);
adduptime02 = 0;
skill01Plan = 2;
}
}else{mytransform.Translate(0,0,EnemySpeed*Time.deltaTime);}
break;
case 2://技能第三阶段,调整动画播放,并转身
if(Enemycenter.animation.isPlaying){
mytransform.forward = Vector3.RotateTowards(mytransform.forward,target - mytransform.position,10*Time.deltaTime,2*Time.deltaTime);
mytransform.Translate(0,0,EnemySpeed * 0.3 * Time.deltaTime);
}else {skill01Plan = 3;}
break;
case 3://技能第四阶段,设置各个目标点位置
skill01.position = mytransform.position;
skill01.rotation = mytransform.rotation;
//Instantiate(skill01,mytransform.position,mytransform.rotation);
skill01Plan = 4;
startTime = Time.time;
Enemycenter.animation.Play();
break;
case 4:
if((Time.time - startTime)*1.5 < 1.2){
mytransform.position = Vector3.Lerp(point[i].position, point[i+1].position, (Time.time - startTime)*1.5);
if(Time.time - startTime > 0.07 && Time.time - startTime < 0.17){
mytransform.forward = Vector3.RotateTowards(mytransform.forward,point[i+1].position - point[i].position,20*Time.deltaTime,2*Time.deltaTime);
}
}else{
i++;
if(i == 5){
skill01Plan = 0;
myState = 0;
i = 0;
}
startTime = Time.time;
Enemycenter.animation.Play("run01");
}
}
}
var point1 : Transform[];
function Skill02(){
switch(skill01Plan){
case 0://技能第一阶段
if(!Enemycenter.animation.isPlaying){
Enemycenter.animation.Play("skill01");
target = Vector3(sarah.position.x,0,sarah.position.z);
point1[0].position = target;
point1[0].rotation.y = Random.rotation.y;
for( var i=0; i < point1.length; i++){
Instantiate(skill02,point1[i].position,point1[i].rotation);
}
skill01Plan = 1;
}
break;
case 1:
if(!Enemycenter.animation.isPlaying){
skill01Plan = 0;
myState = 0;
}
}
}
private var newtarget : Vector3;
private var lastposition : Vector3;
function Skill03(){
switch(skill01Plan){
case 0://技能第一阶段
if(!Enemycenter.animation.isPlaying){
Enemycenter.animation.Play("skill01");
target = Vector3(sarah.position.x,0,sarah.position.z);
lastposition = target;
skill01Plan = 1;
}
break;
case 1:
//下面按照时间间隔计算玩家运动趋势
adduptime02 += Time.deltaTime;
if(adduptime02 > 0.47){
target = Vector3(sarah.position.x,0,sarah.position.z);
//将玩家上次位置与当前位置比较,得出将要前往的新目标点
newtarget = Vector3(target.x + (target.x - lastposition.x) * 5, 0,target.z + (target.z - lastposition.z) * 5);
Instantiate(skill02,newtarget,skill02.rotation);
//最后将Lastposition更新为玩家的位置以便下次使用
lastposition = target;
adduptime02 -= 0.47;
}
if(!Enemycenter.animation.isPlaying){
adduptime02 = 0;
skill01Plan = 0;
myState = 0;
}
}
}
function Skill04(){
switch(skill01Plan){
case 0://技能第一阶段,设置各变量
skill01Plan = 1;
break;
case 1://技能第二阶段,等待之前的动画全部结束,开始播放转身动画
if(!Enemycenter.animation.isPlaying){
adduptime02 += Time.deltaTime;
if(adduptime02 > 0.7){
Enemycenter.animation.Play("run01");
target = Vector3(sarah.position.x,0,sarah.position.z);
adduptime02 = 0;
skill01Plan = 2;
}
}else{mytransform.Translate(0,0,EnemySpeed*Time.deltaTime);}
break;
case 2://技能第三阶段,调整动画播放,并转身
if(Enemycenter.animation.isPlaying){
mytransform.forward = Vector3.RotateTowards(mytransform.forward,target - mytransform.position,10*Time.deltaTime,2*Time.deltaTime);
mytransform.Translate(0,0,EnemySpeed * 0.3 * Time.deltaTime);
}else {
Enemycenter.animation.Play("run01");
skill01Plan = 3;}
break;
case 3:
if(dist < 20){
playanim(Enemycenter);
target = Vector3(sarah.position.x,0,sarah.position.z);
mytransform.forward = Vector3.RotateTowards(mytransform.forward,target - mytransform.position,maxRadiansDelta*0.5*Time.deltaTime,2*Time.deltaTime);
mytransform.Translate(0,0,EnemySpeed * (2.3 - dist * 0.05) * Time.deltaTime);
}else{
skill01Plan = 0;
myState = 0;
}
break;
}
}