- Home /
Question by
Jens Rasch · Feb 21, 2013 at 01:08 AM ·
gravityjitterplanet
Why do the characters jitter at some places?
I created
http://volksglauben.net46.net/test/Weltkugel/Weltkugel.html (Use WASD to rotate, SCROLLUP/DOWN to zoom)
using this script for characters to walk around the planet
using UnityEngine;
using System.Collections;
public class OrbitPlanet : MonoBehaviour
{
public float rotationSpeed = 120.0f;
public float translationSpeed = 10.0f;
public float height = 0.0f; //height from ground level
private Transform centre; //transform for planet
private float radius; //calculated radius from collider
public SphereCollider planet; //collider for planet
void Start ()
{
//consider scale applied to planet transform (assuming uniform, just pick one)
radius = planet.radius * planet.transform.localScale.y;
centre = planet.transform;
//starting position at north pole
transform.position = centre.position + new Vector3(0,radius+height,0);
}
void Update ()
{
//translate based on input
//float inputMag = Input.GetAxis("Vertical")*translationSpeed*Time.deltaTime;
float inputMag = 2*translationSpeed*Time.deltaTime;
transform.position += transform.forward * inputMag;
//snap position to radius + height (could also use raycasts)
Vector3 targetPosition = transform.position - centre.position;
float ratio = (radius + height) / targetPosition.magnitude;
targetPosition.Scale( new Vector3(ratio, ratio, ratio) );
transform.position = targetPosition + centre.position;
//calculate planet surface normal
Vector3 surfaceNormal = transform.position - centre.position;
surfaceNormal.Normalize();
//GameObject's heading
//float headingDeltaAngle = Input.GetAxis("Horizontal") * Time.deltaTime * rotationSpeed;
float headingDeltaAngle = Random.Range(-1.0F, 1.0F) * Time.deltaTime * rotationSpeed;
Quaternion headingDelta = Quaternion.AngleAxis(headingDeltaAngle, transform.up);
//align with surface normal
transform.rotation = Quaternion.FromToRotation( transform.up, surfaceNormal) * transform.rotation;
//apply heading rotation
transform.rotation = headingDelta * transform.rotation;
}
}
Why do the characters jitter at some places?
Comment
Your answer
Follow this Question
Related Questions
planet gravity 2 Answers
Walking & Gravity 2 Answers
Planetary physics for player 1 Answer
Multiple Planets with their own gravitational pull 1 Answer
How to make a character walk on a 3D cube planet and a long 3D cube planet using gravity? 2 Answers