- Home /
How can you grab an object on the screen and shake it?
Hello. I'm trying to simulate someone rolling dice, or die technically being as it is singular. The Game Master script will create a die in the camera's view, the position of which is a child of the camera called "diceHolder." The die has a rigidbody attached to it but since it is suspended in the air, I froze it's x, y, and z axis until the mouse is pressed.
private Vector3 screenPoint;
private Vector3 offset;
void OnMouseUp() {
rigidbody.AddForce (Vector3.forward * 500);
}
void OnMouseDown()
{
this.GetComponent<Rigidbody> ().constraints = RigidbodyConstraints.None;
screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
}
void OnMouseDrag()
{
Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);
transform.position = curPosition;
}
As you can see, I added a force to make it head towards the board. When the mouse is initially pressed on the object, it releases the constraints and grabs the item. From there, it drags the item on the screen. I want to be able to add a shaking effect. So if you drag it to the right it starts spinning on one axis and if you drag it up it spins along another axis. I would also like or hope I'd be able to drag it up and release and depending how fast it was dragged, it determines how far it would release. I'm not very good with physics programming :) If there is a better way to create the dice or achieve what I am asking, please leave an answer below. I'm open for suggestions, but I do want it to look somewhat natural. I'm open for criticism as well!