I am trying to create a behaviour through events similar to the sticker behaviour, but with 3D sprite sticking to a cube as dice faces.
Up to the last version I was trying to make trigonometric complex calculus to get forwart right and up normals, as in unity, but with the 5 269 they have added this function natively, so the positioning seems to be working.
However trying to make the 3D sprite orientation stick to the one of the face is not really working, particularly as the dice move on the Z axis.
So here are my events (sorry I am new here, and I can only post one picture, so I post the code):
(pseudo-code)
For each object Dice
Actions:
Dice.Variable(FaceOrientation3D.Forward.DirectionX) = Dice.Object3D::ForwardX()
Dice.Variable(FaceOrientation3D.Forward.DirectionY) = Dice.Object3D::ForwardY()
Dice.Variable(FaceOrientation3D.Forward.DirectionZ) = Dice.Object3D::ForwardZ()
Dice.Variable(FaceOrientation3D.Right.DirectionX) = Dice.Object3D::RightX()
Dice.Variable(FaceOrientation3D.Right.DirectionY) = Dice.Object3D::RightY()
Dice.Variable(FaceOrientation3D.Right.DirectionZ) = Dice.Object3D::RightZ()
Dice.Variable(FaceOrientation3D.Up.DirectionX) = Dice.Object3D::UpX()
Dice.Variable(FaceOrientation3D.Up.DirectionY) = Dice.Object3D::UpY()
Dice.Variable(FaceOrientation3D.Up.DirectionZ) = Dice.Object3D::UpZ()
Actions:
Dice.Variable(FaceOrientation3D.Forward.AngleX) = Dice.Object3D::RotationX()
Dice.Variable(FaceOrientation3D.Forward.AngleY) = Dice.Object3D::RotationY()
Dice.Variable(FaceOrientation3D.Forward.AngleZ) = Dice.Angle()
Dice.Variable(FaceOrientation3D.Right.AngleX) = Dice.Variable(FaceOrientation3D.Forward.AngleX)
Dice.Variable(FaceOrientation3D.Right.AngleY) = Dice.Variable(FaceOrientation3D.Forward.AngleY) + 90
Dice.Variable(FaceOrientation3D.Right.AngleZ) = Dice.Variable(FaceOrientation3D.Forward.AngleZ)
Dice.Variable(FaceOrientation3D.Up.AngleX) = Dice.Variable(FaceOrientation3D.Forward.AngleX) + 90
Dice.Variable(FaceOrientation3D.Up.AngleY) = Dice.Variable(FaceOrientation3D.Forward.AngleY)
Dice.Variable(FaceOrientation3D.Up.AngleZ) = Dice.Variable(FaceOrientation3D.Forward.AngleZ)
Actions:
Dice.Variable(FaceOrientation3D.Forward.PositionCenterX) = Dice.CenterX() + Dice.Variable(FaceOrientation3D.Forward.DirectionX) * Dice.Object3D::Depth() * 0.501
Dice.Variable(FaceOrientation3D.Forward.PositionCenterY) = Dice.CenterY() + Dice.Variable(FaceOrientation3D.Forward.DirectionY) * Dice.Object3D::Depth() * 0.501
Dice.Variable(FaceOrientation3D.Forward.PositionCenterZ) = Dice.Object3D::CenterZ() + Dice.Variable(FaceOrientation3D.Forward.DirectionZ) * Dice.Object3D::Depth() * 0.501
Dice.Variable(FaceOrientation3D.Right.PositionCenterX) = Dice.CenterX() + Dice.Variable(FaceOrientation3D.Right.DirectionX) * Dice.Width() * 0.501
Dice.Variable(FaceOrientation3D.Right.PositionCenterY) = Dice.CenterY() + Dice.Variable(FaceOrientation3D.Right.DirectionY) * Dice.Width() * 0.501
Dice.Variable(FaceOrientation3D.Right.PositionCenterZ) = Dice.Object3D::CenterZ() + Dice.Variable(FaceOrientation3D.Right.DirectionZ) * Dice.Width() * 0.501
Dice.Variable(FaceOrientation3D.Up.PositionCenterX) = Dice.CenterX() + Dice.Variable(FaceOrientation3D.Up.DirectionX) * Dice.Height() * 0.501
Dice.Variable(FaceOrientation3D.Up.PositionCenterY) = Dice.CenterY() + Dice.Variable(FaceOrientation3D.Up.DirectionY) * Dice.Height() * 0.501
Dice.Variable(FaceOrientation3D.Up.PositionCenterZ) = Dice.Object3D::CenterZ() + Dice.Variable(FaceOrientation3D.Up.DirectionZ) * Dice.Height() * 0.501
Condition:
Face_sprite_3D.FaceNumber = 1
Actions:
Face_sprite_3D.Object3D::SetCenterZ( Dice.FaceOrientation3D.Forward.PositionCenterZ )
Face_sprite_3D.SetCenter(
Dice.FaceOrientation3D.Forward.PositionCenterX,
Dice.FaceOrientation3D.Forward.PositionCenterY
)
Face_sprite_3D.Object3D::SetRotationX( Dice.FaceOrientation3D.Forward.AngleX )
Face_sprite_3D.Object3D::SetRotationY( Dice.FaceOrientation3D.Forward.AngleY )
Face_sprite_3D.SetAngle( Dice.FaceOrientation3D.Forward.AngleZ )
Face_sprite_3D.Resizable::SetSize( Dice.Width(), Dice.Height() )
Condition:
Face_sprite_3D.FaceNumber = 2
Actions:
Face_sprite_3D.Object3D::SetCenterZ( Dice.FaceOrientation3D.Right.PositionCenterZ )
Face_sprite_3D.SetCenter(
Dice.FaceOrientation3D.Right.PositionCenterX,
Dice.FaceOrientation3D.Right.PositionCenterY
)
Face_sprite_3D.Object3D::SetRotationX( Dice.FaceOrientation3D.Right.AngleX )
Face_sprite_3D.Object3D::SetRotationY( Dice.FaceOrientation3D.Right.AngleY )
Face_sprite_3D.SetAngle( Dice.FaceOrientation3D.Right.AngleZ )
Face_sprite_3D.Resizable::SetSize( Dice.Height(), Dice.Object3D::Depth() )
Condition:
Face_sprite_3D.Variable(FaceNumber) = 3
Actions:
Face_sprite_3D.Object3D::SetCenterZ( Dice.Variable(FaceOrientation3D.Up.PositionCenterZ) )
Face_sprite_3D.SetCenter( Dice.Variable(FaceOrientation3D.Up.PositionCenterX),
Dice.Variable(FaceOrientation3D.Up.PositionCenterY) )
Face_sprite_3D.Object3D::SetRotationX( Dice.Variable(FaceOrientation3D.Up.AngleX) )
Face_sprite_3D.Object3D::SetRotationY( Dice.Variable(FaceOrientation3D.Up.AngleY) )
Face_sprite_3D.SetAngle( Dice.Variable(FaceOrientation3D.Up.AngleZ) )
Face_sprite_3D.Resizable::SetSize( Dice.Object3D::Depth(), Dice.Width() )
(exact Event code:)
{"000kind":"GDEVELOP_EventsAndInstructions_CLIPBOARD_KIND-jsBdHbLy912y8Rc","content":{"eventsList":[{"type":"BuiltinCommonInstructions::ForEach","object":"Dice","conditions":[],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.DirectionX","=","Dice.Object3D::ForwardX()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.DirectionY","=","Dice.Object3D::ForwardY()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.DirectionZ","=","Dice.Object3D::ForwardZ()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.DirectionX","=","Dice.Object3D::RightX()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.DirectionY","=","Dice.Object3D::RightY()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.DirectionZ","=","Dice.Object3D::RightZ()\n"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.DirectionX","=","Dice.Object3D::UpX()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.DirectionY","=","Dice.Object3D::UpY()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.DirectionZ","=","Dice.Object3D::UpZ()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.AngleX","=","Dice.Object3D::RotationX()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.AngleY","=","Dice.Object3D::RotationY()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.AngleZ","=","Dice.Angle()"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.AngleX","=","Dice.FaceOrientation3D.Forward.AngleX"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.AngleY","=","Dice.FaceOrientation3D.Forward.AngleY+90"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.AngleZ","=","Dice.FaceOrientation3D.Forward.AngleZ"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.AngleX","=","Dice.FaceOrientation3D.Forward.AngleX+90"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.AngleY","=","Dice.FaceOrientation3D.Forward.AngleY"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.AngleZ","=","Dice.FaceOrientation3D.Forward.AngleZ"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.PositionCenterX","=","Dice.CenterX() + Dice.FaceOrientation3D.Forward.DirectionX * Dice.Object3D::Depth() * 0.501"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.PositionCenterY","=","Dice.CenterY() + Dice.FaceOrientation3D.Forward.DirectionY * Dice.Object3D::Depth() * 0.501"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Forward.PositionCenterZ","=","Dice.Object3D::CenterZ() + Dice.FaceOrientation3D.Forward.DirectionZ * Dice.Object3D::Depth() * 0.501"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.PositionCenterX","=","Dice.CenterX() + Dice.FaceOrientation3D.Right.DirectionX * Dice.Width() * 0.501"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.PositionCenterY","=","Dice.CenterY() + Dice.FaceOrientation3D.Right.DirectionY * Dice.Width() * 0.501"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Right.PositionCenterZ","=","Dice.Object3D::CenterZ() + Dice.FaceOrientation3D.Right.DirectionZ * Dice.Width() * 0.501"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.PositionCenterX","=","Dice.CenterX() + Dice.FaceOrientation3D.Up.DirectionX * Dice.Height() * 0.501"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.PositionCenterY","=","Dice.CenterY() + Dice.FaceOrientation3D.Up.DirectionY * Dice.Height() * 0.501"]},{"type":{"value":"SetNumberObjectVariable"},"parameters":["Dice","FaceOrientation3D.Up.PositionCenterZ","=","Dice.Object3D::CenterZ() + Dice.FaceOrientation3D.Up.DirectionZ * Dice.Height() * 0.501"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"NumberObjectVariable"},"parameters":["Face_sprite_3D","FaceNumber","=","1"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetCenterZ"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Forward.PositionCenterZ"]},{"type":{"value":"SetCenter"},"parameters":["Face_sprite_3D","=","Dice.FaceOrientation3D.Forward.PositionCenterX","=","Dice.FaceOrientation3D.Forward.PositionCenterY"]},{"type":{"value":"Scene3D::Base3DBehavior::SetRotationX"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Forward.AngleX"]},{"type":{"value":"Scene3D::Base3DBehavior::SetRotationY"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Forward.AngleY"]},{"type":{"value":"SetAngle"},"parameters":["Face_sprite_3D","=","Dice.FaceOrientation3D.Forward.AngleZ"]},{"type":{"value":"ResizableCapability::ResizableBehavior::SetSize"},"parameters":["Face_sprite_3D","Resizable","Dice.Width()","Dice.Height()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"NumberObjectVariable"},"parameters":["Face_sprite_3D","FaceNumber","=","2"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetCenterZ"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Right.PositionCenterZ"]},{"type":{"value":"SetCenter"},"parameters":["Face_sprite_3D","=","Dice.FaceOrientation3D.Right.PositionCenterX","=","Dice.FaceOrientation3D.Right.PositionCenterY"]},{"type":{"value":"Scene3D::Base3DBehavior::SetRotationX"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Right.AngleX"]},{"type":{"value":"Scene3D::Base3DBehavior::SetRotationY"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Right.AngleY"]},{"type":{"value":"SetAngle"},"parameters":["Face_sprite_3D","=","Dice.FaceOrientation3D.Right.AngleZ"]},{"type":{"value":"ResizableCapability::ResizableBehavior::SetSize"},"parameters":["Face_sprite_3D","Resizable","Dice.Height()","Dice.Object3D::Depth()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"NumberObjectVariable"},"parameters":["Face_sprite_3D","FaceNumber","=","3"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetCenterZ"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Up.PositionCenterZ"]},{"type":{"value":"SetCenter"},"parameters":["Face_sprite_3D","=","Dice.FaceOrientation3D.Up.PositionCenterX","=","Dice.FaceOrientation3D.Up.PositionCenterY"]},{"type":{"value":"Scene3D::Base3DBehavior::SetRotationX"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Up.AngleX"]},{"type":{"value":"Scene3D::Base3DBehavior::SetRotationY"},"parameters":["Face_sprite_3D","Object3D","=","Dice.FaceOrientation3D.Up.AngleY"]},{"type":{"value":"SetAngle"},"parameters":["Face_sprite_3D","=","Dice.FaceOrientation3D.Up.AngleZ"]},{"type":{"value":"ResizableCapability::ResizableBehavior::SetSize"},"parameters":["Face_sprite_3D","Resizable","Dice.Object3D::Depth()","Dice.Width()"]}]}],"eventsCount":4,"actionsList":[],"actionsCount":0,"conditionsList":[],"conditionsCount":0}}
And on the game results it is possible to see that one of the faces have a weird rotation on itself instead of following the cube:
This seems to happens only when cube move along Z axis or rotate on all axis, I am not sure which one.
So if anyone could help, I would be glad.
Thank you very much in advance people.
