- Home /
C# How to rotate cube X/Z coor. for top-down game?
Note, I have looked many unity answers on this site and more, but have found no solution to this problem
I have looked almost everywhere, I can't find a single one that works. I tried to make one but it also doesn't work. Does anyone know how to make a simple one?
Code:
using UnityEngine;
using System.Collections;
public class FollowMouse : MonoBehaviour {
Camera cam;
void Update () {
Vector2 MS = Camera.main.ScreenToWorldPoint(Input.mousePosition);
float Compare = Vector3.Angle(transform.position, MS);
transform.LookAt(new Vector3(MS.x, 0, MS.y));
Vector3 mousePos = Input.mousePosition;
Vector3 worldPos = Camera.main.WorldToScreenPoint (mousePos);
transform.LookAt(worldPos);
}
}
Do you mean to rotate a cube left and right as if you were looking down from the top?
Yeah, like the cube would face the mouse, rotate accordingly and it would have a top-down view.
Answer by NorthernVisionStudio · Jul 05, 2014 at 03:12 PM
Hi Epicman,
In hopes of not being rude to Mr. Lukasik, but still give you a simple solution, I made a test project for you. Click here to download project zip
And, here's the code anyway:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
Vector3 mousePos = Input.mousePosition;
mousePos.z = Camera.main.nearClipPlane;
Vector3 MS = Camera.main.ScreenToWorldPoint(mousePos);
MS.y = transform.position.y;
transform.LookAt(MS);
}
}
Good job sir, thanks for sharing that. There is never too when it comes to useful code
Answer by andrew-lukasik · Jul 05, 2014 at 12:24 PM
Informed by this method: http://answers.unity3d.com/questions/269760/ray-finding-out-x-and-z-coordinates-where-it-inter.html# (which removes need of raycasts against world geometry)
You can write it like this
public Transform rotatedTransform;
private Ray ray;
private Plane yZeroPlane;
private float rayDistanceToHit;
Vector3 pointToLookAt;
void Awake () {
if (!rotatedTransform) rotatedTransform = transform;
yZeroPlane = new Plane(Vector3.up, Vector3.zero);
}
void Update () {
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (yZeroPlane.Raycast(ray,out rayDistanceToHit)){
pointToLookAt = ray.GetPoint(rayDistanceToHit);
pointToLookAt.y = rotatedTransform.position.y;
rotatedTransform.LookAt( pointToLookAt );//<< use this line for instant rotations
//rotatedTransform.rotation = Quaternion.Slerp( rotatedTransform.rotation , Quaternion.LookRotation(pointToLookAt-rotatedTransform.position) , 2*Time.deltaTime );//<< use this line for smooth rotations (choose only one line from those two)
}
}
Your answer
Follow this Question
Related Questions
Flip over an object (smooth transition) 3 Answers
C# GameObject Reverses Z Rotation 0 Answers
Change rotation axis when importing from Maya 2 Answers
C# Need Help Refining Ricochet Script 1 Answer
Character Rotation 2 Answers