写在前面:这个动画功能同样也是使用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;}//控制移动距离 }
注:转载请注明出处
时间: 2024-10-12 03:02:53