- Home /
Rotating Blender object using mouse click
Dear all,
Apologies if this is a duplicated post. I just started on Unity.
I imported a Blender object and trying to rotate on x and y axis using mouse click. Essentially user click and hold the left button and can rotate the object horizontally and vertically. I manage to make it work with rotation however the rotation happening anywhere in the screen.
I want the rotation should happen only if user clicks and holds on the object.
Here is my code.
#pragma strict
//How quickly to rotate the object.
var sensitivityX:float = 15;
var sensitivityY:float = 15;
//Camera that acts as a point of view to rotate the object relative to.
var referenceCamera:Transform;
//The script in Start() is executed before Update(), so we can use it to
//doublecheck our variables have valid values before we try to run the script in Update().
function Start() {
Debug.Log("CupMovementWithMouseClick Start");
initialColor = renderer.material.color;
//Ensure the referenceCamera variable has a valid value before letting this script run.
//If the user didn't set a camera manually, try to automatically assign the scene's Main Camera.
if (!referenceCamera) {
if (!Camera.main) {
Debug.LogError("No Camera with 'Main Camera' as its tag was found. Please either assign a Camera to this script, or change a Camera's tag to 'Main Camera'.");
Destroy(this);
return;
}
referenceCamera = Camera.main.transform;
}
}
//Update() is called once every frame, and should be used to run script that
//should be doing something constantly. In this case, we potentially want to
//rotate the object constantly if the user is always moving the mouse.
function Update () {
Debug.Log("CupMovementWithMouseClick Update");
//Get how far the mouse has moved by using the Input.GetAxis().
var rotationX:float = Input.GetAxis("Mouse X") * sensitivityX;
var rotationY:float = Input.GetAxis("Mouse Y") * sensitivityY;
//Rotate the object around the camera's "up" axis, and the camera's "right" axis.
// Rotate when left mouse button hold.
if(Input.GetButton ("Fire1")){
Debug.Log("CupMovementWithMouseClick Fire1");
// Also only rotate when mouse actually touches the object.
if ( Input.GetMouseButtonDown(0)){
Debug.Log("CLICKED");
var hit:RaycastHit;
var ray:Ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, hit, 100.0)) {
Debug.Log("HIT!!");
transform.RotateAroundLocal( referenceCamera.up , -Mathf.Deg2Rad * rotationX );
transform.RotateAroundLocal( referenceCamera.right , Mathf.Deg2Rad * rotationY );
}
}
}
}
Answer by supernat · Sep 26, 2013 at 04:59 PM
I'm on mobile right now, so I can't give exact references, but you need to check the "hit" Ray object to see if it is the blender object. I believe you can directly access the object's Tag value from the hit object and compare with the Tag value you set for that object in the scene.