123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- using UnityEngine;
- using System.Collections;
- using UnityEngine.UI;
- namespace PolygonArsenal
- {
- public class PolygonBeamScript : MonoBehaviour {
- [Header("Prefabs")]
- public GameObject[] beamLineRendererPrefab;
- public GameObject[] beamStartPrefab;
- public GameObject[] beamEndPrefab;
- private int currentBeam = 0;
- private GameObject beamStart;
- private GameObject beamEnd;
- private GameObject beam;
- private LineRenderer line;
- [Header("Adjustable Variables")]
- public float beamEndOffset = 1f; //How far from the raycast hit point the end effect is positioned
- public float textureScrollSpeed = 8f; //How fast the texture scrolls along the beam
- public float textureLengthScale = 3; //Length of the beam texture
- [Header("Put Sliders here (Optional)")]
- public Slider endOffSetSlider; //Use UpdateEndOffset function on slider
- public Slider scrollSpeedSlider; //Use UpdateScrollSpeed function on slider
- [Header("Put UI Text object here to show beam name")]
- public Text textBeamName;
- // Use this for initialization
- void Start()
- {
- if (textBeamName)
- textBeamName.text = beamLineRendererPrefab[currentBeam].name;
- if (endOffSetSlider)
- endOffSetSlider.value = beamEndOffset;
- if (scrollSpeedSlider)
- scrollSpeedSlider.value = textureScrollSpeed;
- }
- // Update is called once per frame
- void Update()
- {
- if (Input.GetKeyDown(KeyCode.Escape))
- Application.Quit();
- if (Input.GetMouseButtonDown(0))
- {
- beamStart = Instantiate(beamStartPrefab[currentBeam], new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
- beamEnd = Instantiate(beamEndPrefab[currentBeam], new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
- beam = Instantiate(beamLineRendererPrefab[currentBeam], new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
- line = beam.GetComponent<LineRenderer>();
- }
- if (Input.GetMouseButtonUp(0))
- {
- Destroy(beamStart);
- Destroy(beamEnd);
- Destroy(beam);
- }
- if (Input.GetMouseButton(0))
- {
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
- RaycastHit hit;
- if (Physics.Raycast(ray.origin, ray.direction, out hit))
- {
- Vector3 tdir = hit.point - transform.position;
- ShootBeamInDir(transform.position, tdir);
- }
- }
-
- if (Input.GetKeyDown(KeyCode.RightArrow)) //4 next if commands are just hotkeys for cycling beams
- {
- nextBeam();
- }
- if (Input.GetKeyDown(KeyCode.D))
- {
- nextBeam();
- }
- if (Input.GetKeyDown(KeyCode.A))
- {
- previousBeam();
- }
- else if (Input.GetKeyDown(KeyCode.LeftArrow))
- {
- previousBeam();
- }
-
- }
- public void nextBeam() // Next beam
- {
- if (currentBeam < beamLineRendererPrefab.Length - 1)
- currentBeam++;
- else
- currentBeam = 0;
- if (textBeamName)
- textBeamName.text = beamLineRendererPrefab[currentBeam].name;
- }
-
- public void previousBeam() // Previous beam
- {
- if (currentBeam > - 0)
- currentBeam--;
- else
- currentBeam = beamLineRendererPrefab.Length - 1;
- if (textBeamName)
- textBeamName.text = beamLineRendererPrefab[currentBeam].name;
- }
-
- public void UpdateEndOffset()
- {
- beamEndOffset = endOffSetSlider.value;
- }
- public void UpdateScrollSpeed()
- {
- textureScrollSpeed = scrollSpeedSlider.value;
- }
- void ShootBeamInDir(Vector3 start, Vector3 dir)
- {
- line.positionCount = 2;
- line.SetPosition(0, start);
- beamStart.transform.position = start;
- Vector3 end = Vector3.zero;
- RaycastHit hit;
- if (Physics.Raycast(start, dir, out hit))
- end = hit.point - (dir.normalized * beamEndOffset);
- else
- end = transform.position + (dir * 100);
- beamEnd.transform.position = end;
- line.SetPosition(1, end);
- beamStart.transform.LookAt(beamEnd.transform.position);
- beamEnd.transform.LookAt(beamStart.transform.position);
- float distance = Vector3.Distance(start, end);
- line.sharedMaterial.mainTextureScale = new Vector2(distance / textureLengthScale, 1);
- line.sharedMaterial.mainTextureOffset -= new Vector2(Time.deltaTime * textureScrollSpeed, 0);
- }
- }
- }
|