void Update() { //if (Laser.material.HasProperty("_SpeedMainTexUVNoiseZW")) Laser.material.SetVector("_SpeedMainTexUVNoiseZW", LaserSpeed); //SetVector("_TilingMainTexUVNoiseZW", Length); - old code, _TilingMainTexUVNoiseZW no more exist Laser.material.SetTextureScale("_MainTex", new Vector2(Length[0], Length[1])); Laser.material.SetTextureScale("_Noise", new Vector2(Length[2], Length[3])); //To set LineRender position if (Laser != null && UpdateSaver == false) { Laser.SetPosition(0, transform.position); RaycastHit hit; //DELETE THIS IF YOU WANT USE LASERS IN 2D //ADD THIS IF YOU WANNT TO USE LASERS IN 2D: RaycastHit2D hit = Physics2D.Raycast(transform.position, transform.forward, MaxLength); if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, MaxLength)) //CHANGE THIS IF YOU WANT TO USE LASERRS IN 2D: if (hit.collider != null) { //End laser position if collides with object Laser.SetPosition(1, hit.point); HitEffect.transform.position = hit.point + hit.normal * HitOffset; //Hit effect zero rotation HitEffect.transform.rotation = Quaternion.identity; foreach (var AllPs in Effects) { if (!AllPs.isPlaying) { AllPs.Play(); } } //Texture tiling Length[0] = MainTextureLength * (Vector3.Distance(transform.position, hit.point)); Length[2] = NoiseTextureLength * (Vector3.Distance(transform.position, hit.point)); //Texture speed balancer {DISABLED AFTER UPDATE} //LaserSpeed[0] = (LaserStartSpeed[0] * 4) / (Vector3.Distance(transform.position, hit.point)); //LaserSpeed[2] = (LaserStartSpeed[2] * 4) / (Vector3.Distance(transform.position, hit.point)); } else { //End laser position if doesn't collide with object var EndPos = transform.position + transform.forward * MaxLength; Laser.SetPosition(1, EndPos); HitEffect.transform.position = EndPos; foreach (var AllPs in Hit) { if (AllPs.isPlaying) { AllPs.Stop(); } } //Texture tiling Length[0] = MainTextureLength * (Vector3.Distance(transform.position, EndPos)); Length[2] = NoiseTextureLength * (Vector3.Distance(transform.position, EndPos)); //LaserSpeed[0] = (LaserStartSpeed[0] * 4) / (Vector3.Distance(transform.position, EndPos)); {DISABLED AFTER UPDATE} //LaserSpeed[2] = (LaserStartSpeed[2] * 4) / (Vector3.Distance(transform.position, EndPos)); {DISABLED AFTER UPDATE} } //Insurance against the appearance of a laser in the center of coordinates! if (Laser.enabled == false && LaserSaver == false) { LaserSaver = true; Laser.enabled = true; } } }
public void DisablePrepare() { if (Laser != null) { Laser.enabled = false; } UpdateSaver = true; //Effects can = null in multiply shooting if (Effects != null) { foreach (var AllPs in Effects) { if (AllPs.isPlaying) { AllPs.Stop(); } } } }
void Update() { if (laserPS != null && UpdateSaver == false) { //Set start laser point laserMat.SetVector("_StartPoint", transform.position); //Set end laser point RaycastHit hit; if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, MaxLength)) { particleCount = Mathf.RoundToInt(hit.distance / (2 * laserScale)); if (particleCount < hit.distance / (2 * laserScale)) { particleCount += 1; } particlesPositions = new Vector3[particleCount]; AddParticles(); laserMat.SetFloat("_Distance", hit.distance); laserMat.SetVector("_EndPoint", hit.point); if (Hit != null) { HitEffect.transform.position = hit.point + hit.normal * HitOffset; HitEffect.transform.LookAt(hit.point); foreach (var AllHits in Hit) { if (!AllHits.isPlaying) { AllHits.Play(); } } foreach (var AllFlashes in Flash) { if (!AllFlashes.isPlaying) { AllFlashes.Play(); } } } } else { //End laser position if doesn't collide with object var EndPos = transform.position + transform.forward * MaxLength; var distance = Vector3.Distance(EndPos, transform.position); particleCount = Mathf.RoundToInt(distance / (2 * laserScale)); if (particleCount < distance / (2 * laserScale)) { particleCount += 1; } particlesPositions = new Vector3[particleCount]; AddParticles(); laserMat.SetFloat("_Distance", distance); laserMat.SetVector("_EndPoint", EndPos); if (Hit != null) { HitEffect.transform.position = EndPos; foreach (var AllPs in Hit) { if (AllPs.isPlaying) { AllPs.Stop(); } } } } } if (startDissovle) { dissovleTimer += Time.deltaTime; laserMat.SetFloat("_Dissolve", dissovleTimer * 5); } }