写在前面:这个动画功能同样也是使用JavaScript编写脚本,在Unity3D游戏引擎的环境中实现,在怪物的角色动画中,很多与人物相同,这里不再重复。


一、设计敌人

拖一个精英sprite到层次面板,把名字改为monster

  • 把敌人 10帧的动画 run 拖给敌人
  • 把动画控制脚本 animationController拖给敌人
  • 设置Frame Number:10     Direction:勾选,向左
  • 给敌人添加碰撞器  Box Collider  勾选IsTrigger
  • 调整碰撞器的大小   Size-X…Y…
  • 把敌人的标签 monster设置上
  • 在playerStateController脚本上添加功能代码→实现人物与怪物的碰撞检测,并在死亡后,按空格键实现场景的重新开始

动画脚本:playerStateController

//playerStateController(玩家状态控制功能)

#pragma strict
var idle:Texture;//引用图片
var run:Texture;
var jump:Texture;
var die:Texture;
var winTexture:Texture2D;
var dieTexture:Texture2D; var gameState:GameState;//定义变量,标识玩家状态 var levelName:String;//定义关卡名字的变量 var soundName:AudioClip;//引用胜利声音
var dieSound:AudioClip;//引用死亡声音 private var myAnimation:animationController;//引用动画控制脚本(组件) private var moveDirection:boolean=true;//定义移动方向 boolean型
private var exit:boolean=false;//定义出口 碰到出口,设置为true
private var youWin:boolean=false;//是否取胜
private var youDie:boolean=false;//是否死亡 function Start () {
youDie=false;
myAnimation=GetComponent("animationController");//取得动画控制组件的
控制(使用)权
} function Update () {
if(Input.GetAxis("Horizontal")>0){//按了D键,正移,向右走
moveDirection=false;//设置移动方向的变量,向右,为false
if(Input.GetButton("Jump")){//检测是否按下空格键
gameState=GameState.jumpRight;//按下了空格键,右跑跳
}
else{gameState=GameState.runRight;//没按空格键,只向右跑
} }else{
if(Input.GetAxis("Horizontal")<0){//按了A键,向左走
moveDirection=true;
if(Input.GetButton("Jump")){检测是否按了空格键
gameState=GameState.jumpLeft;//按了空格键,左跑跳
}else{
gameState=GameState.runLeft;//没按,只向左跑
} }else{//检测既没按A键,也没按D键的时候,按没按空格键
if(Input.GetButton("Jump")){//按了空格键,跳
if(moveDirection){//检测当时的运动方向
gameState=GameState.idleLeftJump;//true,静止左跳
}else{gameState=GameState.idleRightJump;//false,静止右跳
} }else{gameState=GameState.idle;}//没按空格键,静止状态 }
} if(youDie){gameState=GameState.die;}
//youDie为true,播放死亡动画 switch(gameState){//根据gameState的不同值,执行下面的语句
case GameState.idle:
transform.renderer.material.SetTexture("_MainTex",idle);
//更换玩家图片为idle
myAnimation.frameNumber=1;//设置为静止的一帧图片
myAnimation.direction=false;//设置方向变量
//打勾为true,取消为false
break;//执行完这一块后跳出,后面的不执行了 case GameState.runLeft:
transform.renderer.material.SetTexture("_MainTex",run);
//更换玩家图片为run
myAnimation.frameNumber=10;//设置为一序列的10帧图片
myAnimation.direction=true;//设置方向变量,向左跑
break;//跳出 case GameState.runRight:
transform.renderer.material.SetTexture("_MainTex",run);
myAnimation.frameNumber=10;
myAnimation.direction=false;//设置方向变量,向右跑
break; case GameState.jumpLeft:
transform.renderer.material.SetTexture("_MainTex",jump);
myAnimation.frameNumber=11;
myAnimation.direction=true;//设置方向变量,向左跳
break; case GameState.jumpRight:
transform.renderer.material.SetTexture("_MainTex",jump);
myAnimation.frameNumber=11;
myAnimation.direction=false;//设置方向变量,向右跳
break; case GameState.idleRightJump:
transform.renderer.material.SetTexture("_MainTex",jump);
myAnimation.frameNumber=11;
myAnimation.direction=false;//设置方向变量,静止右跳
break; case GameState.idleLeftJump:
transform.renderer.material.SetTexture("_MainTex",jump);
myAnimation.frameNumber=11;
myAnimation.direction=true;//设置方向变量,静止左跳
break; case GameState.celebrate:
transform.renderer.material.SetTexture("_MainTex",celebrate);
myAnimation.frameNumber=11;
myAnimation.direction=false;//设置方向变量,方向向右
myAnimation.lastFrameNo=8;//最后显示的图片是第8帧
break; case GameState.die:
transform.renderer.material.SetTexture("_MainTex",die);
myAnimation.frameNumber=12;
myAnimation.direction=false;//设置方向变量,方向向右
myAnimation.lastFrameNo=11;//最后显示的图片是第11帧
break;
} if(Input.GetButton("Jump")&& youDie){//死亡
transform.position=new Vector3(0,-2,0);//重新设置玩家的位置
transform.collider.enabled=true;//打开玩家的碰撞器
youDie=false;//“已经死了”这个变量,设为false
不再触发死亡这个状态 } } function OnTriggerEnter(other:Collider){//碰撞检测函数 if(other.tag=="monster"){//检测玩家是否碰到了敌人
youDie=true;//设置死亡为true
AudioSource.PlayClipAtPoint(dieSound,Vector3(0,0,-10));
//播放一个死亡的声音
yield WaitForSeconds(0.5);//演示0.5秒
//transform.collider.enabled=false;//关闭玩家的碰撞器
}
}
二、控制敌人左右循环移动

创建MonsterController脚本→实现引用动画控制组件,显示怪物并镜像,限制怪物循环移动范围

动画脚本:MonsterController

//MonsterController(怪物移动控制功能)

#pragma strict

private var myanimationController:animationController;
private var speed : float = 0.3f;//速度
private var startPosition :float;//起始位置
private var isDown:boolean = true;//起始允许移动 function Start(){
myanimationController = GetComponent.<animationController>();
startPosition = transform.position.x;//取得怪物x方向的位置
} function Update(){
if(isDown){
transform.Translate(-speed*Time.deltaTime,0,0);//设置x轴移动,y轴不移动
}else{
transform.Translate(speed*Time.deltaTime,0,0);//设置x轴负方向移动,y轴方向不移动 }
if(transform.position.x-startPosition>0){isDown=true;myanimationController.direction=true;}
if(transform.position.x-startPosition<-1.0){isDown=false;myanimationController.direction=false;}//控制移动距离
}

注:转载请注明出处

【Salvation】——怪物角色动画&主角碰撞死亡动画的更多相关文章

  1. Mecanim动画系统 - 在角色上使用Mask 叠加动画层

    http://www.narkii.com/club/thread-305706-1.html 2013-10-9 01:15 上传 下载附件 (78.65 KB) 导读:五分钟了解Mecanim角色 ...

  2. CSS3之碰撞反弹动画无限运动

    示例代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  3. 关于Unity中Mecanim动画的重定向与动画混合

    应用 一个RPG游戏,里面有100种怪物,每种怪物其实都差不多的,行走,跳跃,攻击,难道动画师要调100次动画吗?其实不需要 Unity抽象出人形动画系统,用Unity简化版的骨骼来进行统一的管理,只 ...

  4. 时光煮雨 Unity3D实现2D人物动画① UGUI&Native2D序列帧动画

    系列目录 [Unity3D基础]让物体动起来①--基于UGUI的鼠标点击移动 [Unity3D基础]让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoT ...

  5. CoreAnimation4-隐式动画和显式动画

    事务 Core Animation基于一个假设,说屏幕上的任何东西都可以(或者可能)做动画.动画并不需要你在Core Animation中手动打开,相反需要明确地关闭,否则他会一直存在. 当你改变CA ...

  6. Laya的动画制作,整图动画,序列图动画,时间轴动画,龙骨动画

    参考: Laya动画基础 Egret帧动画工具类 版本:2.1.1.1 序列图动画 白鹭的序列图动画,使用TexureMerger合图,然后使用MovieClip类播放. Laya的话,使用图集打包工 ...

  7. jQuery-1.9.1源码分析系列(十五) 动画处理——缓动动画核心Tween

    在jQuery内部函数Animation中调用到了createTweens()来创建缓动动画组,创建完成后的结果为: 可以看到上面的缓动动画组有四个原子动画组成.每一个原子动画的信息都包含在里面了. ...

  8. 背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画)

    [源码下载] 背水一战 Windows 10 (16) - 动画: ThemeAnimation(主题动画) 作者:webabcd 介绍背水一战 Windows 10 之 动画 PopInThemeA ...

  9. 动画总结(UIView的动画)

    Main.storyboard ViewController.m // //  ViewController.m //  8A08.动画总结 // //  Created by huan on 16/ ...

随机推荐

  1. 13 Java内存模型

    数据竞争 int a=0, b=0; public void method1() { int r2 = a; b = 1; } public void method2() { int r1 = b; ...

  2. Visual C++网络五子棋游戏源代码

    说明:网络对战版的五子棋,VC++游戏源码,带音乐,可设置网络最终网络下棋,通过源代码你将了解到设置菜单状态.服务器端口申请.客户机申请连接.发送数据.游戏编写.监听和使用套接字.主菜单对象定义等基础 ...

  3. 动态生成的chosen实现模糊查询

    $('select', newTr).chosen({ width: '100%', search_contains: true }); //初始化复制行下拉框

  4. linux系统web日志分析脚本

    linux系统web日志分析这方面工具比较多,比如logwatch或awstats等使用perl语言开发,功能都非常强大.但这些软件都需要进行一些配置,很多朋友往往在技术方面没有投入太多力量,即便参照 ...

  5. ECNU 3263 丽娃河的狼人传说(差分约束)

    丽娃河的狼人传说 Time limit per test: 1.0 seconds Memory limit: 256 megabytes 丽娃河是华师大著名的风景线.但由于学校财政紧缺,丽娃河边的路 ...

  6. POJ 2763 Housewife Wind(DFS序+LCA+树状数组)

    Housewife Wind Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 11419   Accepted: 3140 D ...

  7. 流浪者(rover)

    流浪者(rover) 题目描述 有一位流浪者正在一个n∗mn∗m的网格图上流浪.初始时流浪者拥有SS点体力值. 流浪者会从(1,1)(1,1)走向(n,m)(n,m),并且他只会向下走((x,y)→( ...

  8. PHP一维数组和二维数字排序整理

    <?php /** 一维数组排序 sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据值,以升序对关联数组进行排序 ksort() - 根据键,以升 ...

  9. Python 使用cx_freeze 生成exe文件【转】

    Python 使用cx_freeze 生成exe文件   在python中比较常用的python转exe方法有三种,分别是cx_freeze,py2exe,PyInstaller.py2exe恐怕是三 ...

  10. 访问外网 ML2 的配置

    通过 router 可以实现位于不同 vlan 中的 instance 之间的通信. 接下来要探讨的问题是 instance 如何与外部网络通信. 这里的外部网络是指的租户网络以外的网络. 租户网络是 ...