SHARE
TWEET

Untitled

a guest Jan 12th, 2017 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Laser Controller
  2. //This code can be used for private or commercial projects but cannot be sold or redistributed without written permission.
  3. //Copyright Nik W. Kraus / Dark Cube Entertainment LLC.
  4.     #pragma strict
  5.    
  6.     var StartPoint : Transform;
  7.    
  8.     var LaserDirection = "X";
  9.        
  10.    
  11.     var Use2D = false; 
  12.     var LaserMask : LayerMask;
  13.    
  14.     var LaserOn = true;    
  15.    
  16.     var UseUVPan = true;
  17.    
  18.     var EndFlareOffset = 0.0;
  19.    
  20.     var SourceFlare : LensFlare;
  21.     var EndFlare : LensFlare;
  22.  
  23.     var AddSourceLight = true;
  24.     var AddEndLight = true;
  25.  
  26.     var LaserColor : Color = Color(1,1,1,.5);
  27.        
  28.     var StartWidth = 0.1;
  29.     var EndWidth = 0.1;
  30.     var LaserDist = 20.0;
  31.     var TexScrollX = -0.1;
  32.     var TexScrollY = 0.1;
  33.     var UVTexScale = Vector2(4,.4);
  34.    
  35.     private var SectionDetail : float = 2;      
  36.     private var lineRenderer : LineRenderer;
  37.     private var ray = Ray(Vector3(0,0,0), Vector3(0,1,0)); 
  38.     private var EndPos : Vector3;
  39.     private var hit: RaycastHit;
  40.     private var hit2D : RaycastHit2D;
  41.     private var SourceLight : GameObject;
  42.     private var EndLight : GameObject;
  43.     private var ViewAngle : float;
  44.     private var LaserDir : Vector3;
  45.    
  46.    
  47.     @script RequireComponent(LineRenderer)
  48.    
  49.     function Start() {
  50.          lineRenderer = GetComponent(LineRenderer);
  51.          if(lineRenderer.material == "none")
  52.          lineRenderer.GetComponent.<Renderer>().material = new Material (Shader.Find("LaserAdditive"));
  53.          
  54.          lineRenderer.castShadows = false;
  55.          lineRenderer.receiveShadows = false;
  56.          
  57.          lineRenderer.SetVertexCount(SectionDetail);
  58.          lineRenderer = GetComponent(LineRenderer);
  59.          
  60.          // Make a lights
  61.         if(AddSourceLight){
  62.         StartPoint.gameObject.AddComponent(Light);
  63.         StartPoint.GetComponent.<Light>().intensity = 1.5;
  64.         StartPoint.GetComponent.<Light>().range = .5;
  65.         }
  66.        
  67.         if(AddEndLight){
  68.             if(EndFlare){
  69.             EndFlare.gameObject.AddComponent(Light);
  70.             EndFlare.GetComponent.<Light>().intensity = 1.5;
  71.             EndFlare.GetComponent.<Light>().range = .5;    
  72.             }
  73.             else{Debug.Log("To use End Light, please assign an End Flare");}
  74.         }
  75.        
  76.        
  77.         if(LaserDirection=="x" || LaserDirection=="y" || LaserDirection=="z" || LaserDirection=="X" || LaserDirection=="Y" || LaserDirection=="Z"){    
  78.         }
  79.         else{
  80.             Debug.Log("Laser Direction can only be X, Y or Z");}
  81.        
  82.                              
  83.      }//end start
  84.          
  85.    
  86.         /////////////////////////////////////
  87.     function Update() {
  88.         if(LaserDirection=="x" || LaserDirection=="X"){    
  89.             LaserDirection="X";
  90.             LaserDir = StartPoint.right;
  91.         }
  92.         else if(LaserDirection=="y" || LaserDirection=="Y"){
  93.             LaserDirection="Y";
  94.             LaserDir = StartPoint.up;
  95.         }
  96.         else if(LaserDirection=="z" || LaserDirection=="Z"){
  97.             LaserDirection="Z";
  98.             LaserDir = StartPoint.forward;
  99.         }
  100.         else{
  101.         LaserDir = StartPoint.forward;
  102.         }
  103.    
  104.         var CamDistSource = Vector3.Distance(StartPoint.position, Camera.main.transform.position);
  105.         var CamDistEnd = Vector3.Distance(EndPos, Camera.main.transform.position);     
  106.         ViewAngle = Vector3.Angle(LaserDir, Camera.main.transform.forward);      
  107.                            
  108.       if(LaserOn){
  109.         lineRenderer.enabled = true;              
  110.         lineRenderer.SetWidth(StartWidth,EndWidth);
  111.         lineRenderer.material.color = LaserColor;
  112.        
  113.         //Flare Control
  114.         if(SourceFlare){
  115.         SourceFlare.color = LaserColor;
  116.         SourceFlare.transform.position = StartPoint.position;
  117.        
  118.         if(ViewAngle > 155 && CamDistSource < 20 && CamDistSource > 0){
  119.         SourceFlare.brightness = Mathf.Lerp(SourceFlare.brightness,20.0,.001); 
  120.         }
  121.         else{
  122.         SourceFlare.brightness = Mathf.Lerp(SourceFlare.brightness,0.1,.05);
  123.          }        
  124.         }
  125.        
  126.         if(EndFlare){
  127.         EndFlare.color = LaserColor;
  128.        
  129.         if(CamDistEnd > 20){
  130.         EndFlare.brightness = Mathf.Lerp(EndFlare.brightness,0.0,.1);
  131.         }
  132.         else{
  133.         EndFlare.brightness = Mathf.Lerp(EndFlare.brightness,5.0,.1);
  134.          }
  135.         }// end flare        
  136.        
  137.         //Light Control
  138.         if(AddSourceLight)
  139.         StartPoint.GetComponent.<Light>().color = LaserColor;
  140.  
  141.         if(AddEndLight){
  142.          if(EndFlare){
  143.          EndFlare.GetComponent.<Light>().color = LaserColor;
  144.          }
  145.         }      
  146.        
  147.        
  148.        
  149.                        
  150.         /////////////////////Ray Hit
  151.        if(Use2D){
  152.         hit2D = Physics2D.Raycast(StartPoint.position, LaserDir, LaserDist, LaserMask);        
  153.  
  154.         var ray2 = new Ray2D(StartPoint.position, LaserDir);
  155.         var dist2D = Vector3.Distance(StartPoint.position, hit2D.point);
  156.         if (hit2D){            
  157.                EndPos = hit2D.point;               
  158.                
  159.                if(EndFlare){
  160.                EndFlare.enabled = true;
  161.                
  162.                if(AddEndLight){
  163.                if(EndFlare){
  164.                EndFlare.GetComponent.<Light>().enabled = true;         
  165.              }
  166.             }
  167.                        
  168.             if(EndFlareOffset > 0)
  169.             EndFlare.transform.position = hit2D.point + hit2D.normal * EndFlareOffset;
  170.             else
  171.             EndFlare.transform.position = EndPos;
  172.             }          
  173.           }
  174.         else{
  175.             if(EndFlare)
  176.             EndFlare.enabled = false;          
  177.            
  178.             if(AddEndLight){
  179.              if(EndFlare){
  180.              EndFlare.GetComponent.<Light>().enabled = false;
  181.              }
  182.             }
  183.            
  184.            EndPos = ray2.GetPoint(LaserDist);                                              
  185.          }
  186.         }
  187.         ///Else 3D Ray
  188.        else{
  189.         ray = new Ray(StartPoint.position, LaserDir);          
  190.         if (Physics.Raycast(ray, hit, LaserDist, LaserMask)){          
  191.             EndPos = hit.point;            
  192.            
  193.             if(EndFlare){
  194.             EndFlare.enabled = true;
  195.            
  196.             if(AddEndLight){
  197.              if(EndFlare){
  198.              EndFlare.GetComponent.<Light>().enabled = true;           
  199.              }
  200.             }
  201.                        
  202.             if(EndFlareOffset > 0)
  203.             EndFlare.transform.position = hit.point + hit.normal * EndFlareOffset;
  204.             else
  205.             EndFlare.transform.position = EndPos;
  206.             }          
  207.           }
  208.         else{
  209.             if(EndFlare)
  210.             EndFlare.enabled = false;          
  211.            
  212.             if(AddEndLight){
  213.              if(EndFlare){
  214.              EndFlare.GetComponent.<Light>().enabled = false;
  215.              }
  216.             }
  217.            
  218.            EndPos = ray.GetPoint(LaserDist);                                               
  219.          }
  220.         }//end Ray      
  221.        
  222.        
  223.         //Debug.DrawLine (StartPoint.position, EndPos, Color.red);
  224.        
  225.           //Find Distance
  226.           var dist = Vector3.Distance(StartPoint.position, EndPos);
  227.          
  228.           //Line Render Positions
  229.           lineRenderer.SetPosition(0,StartPoint.position);
  230.           lineRenderer.SetPosition(1,EndPos);
  231.                      
  232.     //Texture Scroller
  233.     if(UseUVPan){
  234.     //lineRenderer.material.SetTextureScale("_Mask", Vector2(dist/4, .1));
  235.     lineRenderer.material.SetTextureScale("_Mask", Vector2(dist/UVTexScale.x, UVTexScale.y));
  236.     lineRenderer.material.SetTextureOffset ("_Mask", Vector2(TexScrollX*Time.time, TexScrollY*Time.time));
  237.     }
  238.    
  239.    }
  240.    else{
  241.     lineRenderer.enabled = false;
  242.    
  243.     if(SourceFlare)
  244.     SourceFlare.enabled = false;
  245.    
  246.     if(EndFlare)
  247.     EndFlare.enabled = false;
  248.            
  249.     if(AddSourceLight)
  250.     StartPoint.GetComponent.<Light>().enabled = false;
  251.    
  252.     if(AddEndLight)
  253.      if(EndFlare){
  254.      EndFlare.GetComponent.<Light>().enabled = false;  
  255.      }   
  256.    }//end Laser On  
  257.    
  258.   }//end Update
  259.  
  260.  
  261.   /////Icon
  262.     function OnDrawGizmos () {
  263.         Gizmos.DrawIcon(transform.position, "LaserIcon.psd", true);
  264.     }
RAW Paste Data
Top