Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 14 Next capture
2021 2022 2023
2 captures
12 Jun 22 - 14 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by rootbeer12 · Oct 02, 2019 at 02:45 PM · particlesystemtrailguns

How would I add a trail to my raycast weapon using the unity shuriken particle system?

Hi, I was wondering how and if it was possible to add a trail like a tracer to my weapon even though its raycast. The way I would do it to give it the illusion that both the ray from the raycast and the particle effect are hitting the object at the same time I would make it where the head of the particle would hit instantly and there would be a trail that lingers behind for 2-3 seconds like Halos sniper rifle. If you can help me please comment down below.

 using UnityEngine;
  using System.Collections;
  
  
  public class GunBR : MonoBehaviour
  {
      private const int V = 3;
  
      //Decal
      public GameObject decalHit;
    public float projectileDestroyTimer = 5f;
  
  
  
  
    //Ámmo
    public int maxAmmoTotal = 30; // Max ammo to carry Example: 30
    public int maxAmmoInClipTotal = 5; // Max ammo total to be able to reload Example: 5
    public int curAmmo = 30; // Current reloadable ammo Example: 30
    public int ammoInClip = 8; // Current ammo in clip Example: 5
    private bool isReloading = false;
  
  
  
  
    //Animation
    public string fireAnimation; //Shoot animation
    public string clipEmptyAnim; //Clip empty animation
    public string reloadAnimation; //Reload animation
    public float reloadTime = 1f; // How long it takes to reload
    public Animator reloadAnimations;
    public Animator ClipEmptyAnimations;
  
  
  
  
    //GameObjects
    public GameObject weapon; //Needed for aiming
    public ParticleSystem muzzleflash;
    public ParticleSystem BulletTrail;
    public Animator FireAnimation;
    public AudioSource GunSounds;
  
  
  
  
    //Raycast
    private RaycastHit rayHit;
    public float shootDistance = 200f;
  
  
  
  
    //Recoil
    private float defaultRecoil = 50f;
    public float recoil = 50f;
    public float recoilAiming = 10f;
  
  
    //Aim
    public Vector3 aimPos = Vector3.zero;
    private Vector3 defaultPos = Vector3.zero;
    public float smoothTime; //How long it takes to get to the aiming position
    private Vector3 dampVelocity;
    private bool aiming = false;
  
  
    //Audio
    private AudioSource audioSource; //Audio source
    public AudioClip fireSound; //Sound when shooting
    public AudioSource clipEmptySound; //Sound when clip is empty
    public AudioSource reloadSound; //Sound when reloading
  
    //Weapon
    public float hitDamage = 12;
    public float LastTimeShot;
    public float TimeBetweenShots = 1;
    public float fireRate = 20f;
    private const float TIME_BETWEEN_SHOTS = .1f;
    private const int SHOTS_PER_BURST = 3;
    public int shotDamage = 10; // Change this variable to deal a different ammount of damage
 
    // Routine responsible for firing a burst
    private Coroutine shootRoutine = null;
  
    private float nextTimeToFire = 0f;
  
  
    //Only for testing
    int removedAmmoRecently; //Only for testing
 
      private IEnumerator BurstFire()
      {
          int bulletsShot = 0;
          while (bulletsShot < SHOTS_PER_BURST)
          {
              Shoot();
              bulletsShot++;
              yield return new WaitForSeconds(TIME_BETWEEN_SHOTS);
          }
  
          shootRoutine = null;
      }
  
 
    void Start()
    {
      defaultPos = weapon.transform.localPosition;
      defaultRecoil = recoil;
      audioSource = GetComponent<AudioSource>();
    }
  
      private void Update()
      {
          // If we press fire and we're not already firing a burst shot
          if (Input.GetButton("Fire1") && shootRoutine == null)
          {
              shootRoutine = StartCoroutine(BurstFire());
          }
 
     if (Input.GetKeyDown(KeyCode.R) && !isReloading)
      {
        StartCoroutine("Reload");
      }
    }
       
  
  
  private void Shoot()
        {
        if(ammoInClip != 0 && !isReloading)
        {
          PlaySound(fireSound);
          GunSounds.Play();
          muzzleflash.Play();
          BulletTrail.Play();
          PlayAnimation(fireAnimation);
          GetComponent<Animator>().Play("FireAnimation");
          ammoInClip--;
          Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2f + Random.Range(-recoil, recoil), Screen.height/2f + Random.Range(-recoil, recoil), 0f));
          if (Physics.Raycast(ray, out rayHit, shootDistance))
          {
            GameObject decalClone = (GameObject)Instantiate(decalHit, rayHit.point, Quaternion.LookRotation(rayHit.normal, Vector3.forward));
            Destroy(decalClone, projectileDestroyTimer);  
            }
        }
    }
 
       void DoDamage(RaycastHit hit)
        {
            if(hit.transform.tag == "Enemy")
            {
                if(hit.transform.GetComponent<EnemyHealth>())
                {
                    hit.transform.GetComponent<EnemyHealth>().ApplyDamage(shotDamage); // Apply damage equal to the damage variable to the enemy
                }
                Debug.Log(hit.transform.name + " has been hit");
            }
        }
 
  
    IEnumerator Reload()
    {
      //If ammoInClip example 5 is equal or greater than  0 and ammoInClip(5) is lower than maxAmmoInClipTotal(The max amount of ammo that can be in a clip) and curAmmo(how much ammo you have like 5/30) is greater than 0
      if (ammoInClip >= 0 && ammoInClip < maxAmmoInClipTotal && curAmmo > 0)
      {
        isReloading = true;
        reloadSound.Play();
        GetComponent<Animator>().Play("reloadAnimations");
        yield return new WaitForSeconds(reloadTime);
        removedAmmoRecently = 0; //You can remove this line, it's only for testing.
        for (int i = 0; i < maxAmmoInClipTotal; i++)
        {
          if (ammoInClip == maxAmmoInClipTotal || curAmmo <= 0)
          {
            break;
          }
          else
          {
            ammoInClip++;
            curAmmo--;
            removedAmmoRecently++; //You can remove this line, it's only for testing. | To check how much ammo has been removed
          }
        }
        isReloading = false;
        Debug.Log("Removed " + removedAmmoRecently + " " + "ammo from pocket ammo. Ammo: " + ammoInClip + "/" + curAmmo); //You can remove this line, it's only for testing. | Prints out how much ammo that has been removed, ammo you have in clip, and how much ammo that is left
      }
      else
      {
        yield break;
      }
    }
  
  
    void PlayAnimation(string anim)
    {
      if (anim != "")
      {
        weapon.GetComponent<Animation>().Play(anim);
      }
    }
  
  
    void PlaySound(AudioClip clip)
    {
      if (clip != null)
      {
        audioSource.PlayOneShot(clip);
      }
    }
  
  
    void AimDownSight()
    {
      if(aiming && weapon.transform.localPosition.normalized != aimPos.normalized)
      {
        weapon.transform.localPosition = Vector3.SmoothDamp (weapon.transform.localPosition, aimPos, ref dampVelocity, smoothTime);
        Debug.Log ("Aiming");
        recoil = recoilAiming;
      }
  
  
      if(!aiming && weapon.transform.localPosition.normalized != defaultPos.normalized)
      {
        weapon.transform.localPosition = Vector3.SmoothDamp (weapon.transform.localPosition, defaultPos, ref dampVelocity, smoothTime);
        Debug.Log ("UnAiming");
        recoil = defaultRecoil;
      }
    }
  
  
    void OnGUI()
    {
      GUILayout.Label("Ammo: " + ammoInClip + "/" + curAmmo);
    }
  }
    
 


Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

112 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Weird particle behaviour on trails of a fast object 2 Answers

Destroying a Particle with trail effect the trail isn't destroyed. 0 Answers

Particles emitting non-random 1 Answer

Particle emitting in non-random shape 0 Answers

To create a sphere which would leave a SHORT trail behind? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges