- Home /
Spawning objects to the surface of a spehere correctly.
Hi. I started off looking on how to rotate a sphere using a mouse click and movement. I have my planet and then created a none-rendering sphere and placed the planet inside of that (larger than the planet gave better control). I then attached this script to both:
using UnityEngine;
using System.Collections;
public class EarthTouchMovement : MonoBehaviour {
bool hasGrabbedPoint = false;
Vector3 grabbedPoint;
void Update ()
{
if (Input.GetMouseButton(0))
{
if(!hasGrabbedPoint)
{
hasGrabbedPoint = true;
grabbedPoint = getTouchedPoint();
}
else
{
Vector3 targetPoint = getTouchedPoint();
Quaternion rot = Quaternion.FromToRotation (grabbedPoint, targetPoint);
transform.localRotation *= rot;
}
}
else
hasGrabbedPoint = false;
}
Vector3 getTouchedPoint()
{
RaycastHit hit;
Physics.Raycast (Camera.main.ScreenPointToRay(Input.mousePosition), out hit);
return transform.InverseTransformPoint(hit.point);
}
}
...a script I found on Unity answers.
I am now looking to spawn an object to the surface of the sphere - but all I can manage to do is spawn it to the very center. Its a simple cube - and I am a super simple instantiate script using:
var thePrefab : GameObject;
function Start (){
var instance : GameObject = Instantiate(thePrefab, transform.position, transform.rotation);
}
That spawns a cube in to the center of the sphere - which is a start :)
Giving it some thought, I need to use Quaternion and work out which is the best way for objects to face on the surface of the sphere. So if I had the center of the sphere and the point at which the user clicks on the sphere...my vector3 would be the raycast (A) position minus the sphere's center (O)? All of the considering the vector 3 up position?
Pseudo code:
Vector3 AMinusO = raycastpoint - sphereCentre;
AMinusO.Normalize();
transform.rotation = Quaternion.LookRotation( Vector3.Cross(AMinusO, Vector3.up), AMinusO)
Any help turning this in to some working code would be greatly appreciated. If you want to make me work even harder for a solution, some pointers to a tutorial or something would be equally appreciated :)
Your answer
Follow this Question
Related Questions
LookRotation and Raycasting 2 Answers
Keeping a CharacterController Perpindicular to the Ground 3 Answers
Need help with rotation 4 Answers
LookRotation Vector3 is Zero, Yet Slerp Still Rotates? 2 Answers
Turret rotation on one axis problems 2 Answers