首页 > 其他分享 >unity 人物行走

unity 人物行走

时间:2022-09-05 21:44:16浏览次数:60  
标签:状态 人物 float private unity 行走 Speed dir animator

1、双击player,打开Animator Controller

 

增加变量,使变量与状态转换关联起来。

 创建混合树。

建两个,运动中和静止时的混合树,并为这两个混合树之间添加状态转换。

 点一下白箭头(从静止到移动),在Inspector视图中找到Conditions,点小加号添加变量speed。

设置Conditions条件(发生状态转换的条件),当Speed比0大时从等待状态到移动状态。

点掉Has Exit Time,Fixed Duration,将Transition Duratio改为0(去掉过渡动画),如下图:

 

 各参数含义参考:https://blog.csdn.net/wangkai19952008/article/details/77101562

再创建一个新的关系(从移动到静止)。

设置Conditions条件(发生状态转换的条件),当Speed比0.9小时从移动状态到等待状态。

其他步骤不变,最后如下图:

 此处设为0.9的原因:人物即使停止行走,但Speed还会是一个很小的正数,如果设的小了就会出现move和wait状态转换反复的情况。

因此也会出现动画显示问题,问题不大,但我不知道怎么解决了......

 2、点一下你的角色,给你的角色添加一个碰撞组件 

 

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class playerControl : MonoBehaviour
{
    private Rigidbody2D _rigidbody2D;
    private Animator _animator;

    private float movespeed = 2f;
    private float x;
    private float y;
    float _x, _y;

    // Start is called before the first frame update
    void Start()
    {
        Application.targetFrameRate = 60;//帧率设置
        //初始化
        _rigidbody2D = GetComponent<Rigidbody2D>();
        _animator = GetComponent<Animator>();
        _x = _y = 0;
    }

    // Update is called once per frame
    void Update()
    {
        x = Input.GetAxis("Horizontal");
        y = Input.GetAxis("Vertical");

        Vector2 dir = new Vector2(x, y) * movespeed;

        Walk(dir);
       
        if(x!=_x||y!=_y)//当方向发生变化时才发生状态转换

        {
            _animator.SetFloat("Speed", dir.sqrMagnitude);
            _animator.SetFloat(name: "moveY", y);
            _animator.SetFloat(name: "moveX", x);
            
            x = _x;
            y = _y;
        }
        


    }

    private void Walk(Vector2 dir)
    {
        _rigidbody2D.velocity = dir;
    }
}

  参考视频:

https://www.bilibili.com/video/BV1m7411F77s

https://www.bilibili.com/video/BV1q4411q7mM?spm_id_from=333.788.top_right_bar_window_history.content.click

 

标签:状态,人物,float,private,unity,行走,Speed,dir,animator
From: https://www.cnblogs.com/tenyuan/p/15848246.html

相关文章

  • blender人物建模笔记01
    blender好久没摸了,也好复习一下这个教程是纯使用点线面操作建模的,没有用到雕刻,雕刻有机会再接触吧,感觉也很好玩。Refr添加参考图片,用边数为8的圆环先把一侧眼睛嘴巴脖子......
  • unity新建项目与物体的创建
    新建项目1.新建项目项目:每一个游戏都是一个独立的项目。1.打开Unity,在Projects面板上输入“Projectname”(项目名称);2.然后在“Location”中选择本地存储位置;3.选......
  • 读UnityShader入门精要第六章-Unity中的基础光照
    1.我们如何看到这个世界1.1 光源光是由光源发出的,在实时渲染中,光源被当成一个没有体积的点.在光学中,使用辐照度(irradiance)来量化光.当光打在一个平面上......
  • 第 20 天:在 Unity 中为 Sprite 设置动画
    第20天:在Unity中为Sprite设置动画客观的:我们如何在我们的统一项目中为我们的精灵提供动画?在我的GalaxyShooter项目中,拥有sprite非常棒,并且都提供了真实的......
  • unityshader_01
    第一章渲染流水线1.1渲染流水线1.1.1现实中流水线在工业上,流水线被广泛应用在装配线上。假设,老王有一个生产洋娃娃的工厂,一个洋娃娃的生产流程可以分为4个步骤:在流水线......
  • unity prefab的新用法
    预制件是一个可重用的构建块,你可以把各种类型的对象统一成预制件。蓝色立方体是预制件,灰色的是游戏对象。用浏览器自带的翻译软件看的,可能会有一些细节问题......嵌套的......
  • 如何将Unity3D的工程文件安装到quest中
    本文用于学习笔记,参考链接  作者:倥偬盎离https://www.bilibili.com/read/cv12205073/出处:bilibili一、需要提前安装的软件1.oculus手机应用下载 使用手册上面提供......
  • Unity — 带有专业提示的 Cinemachine 系统
    Unity—带有专业提示的Cinemachine系统今天,我将解释Unity中电影机系统的使用。正如我在互联网上的几个教程和主题中看到的那样,由于缺乏真实案例,给出的解释还不够。......
  • Unity踩坑记录(持续更新)
    1.利用UsePass可以帮助投影pass合批。相同网格、不同材质、不同shader,只要这些shader使用UsePass引用了同一个pass,并且材质的属性和宏都一样,那么这些物体的投影pass就可以......
  • 如何精简Unity中使用的字体文件
    http://t.zoukankan.com/lancidie-p-6285569.html ◆◆◆问题描述我们《极无双》项目中使用了两套字库。黑体字体来显示大部分既定文本、玩家昵称、对话等。隶书字体来......