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

unity3d——基础篇2刷(Mathf练习题)

第一种方式:先快后慢的跟随(平滑加速减速)

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

public class FollowCube : MonoBehaviour
{
    public Transform B;
    public float moveSpeed;
    
    private Vector3 pos;

    void Update()
    {
        // 先快后慢的形式
        pos.x = Mathf.Lerp(pos.x, B.position.x, Time.deltaTime * moveSpeed);
        pos.y = Mathf.Lerp(pos.y, B.position.y, Time.deltaTime * moveSpeed);
        pos.z = Mathf.Lerp(pos.z, B.position.z, Time.deltaTime * moveSpeed);
        this.transform.position = pos;
    }
}

第二种方式:匀速运动的跟随

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

public class FollowCube : MonoBehaviour
{
    public Transform B;
    public float moveSpeed;
    
    private Vector3 pos;
    private Vector3 bNowPos;
    private Vector3 startPos;
    private float time;

    void Update()
    {
        // 匀速运动
        if (bNowPos != B.transform.position)
        {
            time = 0;
            bNowPos = B.transform.position;
            startPos = this.transform.position;
        }

        time += Time.deltaTime;
        pos.x = Mathf.Lerp(startPos.x, bNowPos.x, time);
        pos.y = Mathf.Lerp(startPos.y, bNowPos.y, time);
        pos.z = Mathf.Lerp(startPos.z, bNowPos.z, time);
        this.transform.position = pos;
    }
}

在第一种方式中,pos 变量存储了当前的跟随位置,并且每帧都会根据 Time.deltaTimemoveSpeed 来平滑地插值到目标位置 B.position。这种方式的特点是跟随速度会随着接近目标而逐渐减慢,给人一种先快后慢的感觉。

在第二种方式中,使用了 startPosbNowPos 来记录起始位置和目标位置,并且使用 time 变量来控制插值的速度。这种方式的特点是无论距离目标有多远,都会以恒定的速度向目标移动,直到到达目标位置。

这两种方式都可以实现跟随效果,但它们在实际应用中会有不同的表现和适用场景。


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

相关文章:

  • 【VUE3】VUE组合式(响应式)API常见语法
  • QT-installEventFilter
  • go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
  • 2024小迪安全基础入门第七课
  • CentOS8.5.2111(7)完整的Apache综合实验
  • 深入理解 Java 基本语法之运算符
  • RabbitMQ的预取值详解
  • 泷羽sec-linux进阶
  • postman的简单使用
  • 【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)
  • 前端小练习——星辰宇宙(JS没有上限!!!)
  • 51单片机从入门到精通:理论与实践指南(一)
  • Hadoop的MapReduce详解
  • 详细描述一下Elasticsearch更新和删除文档的过程?
  • 【Linux】Ubuntu:轻量级Xfce桌面及远程连接
  • 对比C++,Rust在内存安全上做的努力
  • shell数组 Linux分文件 make工具
  • 金铲铲S13双城之战自动拿牌助手
  • emotion2vec语音情感识别 - python 实现
  • 什么是 C++ 中的 Lambda 表达式?Lambda 表达式可以捕获哪些类型的变量?有哪些捕获方式?
  • python的交互式编程
  • 触想工业显示器应用于光伏自动化设备,助力绿色低碳能源发展
  • YOLOv8模型pytorch格式转为onnx格式
  • js.二叉树的层序遍历2
  • [C++]:IO流
  • JavaWeb后端开发知识储备2