Unity3D 2D游戏开发 ——人物移动及动画调用

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("你正在下降.");


        }
    }



}

大概思路就是这样,如果有什么问题可以留言

发布了1 篇原创文章 · 获赞 1 · 访问量 144

猜你喜欢

转载自blog.csdn.net/weixin_42554621/article/details/104760014