Unity 忍者跑酷

1.动画制作

1。把Player帧动画直接拖入到Scene中,unity会自动生成改物体的默认idel动画。
2。选定游戏物体,Ctrl+6 打开Animation,可以手动添加帧动画。
3。在Animator中,控制动画切换。在Parameters中添加条件,右键动画,make Transition 建立转换,记得Has Exit Time取消勾选,
     勾选代表播放完上一个动画才播放下一个动画,这里要直接转换。
4。脚本中。在该游戏物体脚本中 实现条件控制。
      先声明Animator    private Animator animator;
      在Awake中初始化,animator=GetComponent();
      在if条件里完成控制。animator.setFloat("  ",    ); or animator.SetBool(" ",true);

2.人物控制

1。首先给人物添加rigidbody2D。 在脚本中得到该游戏物体。
      声明  private Rigidbody2D rigidbody;
      Awake()中初始化,rigidbody2D=GetCompont();
2。人物移动。
      水平移动。
      定义一个速度常量 public float player_velocity=50;
      水平方向的力。float h=input.GetAxis("Horizontal");  h<0,向左。h>0,向右。
      if(h>0.05f)   rigidbody2D.AddForce(vector2.right*player_velocity);   转向 transform.localScale=new Vector(1,1,1);
     if(h<-0.05f)  rigidbody2D.AddForce(-vector2.right*player_velocity);  转向 transform.localScale=new Vector(-1,1,1);
      跳跃。
      垂直速度,public float jump_velocity=50;
      得到人物的速度。 Vector2 velocity=rigidbody2D.velocity;
      按下空格跳跃 if(input.GetKeyDown(KeyCode.Space))  velocity.y=jump_velocity; rigidybody2D.velocity=velocity;
3。地面,墙壁区分。
     首先为各个物体添加BoxCollider2D.和标签Tag  (Player,Ground,Wall)
     添加条件  bool isGround = false; bool isWall = false;
     碰撞检测。void OnCollisionEnter2D(Collision collision){ if(collision,collider.tag=="Ground"){isGround=true;}}
                       void OnCollisionExit2D(Collision collision){ if(collision.collider.tag=="Wall"){isWall=false;} }
4。人物在墙上的操作
     首先判断是否在墙上滑行。bool isSlider;
     if(isGround==true || isWall=false)  isSlider=false;
     人物控制都是在 isSlider==false;
     碰到墙转向 void ChangeDir(){  isSlider=true;if(wallTransform.position.x
     { transform.localScale=new Vector3(1,1,1); }  }
5。相机跟随

    获得人物位置 public Transform target;
    获得相机位置Vector3 pos=transform.position;
    位置差:pos.x=target.position-transform.position;
    相机位置:transform.position=pos;
6。敌人控制(转向,跟随)

      当角色与敌人距离小于某个数值,敌人开始朝着角色移动。
      设置一个临界距离 public float attackDistance=15;
      得到角色位置。PlayerTransform=GameObject.FindGameObjectWithTag("Player").transform;
      距离差:float distance=Vector3.Distance(PlayerTransform,position-transform.position);
      判断if(distance
         { transform.localScale=new Vector3(-1,1,1) }   
         移动:Vector3 dir=PlayerTransform.position-transform.positon;
         transform.position=dir.normalize*enemySpeed*Time.deltatime+transform.position;}

3.声音添加

在相机中添加一个组件AudioSource。
为相机添加一个脚本 AduioManager{  }
用单利模式
public static AudioManager _instance;
private AudioSource audio;
public AudioClip jumpAudio;
初始化 void Awake()=> _instance=this;
audio=GetComponent();
调用方法:public void PlayJumpAudio(){  audio.PlayOneShot(jumpAudio);   }
使用方法 :AudioManager._instance.PlayJumpAudio();

PS.Trail Render 添加头巾

你可能感兴趣的:(Unity3D)