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.
This code is working perfectly if I add any GameObject like Cube from Unity, however not working for Blender objects.
Here is my code.
#pragma strict
var sensitivityX:float = 15;
var sensitivityY:float = 15;
var referenceCamera:Transform;
function Start() {
initialColor = renderer.material.color;
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;
}
}
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 );
}
}
}
}
Thanks Regards,
Ganesh Prakhya