IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity Animator 如何用混合树转到混合树,并实现角色移动后保持朝向不变 -> 正文阅读

[游戏开发]Unity Animator 如何用混合树转到混合树,并实现角色移动后保持朝向不变

  • 做2D动画,我们都知道用混合树做四个朝向的移动,但是,一旦松开按键,角色就会回到idle的朝向,我想让他朝右边移动后停下,依然朝向右边静止。
  • 我有八个动画,分别为runFront,runBack,runRight,runLeft,idleFront,idleBack,idleRight,idleLeft
  • 我希望,当我runRight后停下,播放idleRight的动画。而且想都用混合树处理,怎么做?
  • 先上代码
public class PlayerMove : MonoBehaviour
{
    private Animator anim;
  
    void Start()
    {
        anim = GetComponent<Animator>();
        anim.SetFloat("Horizontal2", 0);
        anim.SetFloat("Vertical2", -1);
    }

 
    void Update()
    {
        Vector3 movement = new Vector3(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"), 0f);

        anim.SetFloat("Horizontal", movement.x);
        anim.SetFloat("Vertical", movement.y);
        anim.SetFloat("Magnitude", movement.magnitude);

        transform.position = transform.position + movement * Time.deltaTime;

        if (movement.x > 0 && movement.y == 0)
        {
            anim.SetFloat("Horizontal2", 1);
            anim.SetFloat("Vertical2", 0);
        }
        if (movement.x < 0 && movement.y == 0)
        {
            anim.SetFloat("Horizontal2", -1);
            anim.SetFloat("Vertical2", 0);
        }
        if (movement.y > 0)
        {
            anim.SetFloat("Horizontal2", 0);
            anim.SetFloat("Vertical2", 1);
        }
        if (movement.y < 0)
        {
            anim.SetFloat("Horizontal2", 0);
            anim.SetFloat("Vertical2", -1);
        }

    }
}
  • 首先,我建了两个混合树,一个是idleTree,一个是runTree,然后Entry的默认Transitions指向idleTree,这样一开始,动画就是idle的动画,并且我在void Start()里做了anim.SetFloat(“Horizontal2”, 0);anim.SetFloat(“Vertical2”, -1);这个是让一开始idleTree里的默认动画是朝向前面的。
  • idleTree指向runTree的transitions条件是Magnitude大于0,runTree指向idleTree的transitions条件是Magnitude小于0.001
  • idleTree里面的Parameters是Horizontal2和Vertical2,runTree里面的Parameters是Horizontal和Vertical
  • 这里处理的巧妙之处是用if处理Horizontal2和Vertical2的值,因为if判断完成后,这个值会一直维持这个数值,不会松手就回拨为0,但Horizontal和Vertical的值与movement.x和movement.y关联,所以,一松手就回拨为0
  • 借用if来处理,就解决这个问题了。

还有另一种更好的处理方式,变量只需要三个,不需要像上面一样的五个。

  • 上代码
public class PlayerMove : MonoBehaviour
{
    private Animator anim;
    private Rigidbody2D rb;
    public float speed;

    private float inputX;
    private float inputY;
    private Vector2 inputV;
    private float stopX;
    private float stopY;

    void Start()
    {
        anim = GetComponent<Animator>();
        rb = GetComponent<Rigidbody2D>();
    }


    void Update()
    {
        inputX = Input.GetAxisRaw("Horizontal");
        inputY = Input.GetAxisRaw("Vertical");
        inputV = new Vector2(inputX, inputY).normalized;

        if (inputV != Vector2.zero)
        {
            anim.SetBool("isMoving", true);
            stopX = inputX;
            stopY = inputY;
        }
        else
        {
            anim.SetBool("isMoveing", false);
        }
        anim.SetFloat("InputX", stopX);
        anim.SetFloat("InputY", stopY);

    }

    private void FixedUpdate()
    {
        rb.velocity = inputV * speed;
    }
}
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:32:18  更:2021-08-04 11:33:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 10:34:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码