Unity 使用Sprite绘制一条自定义图片的线

news/2024/11/13 12:29:58/

Unity 使用Sprite绘制一条自定义图片的线

  • 前言
  • 项目
    • 场景布置
    • 代码编写
    • 总结
  • 运行效果
  • 感谢

前言

遇到一个需要绘制自定义形状的需求。那只能利用Sprite来绘制一条具有自定义图片的线,通过代码动态设置起点、终点以及线宽,实现灵活的线条效果。
Sprite画线

项目

场景布置

在Unity中创建一个空场景,随后创建一个空物体用于挂载脚本,并设置上Sprite Renderer组件。确保在项目中导入一张用于线条的Sprite图片,并将其分配给Sprite Renderer中的Sprite属性。
再分别设置起点、终点、线宽。
场景布置

代码编写

下面是核心的SpriteLine脚本的代码,该脚本使用ExecuteInEditMode属性,使其在编辑模式下也能生效。

using UnityEngine;[ExecuteInEditMode]
public class SpriteLine : MonoBehaviour
{public SpriteRenderer lineSprite; // 需要在Inspector窗口中分配的Spritepublic Vector3 startPoint;public Vector3 endPoint;public float lineWidth = 0.1f;private SpriteRenderer spriteRenderer;public Transform caster;public Transform target;/// <summary>/// 初始化/// </summary>public void Init(Transform caster, Transform target){this.caster = caster;this.target = target;}void Start(){Init(caster, target);CreateSpriteRenderer();UpdatePositionAndRotation();}void Update(){if (caster != null){startPoint = caster.position;}if (target != null){endPoint = target.position;}// 在运行时更新位置和旋转,以确保线跟随起点和终点的位置变化UpdatePositionAndRotation();}void OnDrawGizmos(){//return;CreateSpriteRenderer();spriteRenderer.sprite = lineSprite.sprite;spriteRenderer.drawMode = SpriteDrawMode.Sliced;Gizmos.color = Color.white;Gizmos.DrawLine(startPoint, endPoint);}void CreateSpriteRenderer(){if (spriteRenderer == null){spriteRenderer = GetComponent<SpriteRenderer>();if (spriteRenderer == null){spriteRenderer = gameObject.AddComponent<SpriteRenderer>();spriteRenderer.hideFlags = HideFlags.HideInInspector | HideFlags.HideInHierarchy;}}}void UpdatePositionAndRotation(){// 设置线的中心位置为起点和终点的中点Vector3 centerPosition = (startPoint + endPoint) / 2f;transform.position = centerPosition;// 设置旋转角度Vector3 direction = endPoint - startPoint;float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward);// 设置Sprite的大小spriteRenderer.size = new Vector2(direction.magnitude, lineWidth);}
}

总结

通过以上步骤,我们完成了Sprite绘制自定义图片线的基本设置。这个方法不仅方便,而且能够在运行时动态更新线的位置和旋转,使其能够跟随起点和终点的变化而变化。

运行效果

在运行时,你将看到自定义Sprite图片被绘制成一条连接起点和终点的线,并且该线的宽度和方向能够根据需要进行动态调整。

通过这种方式,我们可以轻松实现更加个性化和复杂的线条效果,为游戏场景的美观性和交互性提供更多可能性。希望本文对你在Unity中实现自定义图片线条的需求有所帮助。

感谢

ChatGPT


http://www.ppmy.cn/news/1298944.html

相关文章

服务容错-熔断策略之断路器hystrix-go

文章目录 概要一、服务熔断二、断路器模式三、hystrix-go3.1、使用3.2、源码 四、参考 概要 微服务先行者Martin Fowler与James Lewis在文章microservices中指出了微服务的九大特征&#xff0c;其中一个便是容错性设计(Design for failure)。正如文章中提到的&#xff0c;微服…

阿里巴巴开源异构数据源离线/全量/增量同步工具 - DataX

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

持续集成Jmeter+Jenkins+Ant

在开始这篇文章之前&#xff0c;我要先为大家解答2个疑惑&#xff1a; 第一点&#xff0c;我们为什么要在项目中进行接口自动化测试&#xff1f;好处是什么&#xff1f; 相对于UI层面&#xff0c;接口的测试的收益是巨大的&#xff0c;能在最短的时间发现重要的问题。接口在迭…

【博士每天一篇文-算法】Graph Structure of Neural Networks

阅读时间&#xff1a;2023-11-12 1 介绍 年份&#xff1a;2020 作者&#xff1a;尤家轩 斯坦福大学 期刊&#xff1a; International Conference on Machine Learning. 引用量&#xff1a;130 论文探讨了神经网络的图结构与其预测性能之间的关系。作者提出了一种新的基于图的…

export default 和exprot

1.默认导入和默认导出 语法: export default {需要输出的内容} 接收: import 成员变量的名字 from 文件夹的路径 案例&#xff1a; a.mjs文件夹下默认导出 export default{a:10,b:20,show(){console.log(123);} } 在b.mjs文件中用成员变量进行接收 import AA from &q…

Linux下QT生成的(.o)、(.a)、(.so)、(.so.1)、(.so.1.0)、(.so.1.0.0)之间的区别

记录一下遇到的问题&#xff1a;Linux系统下Qt编译第三方动态库会生成多个.so文件&#xff0c;不了解的小伙伴可能很疑惑&#xff1a; &#xff08;1&#xff09;Linux 下 QT 生成的&#xff08;.o&#xff09;、&#xff08;.a&#xff09;和&#xff08;.so&#xff09;三个文…

加工零件的题解

目录 原题描述&#xff1a; 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 样例 #2 样例输入 #2 样例输出 #2 提示 题目大意&#xff1a; 主要思路&#xff1a; 但是我们怎么才能判断出x走到1时L是偶数还是奇数呢&#xff1f; 初始化&#xff1a;…

面试专题一:js的数组

前言 想做最全的js数组方法总结。涵盖面试及日常使用。 这里写目录标题 前言如何判断数组修改数组元素的方法检测数组元素的相关方法一些跟数组相关且传参为回调函数的方法其他方法 总结 如何判断数组 不可以用typeOf方法。该方法只能用来检验最基本的数据类型&#xff0c;&…