【Unity3D日常开发】Unity3D中实现箭头指向目标点的效果

您所在的位置:网站首页 怎么制作箭头 【Unity3D日常开发】Unity3D中实现箭头指向目标点的效果

【Unity3D日常开发】Unity3D中实现箭头指向目标点的效果

2024-07-02 05:14| 来源: 网络整理| 查看: 265

推荐阅读

CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

最近开发的时候遇到了箭头指向的需求,本来想用我这篇文章中的代码来着: 【Unity3D日常开发】Unity中实现箭头指向效果实现

但是想到这个代码是在Update里面运行,对效率影响比较大,正好看到这个同学给我留言:

在这里插入图片描述 我看了一下他这个是通过Shader和MeshRenderer进行实现的,效率应该会更好。但是文章的步骤就我来说有点简单了,可能不知道怎么用,所以就将他的内容再细分一下。

效果图: 在这里插入图片描述

原文链接:http://www.devacg.com/?post=1415 作者:追风剑情 首发于:个人博客http://www.devacg.com/

二、正文 2-1、制作Shader

(1)首先,将我们的图片导入: 在这里插入图片描述 右键另存为,保存到项目中。

(2)新建Shader,在Project视图中选择Create→Shader→Standard Surface Shader 在这里插入图片描述 将代码复制粘贴进去:

Shader "Custom/NavPathArrow" { Properties { _MainTex("Texture", 2D) = "white" {} _ScrollYSpeed("Y Scroll Speed", Range(-20, 20)) = 2 } SubShader { Tags { "Queue" = "Transparent" "RenderType" = "Transparent" } LOD 100 //双面渲染 Cull Off //Alpha混合 Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; fixed _ScrollYSpeed; v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag(v2f i) : SV_Target { fixed2 uv = i.uv; uv.y += _ScrollYSpeed * _Time; fixed4 col = tex2D(_MainTex, uv); return col; } ENDCG } } } 2-2、制作材质球

新建材质球,在Project视图中选择Create→Material,命名为NavPathArrow: 在这里插入图片描述 设置材质球的属性,将Shader设置为Custom/NavPathArrow,将贴图拖进去: 在这里插入图片描述

2-3、制作预制体

(1)新建一个Quad对象,在Hierarchy视图,右击选择Create→Quad:

在这里插入图片描述 将它的材质球换成刚才我们制作的材质球: 在这里插入图片描述 拖到Project视图,做成预制体: 在这里插入图片描述

2-4、实现代码

新建脚本NavPathArrow.cs,双击打开脚本,编写代码:

using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 导航箭头 /// public class NavPathArrow : MonoBehaviour { public MeshRenderer meshRenderer;//箭头3D对象Quad public List points = new List();//路径点 private List lines = new List();//显示的路径 public float xscale = 1f;//缩放比例 public float yscale = 1f; void Start() { //箭头宽度缩放值 xscale = meshRenderer.transform.localScale.x; //箭头长度缩放值 yscale = meshRenderer.transform.localScale.y; } //画路径 public void DrawPath() { if (points == null || points.Count


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3