[Unity实战]虚线的绘制

说起在unity中画虚线,本人想到了两种方法:

1.无数条小直线组成一条虚线。

2.写一个shader。

前者比较简单,所以这次的重点就放在结合shader实现画虚线了。

首先,需要准备一张背景透明,仅有一条虚线的png图片,如下所示(千万不要以为背景是白色的!)。

然后在场景中建一个Plane,把下面的shader给它。

Shader "Custom/NewShader" {
	Properties
	{
		_MainTex ("Base (RGB)", 2D) = "white" {}
		_Cutoff("Alpha Cutoff", Range(0, 1)) = 0.1
		_Color("Color",Color) = (0,0,0,0)
	}
	SubShader
    {
        Pass
        {
			Material
            {
                Diffuse [_Color]
                Ambient[_Color]
            }
			Lighting On
            AlphaTest GEqual[_Cutoff]

			SetTexture[_MainTex] {}
			SetTexture[_MainTex] {combine texture + primary DOUBLE, previous}
        }
    }
	FallBack "Diffuse"
}

讲解一下上面的shader:

1.将图片中透明值小于0.1的地方不绘制。

2.黑色加任何颜色等于任何颜色,这里的DOUBLE能增强颜色深度

效果图:

长度的控制:修改scale的x值

角度的控制:修改rotation的z值

粗细的控制:修改scale的z值

颜色的控制:在面板中修改shader的Color属性

值得一提的是,unity自带的shader也有透明度剔除的功能。

但是好像没有能修改虚线颜色的,所以就需要我们自己动手去写了。shader的学习还是需要多多实践,亲自动手。

时间: 2024-10-17 12:34:25

[Unity实战]虚线的绘制的相关文章

Unity&Shader基础篇-绘制网格+圆盘

一.前言 尊重原创,转载请注明出处凯尔八阿哥专栏 上一章点击打开链接中已经画出了一个棋盘网格,首先来完善一下这个画网格的Shader,添加属性,属性包括网格的线的宽度,网格的颜色等.代码如下: Shader "Unlit/Chapter2-2" { Properties { _backgroundColor("面板背景色",Color) = (1.0,1.0,1.0,1.0) _axesColor("坐标轴的颜色",Color) = (0.0,0

Unity 扩展属性自定义绘制

这么晚了准备睡觉的时候,去学习了一会. 发现一个标题好奇的点进去. 居然是自定义绘制属性.  在前几天这个问题把我难住了,没想到几分钟就能解决的问题. 我花了半天时间使用反射去解决...  如果我们想要让属性自定义绘制窗体,首先会想到扩展InspectorEditor, 这章讲解.原来属性可以独立绘制,亮瞎我的双眼! 如图: 步骤: 1. 定义绘制特性描述类(以数据提供给 –> 绘制类 –> 绘制) 2. 定义属性自定义绘制类      3. 给一个字段添加你的特性 1. 绘制特性描述类 us

在Unity中使用uGUI绘制自定义图形(饼状图 雷达图)

饼状图或者是雷达图是根据属性自动生成的自定义图形.这里展示了如何使用uGUI完成这一功能. 先附上我制作雷达图的控件的代码  UIPropWidget.cs using UnityEngine; using System.Collections.Generic; using UnityEngine.UI; /* * * 2 6 * * 3 7 * * 0 1 5 4 * * * 2 6位为属性0 3为属性1 0为属性2 4为属性3 7为属性4 */ public class UIPropWidg

[Unity实战]自定义mesh

参考链接:http://blog.csdn.net/zuoyamin/article/details/9287507 对于自定义mesh,有三点很重要: 1.顶点个数=三角形数+2:三角形顶点数=3*三角形数 2.顶点创建的顺序最好是顺时针或者逆时针创建的,这样可以大大地减少算法的复杂度 3.顶点绘制的顺序必须是顺时针或者逆时针绘制的,这样才能正确地绘制以顶点为边界点的图形,顶点绘制的顺序参考mesh.triangles using UnityEngine; using System.Colle

unity 属性面板的绘制

最终效果: using System; using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; [CustomEditor(typeof(BaseAttribute))] //需要重写的类 public class MyTouchJoystick : Editor { BaseAttribute baseAttribute; bool isShowBackS

【Android实战】SurfaceView绘制各种效果Demo

1.狂奔的炸弹 public class MySurface extends SurfaceView implements Callback, Runnable { SurfaceHolder holder; boolean goOn = true; int w; int h; Bitmap bitmap; int x; int y; int bx; int by; boolean down = true; boolean right = true; int p = 30; public MyS

[Unity实战]详解换装系统(四)

关于换装系统基本上就是前三篇文章所说的那样了,这里说一下一些琐碎的.. 1.在网游中,推荐将各个部位打包成assetbundle,比如一个男性的角色,将他的基础骨骼打进一个包,再将身体各个部分的模型分别打包.如果一个模型由头.脸.身体.手臂.脚五个部分组成,那么打包后将会有六个资源包,分别是基础骨骼.头.脸.身体.手臂.脚. 2.合并mesh要注意的地方: 来源模型与材质数量必须相对应,否则模型的贴图将会变得不正常,也就是说如果裤子的 material 有两个,其他部位的 materail只有一

[Unity实战]详解换装系统(三)

在阅读本文章之前,本人强烈建议你先看看本系列的前两篇文章,对换装系统有一些了解后再继续! 在上一篇文章中,运行之后是这样的: 我们的target上挂上各种类型的mesh,而每一个mesh上都有一个Skinned Mesh Renderer组件,这无疑会增加运算量,根据官方demo的指引,我们应该合并mesh,这样target上就只有一个Skinned Mesh Renderer组件,从而达到优化的目的! 本人对上一篇文章的代码进行了一些修改,主要是添加了6处新的代码,并对不需要的代码进行了注释(

[Unity实战]剧情对话(三)

在这里,我们使用xml来实现保存与读取功能. 首先,是头文件的引用: using System.Xml; 保存到xml文件: void Save() { string filePath = Application.dataPath + @"/my.xml"; XmlDocument xmlDoc = new XmlDocument(); XmlElement root = xmlDoc.CreateElement("root"); for (int i = 0; i