- Home /
Question by
Xarathorn · Nov 22, 2013 at 03:41 AM ·
javascriptobjectmouserotateorientation
Making a ball move towards the mouse?
I am trying to make a simple ball game where you roll around, similar to the one here, but 3D. I am attempting to make the camera hover slightly behind the ball as in Skyrim, but I cannot figure out how to make the ball move towards the cursor. The current issue is that I'm using Velocity3.direction, but I'm not sure how else I'd have the ball move. How would I do this? Thanks.
Here's the camera's code:
#pragma strict
var follow : Transform;
var myPos : Vector3;
var horizontalSpeed : float = 2.0;
function LateUpdate() {
transform.position = follow.position + myPos;
var h : float = horizontalSpeed * Input.GetAxis ("Mouse X");
transform.Rotate (0, h, 0);
}
And here's the code for the ball:
#pragma strict
//Jumping stuff
var world = "01";
var speed : float = 10;
var jumpHeight = 8;
private var isFalling = false;
//Coins
private var coins = 0;
var coinsToWin = 1;
//Levels
var nextLevel = "0102";
function Update ()
{
//Handle ball rotation
//-Basic movement
if (Input.GetKey("w"))
{rigidbody.AddForce(Vector3.forward * speed);}
if (Input.GetKey("s"))
{rigidbody.AddForce(0,0,1*(-speed));}
if (Input.GetKey("a"))
{rigidbody.AddForce(Vector3.left*speed);}
if (Input.GetKey("d"))
{rigidbody.AddForce(Vector3.right * speed);}
//-Jumping
if (world != "01" && world != "02")
{
if (Input.GetKeyDown(KeyCode.Space) && isFalling == false)
{rigidbody.velocity.y = jumpHeight;}
}
isFalling = true;
//Coin Winning? WORK ON ACTUALLY MAKING COINS DO STUFF
if (coins >= coinsToWin)
{Application.LoadLevel(nextLevel);}
}
//Checks to make sure you're on ground before jumping
function OnCollisionStay ()
{
isFalling = false;
}
Comment
Answer by iwaldrop · Nov 22, 2013 at 07:54 AM
You want the world point of the cursor.
Vector3 cursorPosition = camera.ScreenToWorldPoint( new Vector3(Input.mousePosition.x, Input.mousePosition.y, camera.nearClipPlane));
Then you need the direction.
Vector3 direction = transform.position - cursorPosition;
Then you need to move the ball.
transform.Translate(direction.normalize);
Putting it all together, on the ball:
void Update()
{
Vector3 cursorPosition = camera.ScreenToWorldPoint( new Vector3(Input.mousePosition.x, Input.mousePosition.y, camera.nearClipPlane));
Vector3 direction = transform.position - cursorPosition;
transform.Translate(direction.normalize);
}
If I have the direction wrong, then flip the values around (i.e. subtract transform position from cursor position).