I dont remember what language it was but you could do random(1,10) or something like that and it would pick a number between 1 to 10, is there a way to do something like this in gdscript?

+20 votes

+61 votes

`randi()%10+1`

returns an `int`

from 1 to 10

`randf()*10.0+1.0`

returns a `float`

from 1.0 to 10.999999~

`rand_range(1,11)`

returns a `float`

from 1.0 to 10.999999~

`range(1,11)[randi()%range(1,11).size()]`

is a little ugly and less efficient but returns an `int`

from 1 to 10 without you having to do the math yourself (aka the 11+1 part) because all you need to do is set the range()

To get a random integer between 1 and 10, I find it more intuitive to floor the random float in range. More specifically:

floor(rand_range(1, 11))

I'm trying to generate a random between 10-30 (randi()%30+10) but it's giving me a 35. Probably doing it wrong, but can't figure out how to make it right.

This answer has an important error. If you want to produce a real number in the interval [x,y[, in general you use:

```
(randf() * (y-x)) + x.
```

From 1 to 10, you have `randf() * 9 + 1`

. This is because `randf()`

can be 1 as maximum. In this case, you would obtain 9 + 1 = 10. In the case proposed by this answer, `randf() * 11 + 1`

, if by chance `randf()`

turns out to be greater than 0.8 you get something greater than 10. So, there is a 20% chance of having a wrong answer.

randi()%11+1 returns an int from 1 to **11**

If you someone needs a random int between 1 and 10, use:

randi()%**10**+1

+7 votes

As of Godot 3:

`randi() % 20`

returns an int from 0 to 19

`randi() % 20 + 1`

returns an int from 1 to 20

`randf()`

returns a float from 0 to 1

Unfortunately, the older style no longer seems to work.

+4 votes

The following code returns a random number, but it is the **same** number each time the script is executed:

```
var random_value = rand_range(1,10)
```

The following code gives you **different** random numbers each time the script is executed:

```
var random_generator = RandomNumberGenerator.new()
random_generator.randomize()
var random_value = random_generator.randf_range(1,10)
```

https://docs.godotengine.org/en/stable/classes/class_randomnumbergenerator.html

or simply:

```
randomize()
var random_value = rand_range(1,10)
```

+1 vote

I needed a rand_range(a, b) but with integers, also to work with negative numbers. I came up with this function.

```
func randi_range(from, to):
if from > to:
var old_from = from
from = to
to = old_from
return int(floor(rand_range(from , to + 1)))
```

0 votes

You can use key words like randomize for randomizing numbers from 0 to 2^32, rand*range for randomizing an specific range of numbers, for example rand*range(2, 20) will return 2,3,4,5,6...19 or 20. There also at options like randi () or randf but I think those are the more important. I’ll link rand_range since is the specific one in your case: https://docs.godotengine.org/es/stable/getting_started/scripting/c_sharp/c_sharp_differences.html?highlight=Rand_range#random-functions

- All categories
- Engine 20,061
- Projects 2,766
- Gossip 236