How do I implement bullet spread in three-dimensional space? The 2019 Stack Overflow Developer Survey Results Are InHow to translate a direction on the screen to 3D space?How do I implement realistic recovery from weapon recoil?Unity 3D - Rotate towards object with random offsetsPass Vector2 to Instantiated GameObjectBullet holes on curved surfaces and cornersHow do bullets work in video games?How can I add two Vector3 directions together?how to make bullet that is shot from a gun to wo same point and direction that HUD has pointedHow are Roguelike/Bullet Hell mechanics stored in Unity?How can I generate roads such as those in the game Twisty Road?

Does the shape of a die affect the probability of a number being rolled?

If I score a critical hit on an 18 or higher, what are my chances of getting a critical hit if I roll 3d20?

Why did Acorn's A3000 have red function keys?

What is the motivation for a law requiring 2 parties to consent for recording a conversation

Why didn't the Event Horizon Telescope team mention Sagittarius A*?

Why can Shazam fly?

Are there any other methods to apply to solving simultaneous equations?

Building a conditional check constraint

Is "plugging out" electronic devices an American expression?

Is an up-to-date browser secure on an out-of-date OS?

How to notate time signature switching consistently every measure

Aging parents with no investments

How come people say “Would of”?

Button changing it's text & action. Good or terrible?

What to do when moving next to a bird sanctuary with a loosely-domesticated cat?

Falsification in Math vs Science

Why do UK politicians seemingly ignore opinion polls on Brexit?

Pokemon Turn Based battle (Python)

Loose spokes after only a few rides

Did Scotland spend $250,000 for the slogan "Welcome to Scotland"?

Resizing object distorts it (Illustrator CC 2018)

A poker game description that does not feel gimmicky

Am I thawing this London Broil safely?

Write faster on AT24C32



How do I implement bullet spread in three-dimensional space?



The 2019 Stack Overflow Developer Survey Results Are InHow to translate a direction on the screen to 3D space?How do I implement realistic recovery from weapon recoil?Unity 3D - Rotate towards object with random offsetsPass Vector2 to Instantiated GameObjectBullet holes on curved surfaces and cornersHow do bullets work in video games?How can I add two Vector3 directions together?how to make bullet that is shot from a gun to wo same point and direction that HUD has pointedHow are Roguelike/Bullet Hell mechanics stored in Unity?How can I generate roads such as those in the game Twisty Road?



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1












$begingroup$


How can I shoot a bullet in three-dimensional space in such a way that its path diverges a bit, randomly, from the direction in which the gun is pointed?



I know I have to use the Quaternions, but I don't know how exactly.



Three-dimensional possible directions



Should I convert Quaternion to EulerAngles



Quaternion randomRotation = Random.rotation; 
Vector3 inEuler = randomRotation.eulerAngles;


or is there a fairer / nicer way to do it?










share|improve this question









New contributor




EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$











  • $begingroup$
    A quick search reveals that "bullet spread" seems to be an invention of video games developers. I formalized what you seemed to be after.
    $endgroup$
    – Alexandre Vaillancourt
    10 hours ago

















1












$begingroup$


How can I shoot a bullet in three-dimensional space in such a way that its path diverges a bit, randomly, from the direction in which the gun is pointed?



I know I have to use the Quaternions, but I don't know how exactly.



Three-dimensional possible directions



Should I convert Quaternion to EulerAngles



Quaternion randomRotation = Random.rotation; 
Vector3 inEuler = randomRotation.eulerAngles;


or is there a fairer / nicer way to do it?










share|improve this question









New contributor




EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$











  • $begingroup$
    A quick search reveals that "bullet spread" seems to be an invention of video games developers. I formalized what you seemed to be after.
    $endgroup$
    – Alexandre Vaillancourt
    10 hours ago













1












1








1


1



$begingroup$


How can I shoot a bullet in three-dimensional space in such a way that its path diverges a bit, randomly, from the direction in which the gun is pointed?



I know I have to use the Quaternions, but I don't know how exactly.



Three-dimensional possible directions



Should I convert Quaternion to EulerAngles



Quaternion randomRotation = Random.rotation; 
Vector3 inEuler = randomRotation.eulerAngles;


or is there a fairer / nicer way to do it?










share|improve this question









New contributor




EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




How can I shoot a bullet in three-dimensional space in such a way that its path diverges a bit, randomly, from the direction in which the gun is pointed?



I know I have to use the Quaternions, but I don't know how exactly.



Three-dimensional possible directions



Should I convert Quaternion to EulerAngles



Quaternion randomRotation = Random.rotation; 
Vector3 inEuler = randomRotation.eulerAngles;


or is there a fairer / nicer way to do it?







unity c#






share|improve this question









New contributor




EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 10 hours ago









Alexandre Vaillancourt

12.8k114149




12.8k114149






New contributor




EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 15 hours ago









EIRU.EIRU.

85




85




New contributor




EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






EIRU. is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











  • $begingroup$
    A quick search reveals that "bullet spread" seems to be an invention of video games developers. I formalized what you seemed to be after.
    $endgroup$
    – Alexandre Vaillancourt
    10 hours ago
















  • $begingroup$
    A quick search reveals that "bullet spread" seems to be an invention of video games developers. I formalized what you seemed to be after.
    $endgroup$
    – Alexandre Vaillancourt
    10 hours ago















$begingroup$
A quick search reveals that "bullet spread" seems to be an invention of video games developers. I formalized what you seemed to be after.
$endgroup$
– Alexandre Vaillancourt
10 hours ago




$begingroup$
A quick search reveals that "bullet spread" seems to be an invention of video games developers. I formalized what you seemed to be after.
$endgroup$
– Alexandre Vaillancourt
10 hours ago










1 Answer
1






active

oldest

votes


















4












$begingroup$


Should I convert Quaternion to EulerAngles




No, going to EulerAngles makes most things worse.



Try something like this instead:



Vector3 PickFiringDirection(Vector3 muzzleForward, float spreadRadius) 
Vector3 candidate = Random.insideUnitSphere * spreadRadius + muzzleForward;
return candidate.normalized;



Here we pick a random vector offset to add to the end of our nominal shooting direction, then normalize it so the result is still a unit vector.



There are more ways to pick a random vector in-line with our shooting direction or only slightly deviating from it than there are to pick a highly perpendicular offset, so this will give a distribution where most shots go toward the middle of the cone, and outliers hitting the edges of the cone are more rare.



Your spreadRadius is roughly the radius of the cone 1 unit from the muzzle, or roughly Mathf.Tan(Mathf.Deg2Rad * angle/2f) where angle is the divergence between opposite sides of the cone.






share|improve this answer









$endgroup$













    Your Answer





    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
    );
    );
    , "mathjax-editing");

    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "53"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );






    EIRU. is a new contributor. Be nice, and check out our Code of Conduct.









    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgamedev.stackexchange.com%2fquestions%2f169893%2fhow-do-i-implement-bullet-spread-in-three-dimensional-space%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    4












    $begingroup$


    Should I convert Quaternion to EulerAngles




    No, going to EulerAngles makes most things worse.



    Try something like this instead:



    Vector3 PickFiringDirection(Vector3 muzzleForward, float spreadRadius) 
    Vector3 candidate = Random.insideUnitSphere * spreadRadius + muzzleForward;
    return candidate.normalized;



    Here we pick a random vector offset to add to the end of our nominal shooting direction, then normalize it so the result is still a unit vector.



    There are more ways to pick a random vector in-line with our shooting direction or only slightly deviating from it than there are to pick a highly perpendicular offset, so this will give a distribution where most shots go toward the middle of the cone, and outliers hitting the edges of the cone are more rare.



    Your spreadRadius is roughly the radius of the cone 1 unit from the muzzle, or roughly Mathf.Tan(Mathf.Deg2Rad * angle/2f) where angle is the divergence between opposite sides of the cone.






    share|improve this answer









    $endgroup$

















      4












      $begingroup$


      Should I convert Quaternion to EulerAngles




      No, going to EulerAngles makes most things worse.



      Try something like this instead:



      Vector3 PickFiringDirection(Vector3 muzzleForward, float spreadRadius) 
      Vector3 candidate = Random.insideUnitSphere * spreadRadius + muzzleForward;
      return candidate.normalized;



      Here we pick a random vector offset to add to the end of our nominal shooting direction, then normalize it so the result is still a unit vector.



      There are more ways to pick a random vector in-line with our shooting direction or only slightly deviating from it than there are to pick a highly perpendicular offset, so this will give a distribution where most shots go toward the middle of the cone, and outliers hitting the edges of the cone are more rare.



      Your spreadRadius is roughly the radius of the cone 1 unit from the muzzle, or roughly Mathf.Tan(Mathf.Deg2Rad * angle/2f) where angle is the divergence between opposite sides of the cone.






      share|improve this answer









      $endgroup$















        4












        4








        4





        $begingroup$


        Should I convert Quaternion to EulerAngles




        No, going to EulerAngles makes most things worse.



        Try something like this instead:



        Vector3 PickFiringDirection(Vector3 muzzleForward, float spreadRadius) 
        Vector3 candidate = Random.insideUnitSphere * spreadRadius + muzzleForward;
        return candidate.normalized;



        Here we pick a random vector offset to add to the end of our nominal shooting direction, then normalize it so the result is still a unit vector.



        There are more ways to pick a random vector in-line with our shooting direction or only slightly deviating from it than there are to pick a highly perpendicular offset, so this will give a distribution where most shots go toward the middle of the cone, and outliers hitting the edges of the cone are more rare.



        Your spreadRadius is roughly the radius of the cone 1 unit from the muzzle, or roughly Mathf.Tan(Mathf.Deg2Rad * angle/2f) where angle is the divergence between opposite sides of the cone.






        share|improve this answer









        $endgroup$




        Should I convert Quaternion to EulerAngles




        No, going to EulerAngles makes most things worse.



        Try something like this instead:



        Vector3 PickFiringDirection(Vector3 muzzleForward, float spreadRadius) 
        Vector3 candidate = Random.insideUnitSphere * spreadRadius + muzzleForward;
        return candidate.normalized;



        Here we pick a random vector offset to add to the end of our nominal shooting direction, then normalize it so the result is still a unit vector.



        There are more ways to pick a random vector in-line with our shooting direction or only slightly deviating from it than there are to pick a highly perpendicular offset, so this will give a distribution where most shots go toward the middle of the cone, and outliers hitting the edges of the cone are more rare.



        Your spreadRadius is roughly the radius of the cone 1 unit from the muzzle, or roughly Mathf.Tan(Mathf.Deg2Rad * angle/2f) where angle is the divergence between opposite sides of the cone.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 13 hours ago









        DMGregoryDMGregory

        64.8k16115180




        64.8k16115180




















            EIRU. is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            EIRU. is a new contributor. Be nice, and check out our Code of Conduct.












            EIRU. is a new contributor. Be nice, and check out our Code of Conduct.











            EIRU. is a new contributor. Be nice, and check out our Code of Conduct.














            Thanks for contributing an answer to Game Development Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgamedev.stackexchange.com%2fquestions%2f169893%2fhow-do-i-implement-bullet-spread-in-three-dimensional-space%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Reverse int within the 32-bit signed integer range: [−2^31, 2^31 − 1]Combining two 32-bit integers into one 64-bit integerDetermine if an int is within rangeLossy packing 32 bit integer to 16 bitComputing the square root of a 64-bit integerKeeping integer addition within boundsSafe multiplication of two 64-bit signed integersLeetcode 10: Regular Expression MatchingSigned integer-to-ascii x86_64 assembler macroReverse the digits of an Integer“Add two numbers given in reverse order from a linked list”

            Category:Fedor von Bock Media in category "Fedor von Bock"Navigation menuUpload mediaISNI: 0000 0000 5511 3417VIAF ID: 24712551GND ID: 119294796Library of Congress authority ID: n96068363BnF ID: 12534305fSUDOC authorities ID: 034604189Open Library ID: OL338253ANKCR AUT ID: jn19990000869National Library of Israel ID: 000514068National Thesaurus for Author Names ID: 341574317ReasonatorScholiaStatistics

            Kiel Indholdsfortegnelse Historie | Transport og færgeforbindelser | Sejlsport og anden sport | Kultur | Kendte personer fra Kiel | Noter | Litteratur | Eksterne henvisninger | Navigationsmenuwww.kiel.de54°19′31″N 10°8′26″Ø / 54.32528°N 10.14056°Ø / 54.32528; 10.14056Oberbürgermeister Dr. Ulf Kämpferwww.statistik-nord.deDen danske Stats StatistikKiels hjemmesiderrrWorldCat312794080n790547494030481-4