Unity 角色移动及动画调用
(1)首先要给 Sprite【游戏角色添加 刚体(Rigidbody2D)和碰撞体(Circle Colloder2D)】
(2)设置好角色的动画以及角色动画控制器里面的参数,这里使用了float 和bool 类型的参数 ,行走的动画调用的是float 类型,待机跳跃下降用的是bool
(3)编写代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player_move : MonoBehaviour
{
private Rigidbody2D player_move_rd;//获得组件rigibody
private Animator ani_player; //获得角色组件animator
//可以直接public
public float speed;
public float jumpforce;
public Collider2D collider_player;//获得角色组件collider
public LayerMask ground;//判断角色是不是在地面上如果不是就下降
void Start()
{
player_move_rd = GetComponent<Rigidbody2D>();
ani_player = GetComponent<Animator>();
}
void FixedUpdate()
{
//游戏角色的移动 调用函数
Playermove();
//跳跃 移动状态切换
SwitchAnim();
}
void Playermove() {
//人物移动
float player_horizontalmove = Input.GetAxis("Horizontal");
//人物面向问题 raw(-1,1)
float facedircetion = Input.GetAxisRaw("Horizontal");
//人物移动函数
if (player_horizontalmove !=0 )
{
player_move_rd.velocity = new Vector2(player_horizontalmove * speed*Time.deltaTime, player_move_rd.velocity.y);
ani_player.SetFloat("running", Mathf.Abs(facedircetion));
Debug.Log("你正在移动.");
}
if(facedircetion != 0)
{
transform.localScale = new Vector3(facedircetion, 1, 1);
}
//人物跳跃函数
if (Input.GetButtonDown("Jump"))
{
player_move_rd.velocity = new Vector2(player_move_rd.velocity.x, jumpforce * Time.deltaTime);
ani_player.SetBool("jumping", true);
Debug.Log("你正在跳跃.");
}
}
//跳跃 移动状态切换
void SwitchAnim()
{
ani_player.SetBool("idel", false);
if (ani_player.GetBool("jumping"))
{
if (player_move_rd.velocity.y < 0)
{
ani_player.SetBool("jumping", false);
ani_player.SetBool("falling", true);
Debug.Log("你正在升天.");
}
}
else if(collider_player.IsTouchingLayers(ground))
{
ani_player.SetBool("falling",false);
ani_player.SetBool("idel",true);
Debug.Log("你正在下降.");
}
}
}
大概思路就是这样,如果有什么问题可以留言