zoukankan      html  css  js  c++  java
  • (转)unity使用line renderer画线

    任何一个无规则曲线它都是有若干个线段组成,及时是圆形它也是又若干个线段组成的,也就是说将若干个线段拼接起来就是我们须要的无规则曲线~那么在3D 的世界中我们须要知道 X Y Z 三个点来确定一条3D线段。
     
    首先先使用Unity编辑器的方式来添加一条线~
     Unity -> GameObject -> Create Empty 创建一个空的对象,我命名为line。然后点击 Component -> Miscellaneous -> Line Renderer 给line添加一个线渲染器的属性,Line Renderer是非常中的属性,下面我会详细的说明。
        
     
    Create -> Material 创建一个材质,做来这个线段的贴图,下面我们看看Line Renderer的一些重要参数。
    Cast Shadows: 是否投射阴影。
    Receive Shadows: 是否接收阴影。
    Materials :设置材质,这里可以设置多个材质, line就是上面我们创建的材质,这里我给line这个材质涂上了红颜色。
    Positions:这个属性就比较重要了,它是专门设置线段在3D 世界中的点的坐标,size 设置点的数量 为3 那么将会有3个点,Element 0   Element 1 Element 2    这三个点将确定这条曲线分为两段,第一段是(0,0,1) 到  (0,0,2) ,第二段是 (0,0,2) 到(0,0,4)。
     
     
    Paramerters 
    StartWidth :设置起点的宽度  
    EndWidth:  设置终点的宽度 ,这两项数值默认为1,但是现实起来很宽,所以一般都设置为0.几~ 
    Start Color: 设置起点颜色
    Start Color: 设置终点颜色
    Use World Space 使用世界坐标系
     
    大家看看效果,清楚的可以看到曲线分为两部分,第一部分较短 第二部分较长。
     
     
    怎么样? 绘制线的方法不难学吧?在已知线段位置的情况下我们可以使用上面的方法去设置这条线,但是如果线段的位置是在游戏过程中动态的产生就得在代码中去动态的去设置。
     
     
    创建脚本Main.cs 绑定到摄像头上,运行游戏绘制线的话须要在Main中去拿到line这个对象的实例。这就是一个比较重要的知识点了。
     
    一些重要的方法,在编辑器中编辑的一些东西,在代码中也可以做到。
     
    LineRenderer.SetWidth(0.1,0.1) ; 设置线段起始点与结束点的宽度 (参数1 为起始点 参数2为结束点)
    LineRenderer.SetColor(Color.black,Color.white); 设置线段起始点与结束点的颜色 (参数1 为起始点颜色 参数2为结束点颜色)
    LineRenderer.SetVertexCount(5); 设置线段数量。
    LineRenderer.useWorldSpace = true; 是否使用世界坐标系,和上面编辑器对应。
     
    [csharp] view plaincopy
     
     
    1. using UnityEngine;  
    2. using System.Collections;  
    3. using System.Threading;  
    4.   
    5. public class Main : MonoBehaviour {  
    6.       
    7.     //游戏对象,这里是线段对象  
    8.     private GameObject LineRenderGameObject;  
    9.       
    10.     //线段渲染器  
    11.     private LineRenderer lineRenderer;  
    12.       
    13.     //设置线段的个数,标示一个曲线由几条线段组成  
    14.     private int lineLength = 4;  
    15.       
    16.     //分别记录4个点,通过这4个三维世界中的点去连接一条线段  
    17.     private Vector3 v0 = new Vector3(1.0f,0.0f,0.0f);  
    18.     private Vector3 v1 = new Vector3(0.0f,1.0f,0.0f);  
    19.     private Vector3 v2 = new Vector3(0.0f,0.0f,1.0f);  
    20.     private Vector3 v3 = new Vector3(1.0f,0.0f,0.0f);  
    21.       
    22.     void Start(){  
    23.           
    24.         //通过之前创建的对象的名称,就可以在其它类中得到这个对象,  
    25.         //这里在main.cs中拿到line的对象  
    26.         LineRenderGameObject = GameObject.Find ("line");  
    27.           
    28.         //通过游戏对象,GetComponent方法 传入LineRenderer  
    29.         //就是之前给line游戏对象添加的渲染器属性  
    30.         //有了这个对象才可以为游戏世界渲染线段  
    31.         lineRenderer = (LineRenderer)LineRenderGameObject.GetComponent ("LineRenderer");  
    32.           
    33.         //设置线段长度,这个数值须要和绘制线3D点的数量想等  
    34.         //否则会抛异常~~  
    35.         lineRenderer.SetVertexCount(lineLength);  
    36.           
    37.           
    38.     }     
    39.                    
    40.       
    41.     void Update() {  
    42.           
    43.         //在游戏更新中去设置点  
    44.         //根据点将这个曲线链接起来  
    45.         //第一个参数为 点的ID   
    46.         //第二个 参数为点的3D坐标  
    47.         //ID 一样的话就标明是一条线段  
    48.         //所以盆友们须要注意一下!  
    49.           
    50.         lineRenderer.SetPosition (0, v0);  
    51.         lineRenderer.SetPosition (1, v1);  
    52.         lineRenderer.SetPosition (2, v2);  
    53.         lineRenderer.SetPosition (3, v3);  
    54.   
    55.   
    56.     }  
    57.       
    58. }  
     
    通过上面代码的设置,运行游戏,发现全新的一个三角形曲线赫然的映入我们的眼帘,有了上面的方法我们就可以组合的绘制出各种各样的3D 游戏曲线了,这里MOMO使用的是颜色,大家也可以添加一个贴图~
     
     
  • 相关阅读:
    fork-vfork -exit&_exit
    drop_cache-sar
    性能问题eg
    性能工具-mem
    性能工具-io工具
    linux后台开发常用调试工具
    GDB的原理
    可变参数以及stdcall
    linux 中断softirq tasklet
    linux kernel RCU 以及读写锁
  • 原文地址:https://www.cnblogs.com/wonderKK/p/4159191.html
Copyright © 2011-2022 走看看