Advertisement
Guest User

Untitled

a guest
Jan 12th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.71 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement