当前位置: 首页 > article >正文

开源项目工具:LeanTween - 为Unity 3D打造的高效缓动引擎详解(比较麻烦的API版)——实现物体抛物线移动

为了让LeanTween更具有灵活性,LeanTween开放了一个API:

LeanTween.value(gameObject,回调函数,起始数值,终点数值,时间)

API中的数值,可以是float,vector3,vector2,color等类型

所以可以用回调函数做很多事情,比如可以同时对物体的大小和位置进行调整。

以下直接上代码,实现物体的抛物线运动:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using UnityEngine;
using UnityEngine.UI;

public class 测试抛物线 : MonoBehaviour
{
    [Header("目标点")]
    public GameObject target;
    [Header("开始按钮")]
    public Button btn_begin;
    [Header("暂停按钮")]
    public Button btn_end;
    [Header("恢复按钮")]
    public Button btn_resume;
    [Header("重置按钮")]
    public Button btn_restore;
    [Header("LeanTwee唯一ID")]
    public int _id;
    [Header("抛物线高度")]
    public float parabolaHeight;

    private Vector3 oriPos;//起始坐标
    // Start is called before the first frame update
    void Start()
    {
        oriPos = transform.position;
        btn_begin.onClick.AddListener(() => {
            Action<Vector3> updatePos = UpdatePos;
            _id =  LeanTween.value(gameObject, updatePos, transform.position, target.transform.position, 5f).id;
        });
        btn_end.onClick.AddListener(() => {
            LeanTween.pause(_id);
        });

        btn_resume.onClick.AddListener(() => {
            LeanTween.resume(_id);
        });

        btn_restore.onClick.AddListener(() => {
            transform.position = oriPos;
        });
    }

    private void UpdatePos(Vector3 pos)
    {
        float ratio = Vector3.Distance(pos, oriPos) / Vector3.Distance(target.transform.position, oriPos);
        Vector3 currentPos = pos;
        currentPos.y += Mathf.Sin(ratio * Mathf.PI) * parabolaHeight;
        transform.position = currentPos;
    }
}

代码很简单!


PS:

注意:

如果同时加添加多种动画,比如:

        LeanTween.value(gameObject, UpdatePosCall, transform.position, target.transform.position, 5f)
            .setOnUpdate(OnOtherThing)
            .setEase(LeanTweenType.easeInElastic).setLoopClamp(1);

这时候如果用setOnUpdate控制动画细节可能会出现问题,所以这时候最好将动画细节控制放到回调函数UpdatePosCall中,大家可以多试试,交流


http://www.kler.cn/a/395919.html

相关文章:

  • 浅层神经网络
  • shell编程之变量与引用
  • World of Warcraft [WeakAuras]Barney Raid Kit - Collapsing Star Indicator
  • 本地 / 网络多绑定用例总结
  • 图像处理之cornerdetection(角点检测)综述
  • 前端知识点---this的用法 , this动态绑定(Javascript)
  • 【2025最新计算机毕业设计】基于SpringBoot+Vue电脑在线装机指南教程网站【源码+文档】
  • 数据结构-线性表-具有独立头节点的双向循环链表
  • ACIS中wire与edge的区别是什么
  • Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)
  • 位图和布隆过滤
  • 【Linux】内核调用栈打印函数dump_stack使用效果
  • 充电桩布局建设的智能趋势
  • c中柔性数组
  • AI开发-计算机视觉库-OpenCV
  • AVL树了解并简单实现
  • 产业与学术相互促进,2024年OEG海上能源博览会助力全球能源可持续发展
  • PL/0-语法分析器
  • SystemVerilog学习——类的继承
  • node.js知识点总结
  • PaoluGPT——千里挑一
  • Windows安装Elasticsearch及Spring Boot整合ES教程
  • Flutter-左侧导航栏跟随窗口的宽变化
  • 使用机器学习优化数据库查询性能
  • FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API
  • 基于集成Whisper 与 Pepper-GPT改进人机交互体验并实现顺畅通信