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;
$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.
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#
New contributor
$endgroup$
add a comment |
$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.
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#
New contributor
$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
add a comment |
$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.
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#
New contributor
$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.
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#
unity c#
New contributor
New contributor
edited 10 hours ago
Alexandre Vaillancourt♦
12.8k114149
12.8k114149
New contributor
asked 15 hours ago
EIRU.EIRU.
85
85
New contributor
New contributor
$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
add a comment |
$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
add a comment |
1 Answer
1
active
oldest
votes
$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.
$endgroup$
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
$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.
$endgroup$
add a comment |
$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.
$endgroup$
add a comment |
$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.
$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.
answered 13 hours ago
DMGregory♦DMGregory
64.8k16115180
64.8k16115180
add a comment |
add a comment |
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.
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
$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