精华内容
下载资源
问答
  • 在做这个demo的过程中,制作小地图着实刁难了我一把,百度了很多文章,花了好长的时间,需要的知识点实在太多了,尤其是shader语言,好在最后成功把它啃下来了,先声明一下,本篇文章将会是这个系列中最难的,不过...

    转载自http://blog.csdn.net/lzhq1982/article/details/12783493

    在做这个demo的过程中,制作小地图着实刁难了我一把,百度了很多文章,花了好长的时间,需要的知识点实在太多了,尤其是shader语言,好在最后成功把它啃下来了,先声明一下,本篇文章将会是这个系列中最难的,不过如果成功做出来成就感也是大大的,其实按照我的步骤一步一步来也没那么复杂啦,接下来我把这个过程分享给大家,下面上一张截图:


    看右上角,那个就是小地图,也许有点不太好看,没办法,谁让我不是美术啊,需要的图素都是自己用Photoshop做的,记得有人说过,不会美术的程序不是好策划,所以自己来吧。

    先说一下原理,我们做小地图用的技术就是遮罩,玩过flash的对这个词应该不新鲜,何为遮罩呢,通俗一下讲,你有两张纸,一张纸上画了漂亮的山川河流,另一张纸就是张白纸,中间挖个圆洞,然后你把白纸盖在那张画满山川河流的纸上,只有中间圆洞的地方你能看到,其他地方都被盖住了,保持白纸不动,移动后面的画纸,你会看到连续的不同的地貌,我们的小地图原理就是这样的,时刻保持角色在中间,动的只是后面的背景罢了。只是这里需要多处理一下,就是除了那个圆洞,其他的部分我们要透明掉。

    相信这么解释应该没有不懂的了吧。如果还不清楚那要么是我的表达能力有问题,要么你的智商。。。咳咳,言归正传,按照上面的理论,我们都该准备些什么呢。最起码的得有一张完整的地图吧,得有个圆形的遮罩吧,再漂亮点圆形遮罩需要个圆框,地图上得有个小标志显示玩家的位置和方向。

    地图好搞,在unity中调到场景的顶视图,然后截个图就好了,缩放一下比例,我的地图是512*512的,取名map,如下图:


    丑是丑了点,谁让我的地形简单呢,再一次声明,我是个程序。

    遮罩就需要你自己画个了,要保证它和背景图一样大,我这里也是512*512的,中间是个白色的圆,其他地方alpha是透明的。如图:


    我这里并没有截全部512的图,不要以为只这么小啊,除了白圆,其他地方都是透明的,其实什么颜色的无所谓,只要是圆的就行。

    然后做个圆框,也是512的,圆框和白圆大小一致,中间和其他地方都是透明的。


    最后是角色的那个小标记

    资源就这些,准备好就可以开干了。


    关于NGUI我这里就不解释了,看过我前面文章的童鞋应该知道怎么用了,我们要把小地图放在右上角的锚点上,不是简单的放几个sprite的事情,那我们需要做些什么呢。来,我们倒着说,先看结果,我希望我的右上角先有个Panel,然后Panel下有个Textrue,而我的小地图就是绘制在这个Texture上;那小地图是以什么方式绘制到这个Texture上的呢,当然是靠material(材质),而且是一个能实现遮罩,透明,动态渲染的材质。那只能靠材质中的shader了;先不说遮罩和透明,先说动态渲染,我们以前用到的材质都是静态的,而现在我们要用到的是地图可以移动的动态材质,所以要用动态渲染,要说动态渲染,那最先想到的就是Render Texture,要说什么是Render Texture,看这里好了:渲染纹理。由果推因,我们就知道都该做些什么了,一个一个攻克吧,现在我们由因及果。


    1、绘制渲染纹理(Render Texture)

    a、先在MainCamera下创建一个UI,选择NGUI->Open the UI Wizard,保持设置,点Create Your UI,然后Anchor下的Panel改名为MiniMapRenderPanel。

    b、创建一个Atlas,不知道什么是Atlas的可以看我前面的文章,选NGUI->Open the Atlas Maker,新弹出的界面上修改你的atlas名称,点击那个完整的地图,就是我上面的那个map,然后点Create。


    c、在MiniMapRenderPanel下建一个sprite,NGUI->Open the Widget Wizard,Atlas选刚建的那个Atlas,Template选sprite,Sprite选map,其他默认。最后建完了是这个结构。


    d、在资源里新建个Render Texture,Assets->Create->Render Texture,起名MiniMapRenderTexture。

    e、设置camera,那个NGUI的camera设置如下:


    Clear Flags设为Solid Color,Background设为黑色,这样当你走到地图的边缘时,没有地图的地方会绘制成黑色。Projection设为平行投影Orthographic,不了解平行投影和透视投影的话需要补一下3d基础了。Target Texture那里把之前做的那个Render Texture拖上去。这样摄像机投影的地方就会绘制在这个Render Texture上,也就是地图会绘制在它上面了,然后我们就可以做material了。

    f、有一点差点忘了,Anchor那里的Side一定要选择TopLeft,地图的原点是从左下角开始的。


    2、制作材质(material)

    这是本篇的难点,要用到shader语言,如果没有3d基础的可能理解起来有点费劲,不懂也没关系,按着操作也能做出来。

    a、创建一个Shader,Assets->Create->Shader。

    b、打开shader,把下面的代码覆盖过去。

    Shader "Transparent/Mask"
     {
    	Properties
    	 {
    		_MainTex ("Base (RGB)", 2D) = "white" {}
    		_Mask("Culling Mask",2D)="white"{}
    		_Cutoff("Alpha cutoff",Range(0,1))=0.1
    	  }
    	SubShader
    	 {
    		Tags { "Queue"="Transparent" }
    		Lighting Off
    		ZWrite Off
    		Blend Off
    		AlphaTest GEqual[_Cutoff]
    		Pass
    		{
    		SetTexture[_Mask]{combine texture}
    		SetTexture[_MainTex]{combine texture,previous}
    		}
    		
          }
    }
    

    你百度遮罩shader的话会有很多,但基本没有解释的,我这里解释一下,第一行是设置你的shader的路径和名称,比如上面的shader就建在了Transparent下,起名Mask,大括号里面有两个部分,第一个部分是属性Properties,第二部分是SubShader。

    Properties里是设置渲染的属性,比如这里设置了两张图片和一个滑动条,第一张图片用来加载背景图片,就是我们之前做的那个Render Texture,用来显示地图,第二张图片就是遮罩图片,用我们之前的那个白圆,滑动条范围从0到1,初始值0.1,再看一下语法。

    _MainTex ("Base (RGB)", 2D) = "white" {} 

    _MainTex是属性名,会在SubShader中用到,Base (RGB)是在界面上显示的名称,你会在属性面板上看到,2D是图片维数,white是默认值。
    SubShader是处理渲染的主体,Tags是标签,Queue标签决定被渲染的次序,而Transparent是四个预定义的渲染队列之一,任何有关alpha混合的对象都应该在这里处理,看这里可以了解的更多: SubShader Tags ,关闭光照,关闭z缓冲器的写操作,关闭混合,Alpha测试是当Alpha大于等于你之前设定的_Cutoff时有效,也就是说这里当alpha大于等于0.1的图素会被渲染出来,其他的就透明了。Pass通道里处理混合,先设置第一张图片:SetTexture [_Mask] {combine texture},这里是遮罩图片,然后第二张图片和前一张混合:SetTexture [_MainTex] {combine texture, previous},而我们之前关闭了混合,所以第二张图片只是纯粹的显示,但大括号里第二个参数表示alpha,这里previous表示我们用之前那张图片的alpha,而第一张图片的alpha除了白圆部分,其余部分都是0,所以这张图片除了与白圆 重合的地方,其他地方alpha也是0,这样就透明了,只剩下了圆的地方,想了解Pass看这里: 着色器语法:Pass ,想了解SetTexture看这里: 着色器语法:Texturing

    写了这么多,纯粹手打,觉得好的麻烦支持一下,哈哈。Shader有一定难度,但据说会shader的程序员薪水都在2万以上啊,望眼欲穿啊,所以大家努力学吧。

    如果上面的没看懂,你又不想学,那就跳过吧,反正把代码粘过去就可以了。

    c、创建一个material,Assets->Create->Material,然后Shader那里找到你建的那个shader,在Transparent下面。

    d、这时界面上会出现Base(RGB)和Culling Mask,Base(RGB)里把你之前那个Render Texture拖上去,Culling Mask把那个白圆的图片拖上去,如下图:


    这样你的材质就做完了。坚持到这步的为自己鼓个掌吧,你离成功不远了。

    3、在界面的右上角用NGUI建地图

    终于到了最后一步了,剩下的工作就简单多了,回到你的界面布局那里,有关NGUI界面布局不了解的看我前面的文章,在右上角的Anchor下建个Panel,起名MiniMapPanel,然后下面加两个sprite和一个Texture,一个sprite是圆框,一个sprite是小箭头,表示地图上的玩家,Texture用来接收之前的材质显示地图,如下图:


    Texture那里大小调成512*512的,Material那里把之前做的材质拖上去就ok了,如果显示顺序有问题别忘了调Depth或Z值。

    现在你应该可以看到东西了,但小箭头位置不对,当然,还没上代码呢。

    创建一个MiniMap的脚本,我把全部代码贴上来。

    public class MiniMap : MonoBehaviour {  
      
        // Use this for initialization  
        public GameObject point;  
        public GameObject map;  
        private GameObject hero;  
        private float miniMapScaleRatio;  
          
        void Start () {  
            map.transform.localScale = new Vector3(Screen.height, Screen.height, 1);  
            hero = GameObject.Find("/Blade_Girl_Prefab");  
            GameObject terrain = GameObject.Find("Terrain");  
            Terrain script = terrain.GetComponent<Terrain>();  
            miniMapScaleRatio = (float)map.transform.localScale.x / script.terrainData.size.x;  
        }  
          
        // Update is called once per frame  
        void Update () {  
              
            if (hero && point && map) {  
                point.transform.rotation = Quaternion.Euler(0, 0, -hero.transform.rotation.eulerAngles.y);  
                map.transform.localPosition = new Vector3()  
                {  
                    x = -hero.transform.position.x * miniMapScaleRatio,  
                    y = -hero.transform.position.z * miniMapScaleRatio,  
                    z = 0,  
                };  
            }  
        }  
    }  
    代码不多吧,point是玩家标志小箭头,map是地图面板,就是1里面那个MiniMapRenderPanel,public属性的,自己拖上去吧。hero是我们的主角,miniMapScaleRatio是地图和真实地形尺寸比例,start里的第一句是在干吗呢,虽然我们的地图是512*512的,但经过实测,发现这个尺寸会随着屏幕的高度而有误差,需要设置成屏幕的高度这种尺寸,好吧,我也需要有人帮我解释下,Update里时刻获得主角的转向,主角在世界中是绕y轴旋转的,小标志是绕z轴旋转的,并且方向相反,这里要注意一下。然后按照角色在地形上的位置乘以地图与地形的比例获得小标志在地图上的位置,噢啦,大功告成,打完收工。


    展开全文
  • 小地图中有很多标志物,大量的对象一直显示在屏幕中,所以想了一种优化方式,优化点这部分的性能 优点: 1. 只需要一个DrawCall,全部渲染到一张图片,就可以渲染出小地图 2. 不需要生成大量的标志物实例 3. ...

    小地图中有很多标志物,大量的对象一直显示在屏幕中,所以想了一种优化方式,优化点这部分的性能

    优点:
    1. 只需要一个DrawCall,全部渲染到一张图片,就可以渲染出小地图
    2. 不需要生成大量的标志物实例
    3. 规则图形直接使用代码计算生成来代替采样(一般小地图上的很多标志物都是采样图片)
    缺点:
    小地图的每个像素经过了大量的运算。

    总结:
    我没有测试这样是否优化了性能,所以只能算是小地图的另一种实现方式,不过由于GPG的高并发计算能力,这样也许会使性能得到优化。如果有人测试了性能,希望告知

    效果如下:

    这里写图片描述

    代码如下:

    Shader "Unlit/MinMap"
    {
        Properties
        {
            _MainTex("Texture", 2D) = "white" {}
            _PointTex("Point Texture", 2D) = "white" {}
            _CircleColor("Point Col",Color) = (1,1,1,1)
            _CircleColor2("Point Col2",Color) = (1,1,1,1)
            _Angle("Angle",float)=0
            _Parameters("Parameters",Vector) = (0,0,0,0)
        }
            SubShader
        {
            Tags { "RenderType" = "Opaque" }
            LOD 100
    
            Pass
            {
                Blend SrcAlpha  OneMinusSrcAlpha
    
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
    
                #include "UnityCG.cginc"
                //渲染圆点
                fixed4  circle(float2 pos, float2 center, float radius, fixed3 color, float antialias) {
                    float d = length(pos - center) - radius;
                    float t = smoothstep(0, antialias, d);
                    return fixed4(color, 1.0 - t);
                }
                //混合操作
                fixed4  mix(fixed4 col1, fixed4 col2,  fixed alpha) {
    
                    return fixed4(col1.rgb*(1 - alpha) + col2.rgb*alpha ,max(col1.a,col2.a));
                }
                struct appdata
                {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };
    
                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    float2 uv2 : TEXCOORD1;
                    float4 vertex : SV_POSITION;
                };
    
                sampler2D _MainTex;
                sampler2D _PointTex;
                float4 _MainTex_ST;
                float4 _PointTex_ST;
                //一共渲染20个点,分为两部分
                float4 _Pos[20];
                float4 _RolePos;
                //渲染的点的颜色,这个也可以使用C#代码传入,在没一点的信息里记录,目前只记录了位置
                fixed4 _CircleColor;
                fixed4 _CircleColor2;
                float4 _Parameters;
                float _Angle;
                v2f vert(appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    //构造旋转矩阵
                    float cosA = cos(_Angle);
                    float sinA = sin(_Angle);
                    float3x3 _Matrix = {
                        cosA,-sinA,0,
                        sinA,cosA,0,
                        0,0,1,
                    };
    
                    o.uv2 = TRANSFORM_TEX(v.uv, _PointTex);
                    o.uv2 = mul(_Matrix, o.uv2-float2(0.5,0.5)) + float2(0.5, 0.5);
                    return o;
                }
    
                fixed4 frag(v2f i) : SV_Target
                {
                    // sample the texture
                    fixed4 col = tex2D(_MainTex, i.uv);
                    fixed4 col2 = tex2D(_PointTex, i.uv2);
                    //代码看起来可能比较low,为了不使用循环,我也没办法了,希望有改进的意见
                    fixed4 layer0 = circle(i.uv, _Pos[0], _Pos[0].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer1 = circle(i.uv, _Pos[1], _Pos[1].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer2 = circle(i.uv, _Pos[2], _Pos[2].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer3 = circle(i.uv, _Pos[3], _Pos[3].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer4 = circle(i.uv, _Pos[4], _Pos[4].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer5 = circle(i.uv, _Pos[5], _Pos[5].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer6 = circle(i.uv, _Pos[6], _Pos[6].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer7 = circle(i.uv, _Pos[7], _Pos[7].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer8 = circle(i.uv, _Pos[8], _Pos[8].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer9 = circle(i.uv, _Pos[9], _Pos[9].z, _CircleColor.rgb, _Parameters.w);
                    fixed4 layer10= circle(i.uv, _Pos[10], _Pos[10].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer11= circle(i.uv, _Pos[11], _Pos[11].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer12= circle(i.uv, _Pos[12], _Pos[12].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer13= circle(i.uv, _Pos[13], _Pos[13].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer14= circle(i.uv, _Pos[14], _Pos[14].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer15= circle(i.uv, _Pos[15], _Pos[15].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer16= circle(i.uv, _Pos[16], _Pos[16].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer17= circle(i.uv, _Pos[17], _Pos[17].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer18= circle(i.uv, _Pos[18], _Pos[18].z, _CircleColor2.rgb, _Parameters.w);
                    fixed4 layer19= circle(i.uv, _Pos[19], _Pos[19].z, _CircleColor2.rgb, _Parameters.w);
    
                    fixed4 fragColor = mix(col, layer0, layer0.a);
                    fragColor = mix(fragColor, layer1, layer1.a);
                    fragColor = mix(fragColor, layer2, layer2.a);
                    fragColor = mix(fragColor, layer3, layer3.a);
                    fragColor = mix(fragColor, layer4, layer4.a);
                    fragColor = mix(fragColor, layer5, layer5.a);
                    fragColor = mix(fragColor, layer6, layer6.a);
                    fragColor = mix(fragColor, layer7, layer7.a);
                    fragColor = mix(fragColor, layer8, layer8.a);
                    fragColor = mix(fragColor, layer9, layer9.a);
                    fragColor = mix(fragColor, layer10, layer10.a);
                    fragColor = mix(fragColor, layer11, layer11.a);
                    fragColor = mix(fragColor, layer12, layer12.a);
                    fragColor = mix(fragColor, layer13, layer13.a);
                    fragColor = mix(fragColor, layer14, layer14.a);
                    fragColor = mix(fragColor, layer15, layer15.a);
                    fragColor = mix(fragColor, layer16, layer16.a);
                    fragColor = mix(fragColor, layer17, layer17.a);
                    fragColor = mix(fragColor, layer18, layer18.a);
                    fragColor = mix(fragColor, col2, col2.a);//显示在最上面
                    return fragColor;
                }
                ENDCG
            }
        }
    }
    

    shader代码一共就这些,实现了npc的移动,玩家的移动和旋转,npc通过计算得到(使用了圆形,当然也可以使用其他的形状,修改圆形的代码即可),玩家通过采样图片(一般游戏这样区别玩家和npc)
    C#代码
    比较简单,传递玩家旋转信息和npc的位置信息,玩家的位置信息不需要传递,只需要让玩家保持在小地图中心,使用代码调整image的缩放和偏移即可

        public void SetM(Vector4[] _pos, float angle)
        {
            pos = _pos;
            m.SetVectorArray("_Pos", pos);
            m.SetFloat("_Angle", angle);
        }
    展开全文
  • 看过网上不少关于小地图的制作 http://www.360doc.com/content/14/0128/10/12282510_348486803.shtml

    看过网上不少关于小地图的制作,说句实话,很多做法都不太敢恭维,今发现一种不错的办法,分享给同道中人:

    http://www.360doc.com/content/14/0128/10/12282510_348486803.shtml

    展开全文
  • 2.用了Shader Forge,或者被改了很多版本的Shader很难改 3.办法也只是很旧的方法,快速筛选 4.用官方的shader不会有这个问题,这也是我们解决问题入门点 入门 出现问题了,换个官方的Additive试试...

    小地图一般很少特效,都是3D人物像的特效比较多,时装等,就是3D场景中显示正常,一渲染到RawImage就不正常了

    之前碰到3D - UI特效显示黑色这个问题,用了其他很多手法解决、

    一直时间很赶,今天就来解决一下

    其实这个问题主要出在UGUI上

    1.现在看来,其实NGUI也有这个问题,

    2.用了Shader Forge,或者被改了很多版本的Shader很难改

    3.办法也只是很旧的方法,快速筛选

    4.用官方的shader不会有这个问题,这也是我们解决问题入门点

    入门,发现问题

    出现问题了,换个官方的Additive试试(一般粒子等特效都是用这个Additive Shader)

    不用运行时也能看出效果

    官方正常

    被透明,某程序员改版

    从头开始,导出模型和特效

    这个例子是怎么创造出来的呢,首先得有模型和粒子,我用的是快速导出(Unity2018,不确定5.x能不能用)

    using UnityEditor;
    
    class AssetsMenu
    {
        [MenuItem("UnityAuto/Export/导出Unity资源包", true)]
        static bool ExportPackageValidation()
        {
            for (var i = 0; i < Selection.objects.Length; i++)
            {
                if (AssetDatabase.GetAssetPath(Selection.objects[i]) != "")
                    return true;
            }
    
            return false;
        }
    
        [MenuItem("UnityAuto/Export/导出Unity资源包")]
        static void ExportPackage()
        {
            var path = EditorUtility.SaveFilePanel("Save unitypackage", "", "", "unitypackage");
            if (path == "")
                return;
    
            var assetPathNames = new string[Selection.objects.Length];
            for (var i = 0; i < assetPathNames.Length; i++)
            {
                assetPathNames[i] = AssetDatabase.GetAssetPath(Selection.objects[i]);
            }
    
            assetPathNames = AssetDatabase.GetDependencies(assetPathNames);
    
            AssetDatabase.ExportPackage(assetPathNames, path, ExportPackageOptions.Interactive | ExportPackageOptions.Recurse | ExportPackageOptions.IncludeDependencies);
        }
    }
    

    *用这个脚本唯一值得注意的,还是最好新开一个空项目,做中间过度,一来就算从unity5.x的资源导到2019也是可以先检验,而来中间把Script脚本去掉,脚本不是我们需要关注的,这里我们更多需要的是资源,资源,更多资源,这个脚本已经挺不错了

    创建Camera 和RawImage

    用上面的方法导出一整个模型或场景后,就可以开始创建3D - UI

    同行做的方法就挺好的了(ui和小地图同理,我用了5分钟创建,不知道为什么让之前公司同事参考看了半天,然后给我回复是做不到,我是不是该随身带个锤子??),参考:

    https://blog.csdn.net/lijianfex/article/details/78241485

    关联好RawImage后,就是正常创建UI - Canvas - RawImage,如上图一

    大部分情况加上UI背景后,特效就会显示不正常

    解决办法

    网上很多方法都说是加上Color Mask

    我试过,不加或者加都可以,但用法必须是 Color Mask RGBA,少了A,必然显示不正常、

    	Blend SrcAlpha One
    	AlphaTest Greater .01
    	//ColorMask RGBA
    	Cull Off Lighting Off ZWrite Off  Fog { Color (0,0,0,0) }

    解决办法之二

    主要原因还是特效用了很多图层Channel叠加,很多黑底当透明,其中一层渲染出来是黑色(效率问题也很值得关注)

    有一个文章CNBLOG,解释很详细,还是比这里强一丢丢,他是必须加Color Mask(我以前一样)

    可以参考一哈:Unity shader之ColorMask

    https://www.cnblogs.com/jietian331/p/10675265.html

     

    展开全文
  • unity3d学习笔记(十一)--NGUI结合Shader制作小地图

    万次阅读 热门讨论 2013-10-17 19:56:11
    在做这个demo的过程中,制作小地图着实刁难了我一把,花了好几天的时间,需要的知识点实在太多了,尤其是shader语言,好在最后成功把它啃下来了,接下来我把这个过程分享给大家,下面上一张截图: 看右上角,那个...
  • 在写之前查了好多小地图的写法,这里有三种 在地图下面铺一张图片,每个需要显示的角色身下再来一张icon的image,正交相机从上面照着角色。好处是不用控制相机的位置和icon的位置,npc monster脚下自带,主角移动到...
  • 【Unity】小地图遮罩Shader

    千次阅读 2015-09-24 10:51:47
    Shader "Transparent/Mask" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _Mask ("Culling Mask", 2D) = "white" {} _Cutoff ("Alpha cutoff", Range (0,1)) = 0 } SubS
  • 文章目录一、前言二、思路三、GitHub工程四、具体步骤1、创建一个顶视角摄像机2、创建Render Texture3、使用Raw Image显示四、运行效果五、优化1、Mask蒙版边缘锯齿问题2、解决方案六、加个主角和摄像机跟随...小地图
  • unity/shader

    2016-06-26 18:24:44
    周末把自己关于shader的知识做了一个总结 梳理  关于CG语言/shader 基础我就不再多做赘述  有需要的同学可以去看浅墨的UNITY学习网 传送门 http://www.unity.5helpyou.com/2367.html 一 only--vertex/-...
  • unity 快速创建小地图

    千次阅读 2016-03-10 21:23:44
    先写一个纹理遮罩shader Shader "Unlit/TexMask" { Properties { _MainTex ("Texture", 2D) = "white" {} _MaskTex("Mask Texture",2D) = "white"{} } SubSh
  • [Unity3d]自制圆形小地图

    万次阅读 2014-01-21 00:34:45
    继续今天的学习心得,unity中小地图的制作,实现了小地图中红色小箭头代表场景中的主角,然后人物方向的转变,小地图中箭头也随之改变方向。 效果图
  • 1.给人物添加摄像机位置放好,俯视角色...2.在ui root 右上方下创建小地图,创建ui Texture 并赋值 Texture(Text render A) 和 Material,这里的Material需要改Shader类型为cus/Mask,在选择base图为Text render A,...
  • Unity 等比映射小地图

    千次阅读 2017-08-29 12:16:56
    等比映射小地图 其实等比映射小地图非常简单,而且特别节省性能,使用第二摄像机+Rendertexture方式实现小地图,操作起来是简单,但是相对来说它的性能消耗也很大,对于开发人员来说,一定要做到控制性能的优化,才能让...
  • NGUI小地图

    千次阅读 2014-03-18 14:08:56
    这种模式下制作小地图速度相当快,只需要导入NGUI插件,整场景渲染成一张贴图,将贴图制作成NGUI的atlas(以上纯属NGUI操作,不懂的请自己搜索一下吧~我懒啊)。接下来就是重点了~   首先
  • Unity Shader 基础教程

    万次阅读 多人点赞 2018-05-27 19:14:23
    在Github上看到一篇关于Unity-Shader的教程,感觉还不错,作者写的很好,很适合Unity-Shader的基础入门,我在这里翻译一下,分享给大家,英文水平很烂,大致能明白Unity-Shader是什么,渲染管线的工作流程,以及...
  • Unity3d中使用摄像机制作实时显示小地图,以之前的tank为例。开始制作之前场景中物体如图。 开始制作,步骤1:新建一个camera及一个plane。对齐位置,将camera改名为camera_UI。旋转plane,使之在camera_UI中显示...
  • 用UGUI实现小地图MiniMap

    千次阅读 2015-10-22 17:34:46
    之前写的几篇博客当中图片不知为何消失 看到后就赶紧重新上传图片 写的不好还没有图片 很是抱歉 今天分享一个用UGUI实现游戏场景的小地图 先看一下效果吧 移动cube的话左上角的小地图中的小绿点也会随之而动 1.先...
  • Unity小地图制作

    2019-05-09 10:20:58
    如何制作小地图 游戏中小地图必不可少,玩家需要知道自己的位置,以及大概的地形,以至于不会迷路,小地图中也会附加其他功能,比如地图缩放,时间,日历,活动等等等。 原理 小地图原理:将一个相机渲染的图像放...
  • Unity3d中使用摄像机制作实时显示小地图,以之前的tank为例。开始制作之前场景中物体如图。 开始制作,步骤1:新建一个camera及一个plane。对齐位置,将camera改名为camera_UI。旋转plane,使之在camera_UI中...
  • unity中使用softmask消除mask锯齿,ugui应用, 边缘平滑处理 多用于小地图圆形遮罩等地方

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,544
精华内容 1,017
关键字:

shader小地图