Reading the face of Dice?

I’d look at the orientation of the die when it came to rest instead of trying to use box component sensors or something.

Something along the lines of converting the rotation into a value and comparing that against each of a set of ‘ideal orientations’ in an array. This way you can make a single parent blueprint for all dies with the logic in there, and in subclasses you just have to change the contents of the array and the static mesh.

How to convert the rotation into that value / what to store in the array is the only tricky bit. I’d have to play around to be sure but probably use GetUpVector on the actor rotation. You’d compare the length of the result of subtracting that from each element in the array, and for a D6 you’d have 100, 010, 001, etc… in the array. The face that is ‘up’ is the one that has the smallest distance to the ideal up vector.

Probably also worth having a timer, so if the die is still moving after X time you could call a ‘reroll’. Ditto if the distance to any of the ‘ideal orientations’ is too great, which would mean that it landed in a crack or something, making it up on an edge or vertex.

Cheers,
Michael Noland