Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 KreeperGaming · Sep 10, 2017 at 06:56 PM · rotationfpsgunrecoilpattern

CS:GO-like recoil

Hi, I am trying to make gun spray pattern recoil like CS:GO.

I was thinking maybe I can cycle through a Vector3 Array. But I Don't know how to lerp from one Vector3 to another to another

I was thinking doing something like

 public class Recoil : MonoBehaviour {
 
     public Vector3[] sprayPattern;
     public float speed = 5f;
 
     public void Recoiling()
     {
         Vector3.Lerp (sprayPattern [0], sprayPattern [1], speed);
         Vector3.Lerp (sprayPattern [1], sprayPattern [2], speed);
         Vector3.Lerp (sprayPattern [2], sprayPattern [3], speed);
     }
 }
 

And I would call the Recoiling() Function in my weapon Script.

But Then I was thinking, what if I have more than 4 Vector3s in my array.

Essentially, I need help getting a spray pattern like CS:GO

Oh and, animations won't work for this.

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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by TheSOULDev · Sep 10, 2017 at 07:13 PM

From what I understand, you need something like this:

 for(int i = 0; i < sprayPattern.Length - 1; i++)
 Vector3.Lerp(SprayPattern[i], SprayPattern[i + 1], speed);

However, I'm fairly sure that CS:GO doesn't handle recoil like that. In fact, your code doesn't even do anything.

What would make more sense to me would be

 Vector3 offset;
 
 for(int i = 0; i < sprayPattern.Length - 1; i++)
     offset += Vector3.Lerp(SprayPattern[i], SprayPattern[i + 1], speed * (isRunning ? coefficient : 1));

Comment
Add comment · Show 4 · Share
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
avatar image KreeperGaming · Sep 10, 2017 at 07:18 PM 0
Share

Doesn't work.

avatar image KreeperGaming · Sep 10, 2017 at 07:19 PM 0
Share
 public class Recoil : $$anonymous$$onoBehaviour {
 
     public Vector3[] sprayPattern;
     public float speed = 5f;
     public Transform cam;
 
     public void Recoiling()
     {
         for (int i = 0; i < sprayPattern.Length; i++)
         {
             cam.localPosition = Vector3.Lerp (sprayPattern [i], sprayPattern [i + 1], speed);
         }
     }
 }

Weapon:

 if (shootInput) 
         {
             if (currentBullets > 0)
             {
                 Fire ();
                 recoilScript.Recoiling ();
             }
             else if(bulletsLeft > 0 && !info.IsName("Reload"))
                 DoReload ();
         }
avatar image KreeperGaming · Sep 10, 2017 at 08:01 PM 0
Share

And what is the isRunning and coefficient variables from?

avatar image TheSOULDev KreeperGaming · Sep 11, 2017 at 01:50 AM 0
Share

In CS:GO, your recoil is much much higher, on top of having worse accuracy when you're moving (especially running). Coefficient variables are something you implement yourself. However, you're trying to implement recoil with no variables whatsoever. You should first create a gun system that has variables like accuracy, recoil, firing rate etc. Then, first your system should deter$$anonymous$$e how your gun shoots depending on accuracy. Let's say you have 0-100 accuracy. 0 Accuracy means your gun shoots wherever. 100 accuracy means that your gun shoots perfectly straight. So your shooting script would first calculate the offset at which your gun shoots without any recoil. This would look something like this:

 public class GunStats()
 {
         ushort AmmoCapacity;
         byte Accuracy;
         byte Recoil;    //You can add many more.
 
     public GunStats(ushort capacity, byte accuracy, byte recoil)
     {
         AmmoCapacity = capacity:
         Accuracy = accuracy;
         Recoil = recoil;
     }
 }

Then you should create a straight shot offset script. Something like this:

 Vector2 AccuracyOffset(GunStats UsingGun)
 {
     return Random.Range(0, (100 - Gunstats.Accuracy) * 1000) / 100000) * (new Vector2(Random.Range(-1000, 1000), Random.Range(-1000, 1000)).normalized);
 }

Of course the above is just a very crude way of describing such behaviour, but you probably get what I'm saying.

And only then would you go on to create a recoil system. The said recoil system should probably not use spray patterns as you would still need to create them, but be calculated on run time, based on aim movement and such (if you're spraying and your aim derivation is Vector2.up, then you should get higher recoil up than down etc.). Even if you want to blatantly copy CS:GO, you would still need to use the aforementioned accuracy system as no two spray patterns will be the same even if it truly is the same spray pattern on the same weapon.

Overall you're trying to tackle a big problem with inadequate code while not researching the matter by yourself (such as Vector3.Lerp). You should first try to learn exactly how recoil works and how games calculate the vector to send rays at, and then try to devise something. $$anonymous$$y code, of course, won't work if you just copy paste it because I neither create code which exists to be plagiarized, nor should you $$anonymous$$dlessly copy code without adjusting it to meet your needs. I was simply providing an example based on what I understood what your needs were from what you've initially said to describe your problem.

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

113 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 avatar image

Related Questions

shooting laser to screen middle doesnt work... 1 Answer

Dart/Bullet comes out pointing up 1 Answer

Camera Recoil,Please help me. 2 Answers

FPS Run Animation Gun - Rotation Issue 0 Answers

Gun not rotating with the camera? 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