Unity UI 道路线跟随:让图标沿道路轨迹移动

在 Unity UI 开发中,有时需要让图标沿着一条道路轨迹移动,比如地图上的车辆行驶动画导航路径指示等。本文介绍如何基于 UI 图片中的道路线生成曲线,并使用 Slider 控制图标沿轨迹运动,适用于 UI 导航、路径跟随动画等场景


1. 功能介绍

  • 基于 UI 图片自动解析道路轨迹,生成 AnimationCurve
  • 使用 Slider 控制图标沿道路移动
  • 适用于 UI 地图、导航路径动画等

最终效果👇

2. 代码实现

2.1 解析道路轨迹,生成曲线路径

思路:

  • 读取 UI 图片 (Image) 的 Sprite,获取 Texture2D
  • 遍历像素点,找到道路轨迹的像素
  • 转换为 UI 坐标,存入 AnimationCurve,用于后续运动计算
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using Sirenix.OdinInspector;public class PathGenerator : MonoBehaviour
{public Image roadImage; // 道路线 UI 图片public AnimationCurve pathCurve = new AnimationCurve(); // 道路路径曲线[Button("Generate Path")]public void GeneratePath(){if (roadImage == null || roadImage.sprite == null){Debug.LogError("Road Image or Sprite is not assigned.");return;}Sprite sprite = roadImage.sprite;Texture2D texture = sprite.texture;Rect rect = sprite.rect;List<Vector2> points = new List<Vector2>();// 计算缩放比例RectTransform rectTransform = roadImage.rectTransform;float scaleX = rectTransform.rect.width / rect.width;float scaleY = rectTransform.rect.height / rect.height;// 提取道路轨迹上的点for (int x = 0; x < rect.width; x++){for (int y = 0; y < rect.height; y++){Color pixel = texture.GetPixel((int)rect.x + x, (int)rect.y + y);if (pixel.a > 0.1f) // 透明度判断,找到道路轨迹{Vector2 point = new Vector2((x - rect.width / 2) * scaleX, // UI 坐标转换(y - rect.height / 2) * scaleY);points.Add(point);break;}}}// 生成曲线路径pathCurve = new AnimationCurve();foreach (Vector2 p in points){pathCurve.AddKey(p.x, p.y);}}
}

生成一条与路径相同的Curve,效果如下👇

2.2 让图标沿道路轨迹移动

思路:

  • 监听 Slider 拖动事件,获取 value
  • Slider 值映射到曲线的 X 轴坐标
  • 计算对应 Y 轴坐标,更新图标位置
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;public class FollowPath : MonoBehaviour
{public PathGenerator pathGenerator; // 路径生成器public Slider slider; // 控制 CurrentX 的 Sliderasync void Start(){if (slider != null){slider.onValueChanged.AddListener(OnSliderValueChanged);}await UniTask.WaitForFixedUpdate();OnSliderValueChanged(slider.value);}void OnSliderValueChanged(float value){if (pathGenerator == null || pathGenerator.pathCurve.length == 0 || slider == null) return;// 获取路径的X范围float minX = pathGenerator.pathCurve.keys[0].time;float maxX = pathGenerator.pathCurve.keys[pathGenerator.pathCurve.length - 1].time;// 映射 Slider 的值到 CurrentXfloat currentX = Mathf.Lerp(minX, maxX, value);// 获取对应的Y坐标float y = pathGenerator.pathCurve.Evaluate(currentX);// 更新 UI 位置RectTransform rectTransform = GetComponent<RectTransform>();rectTransform.anchoredPosition = new Vector2(0, y + 4);}
}

3. 运行效果

  1. 点击 Generate Path,从 UI 图片解析道路轨迹
  2. 拖动 Slider,图标沿道路轨迹平滑移动
  3. 可用于 UI 导航、路径动画等场景

4. 适用场景

UI 地图导航(如 GPS 轨迹动画)
车辆行驶路径(如小车沿地图行驶)
手绘路径动画(如绘制道路后小车自动行驶)

如果有更好的优化方案,欢迎讨论! 🚀


最后贴上道路线的图片:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18216.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「软件设计模式」建造者模式(Builder)

深入解析建造者模式&#xff1a;用C打造灵活对象构建流水线 引言&#xff1a;当对象构建遇上排列组合 在开发复杂业务系统时&#xff0c;你是否经常面对这样的类&#xff1a;它有20个成员变量&#xff0c;其中5个是必填项&#xff0c;15个是可选项。当用户需要创建豪华套餐A&…

有哪些免费的SEO软件优化工具

随着2025年互联网的不断发展&#xff0c;越来越多的企业意识到在数字营销中&#xff0c;网站的曝光度和排名至关重要。无论是想要提高品牌知名度&#xff0c;还是想要通过在线销售增加收益&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;都是一项不可忽视的关键策略。而要…

DeepSeek从入门到精通:提示词设计的系统化指南

目录 引言&#xff1a;AIGC时代的核心竞争力 第一部分 基础篇&#xff1a;提示词的本质与核心结构 1.1 什么是提示词&#xff1f; 1.2 提示词的黄金三角结构 第二部分 类型篇&#xff1a;提示词的六大范式 2.1 提示语的本质特征 2.2 提示语的类型 2.2.1 指令型提示词 …

单智能体到多智能体智能体任务规划有什么变化

单智能体到多智能体智能体任务规划有什么变化 核心原理 单智能体任务规划:大模型利用其强大的自然语言理解和生成能力,结合多模态信息,将自然语言描述的任务分解为可执行子任务,并能根据环境反馈调整执行策略。在规划过程中,可通过不同方式生成或优化任务计划,如端到端规…

算法之 跳跃游戏

文章目录 55.跳跃游戏思路参考&#xff1a;56.合并区间 55.跳跃游戏 55.跳跃游戏 灵神思路 思路分析&#xff1a; 两种思路&#xff0c;思路1是我们可以直接维护当前到达i的时候所能到达的最右的边界mr&#xff0c;如果i>mr就说明无法到达i,否则就是可以到达&#xff1b;…

Ubuntu22.04通过Docker部署Jeecgboot

程序发布环境包括docker、mysql、redis、maven、nodejs、npm等。 一、安装docker 1、用如下命令卸载旧Docker: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done 2、安装APT环境依赖包…

STM32 ADC介绍(硬件原理篇)

目录 背景 AD转换器 采样与保持 量化 编码 AD转换器转换原理 DA转换原理 AD转换原理 1.逐次逼近型AD转换器 2.并联比较型AD转换器 编码器 同步D触发器和边沿D触发器 基本RS触发器 同步RS触发器 同步D触发器 边沿型D触发器&#xff08;维持-阻塞D触发器&#xff…

DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏

DeepSeek4j Spring Boot Starter 快速入门 简介 DeepSeek4j 是一个专为 Spring Boot 设计的 AI 能力集成启动器&#xff0c;可快速接入 DeepSeek 大模型服务。通过简洁的配置和易用的 API&#xff0c;开发者可轻松实现对话交互功能。 环境要求 JDK 8Spring Boot 2.7Maven/Gr…

编程技巧:VUE 实现接口返回数据的流式处理

一、写在前面 ChatGPT 的问答响应界面相信大家都见过&#xff0c;内容是一点一点追加式的显示。不是等好了一起发给你&#xff0c;然后一次性展示出来。这种效果和我们平常开发的展示渲染模式有点区别。可能有的同学会说&#xff0c;前端拿到报文后&#xff0c;我们做成这样的…

Django 创建表 choices的妙用:get_<field_name>_display()

1.定义choices 我在创建表时&#xff0c;对于性别这个字段&#xff0c;定义了choices 选项&#xff0c;1代表男&#xff0c;2代表女 mysql中表的数据如下&#xff0c;里面存储的是1或2 如果我们在网页上展示的时候&#xff0c;想展示“男”或“女”&#xff0c;而不是数字1或2…

Mac安装JD-GUI

Mac安装反编译工具步骤如下&#xff1a; 打开官网https://java-decompiler.github.io/ 选择下载mac的安装包解压下载好的压缩包&#xff0c;点击JD-GUI安装 有可能会遇到如下错误。请先检查是否安装JDK&#xff0c;通过java -version命令查看是否是1.8版本的jdk如果jdk没问题&…

[免费]Springboot+Vue医疗(医院)挂号管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue医疗(医院)挂号管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue医疗(医院)挂号管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 在如今社会上&#xff0c;关于信息上…

链表(典型算法思想)—— OJ例题算法解析思路

目录 一、2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 1. 初始化 2. 遍历链表并相加 3. 返回结果 举例说明 二、24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 代码思路 举例说明 初始状…

twisted实现MMORPG 游戏数据库操作封装设计与实现

在设计 MMORPG&#xff08;大规模多人在线角色扮演游戏&#xff09;时&#xff0c;数据库系统是游戏架构中至关重要的一部分。数据库不仅承担了游戏中各种数据&#xff08;如玩家数据、物品数据、游戏世界状态等&#xff09;的存储和管理任务&#xff0c;还必须高效地支持并发访…

lvsDR模式实现

LVS DR模式与NAT模式的优缺点&#xff1a; NAT&#xff1a;优点&#xff1a;配置简单&#xff0c;所需网络环境简单&#xff0c;访问流量的出入都经过LVS服务器&#xff0c;控制流量简单&#xff0c; 缺点&#xff1a;由于访问流量的出入都会经过LVS服务器&#xff0c;所以LVS…

闭源大语言模型的怎么增强:提示工程 检索增强生成 智能体

闭源大语言模型的怎么增强 提示工程 检索增强生成 智能体 核心原理 提示工程:通过设计和优化提示词,引导大语言模型进行上下文学习和分解式思考,激发模型自身的思维和推理能力,使模型更好地理解和生成文本,增强其泛用性和解决问题的能力。检索增强生成:结合检索的准确…

【快速幂算法】快速幂算法讲解及C语言实现(递归实现和非递归实现,附代码)

快速幂算法 快速幂算法可用分治法实现 不难看出&#xff0c;对任意实数a和非负整数n&#xff0c;有&#xff1a; a n { 1 , n 0 , a ≠ 0 0 , a 0 ( a n 2 ) 2 , n > 0 , n 为偶数 ( a n 2 ) 2 ∗ a , n > 0 , n 为奇数 a^n \begin{cases} 1, & n 0, a\neq 0…

大数据SQL调优专题——Hive执行原理

引入 Apache Hive 是基于Hadoop的数据仓库工具&#xff0c;它可以使用SQL来读取、写入和管理存在分布式文件系统中的海量数据。在Hive中&#xff0c;HQL默认转换成MapReduce程序运行到Yarn集群中&#xff0c;大大降低了非Java开发者数据分析的门槛&#xff0c;并且Hive提供命令…

30天开发操作系统 第 20 天 -- API

前言 大家早上好&#xff0c;今天我们继续努力哦。 昨天我们已经实现了应用程序的运行, 今天我们来实现由应用程序对操作系统功能的调用(即API, 也叫系统调用)。 为什么这样的功能称为“系统调用”(system call)呢&#xff1f;因为它是由应用程序来调用(操作)系统中的功能来完…

UE5.2后 Bake Out Materials失效

这个问题出现在5.3&#xff0c;5.4&#xff0c;5.5没有测试 烘焙贴图后会找不到贴图位置&#xff0c; 这个是5.2的正常状态 默认是生成在模型当前目录里&#xff0c;包括新的材质 但是这个bug会让材质和贴图都消失&#xff0c;无法定位 暂时没有办法解决&#xff0c;等官方 …