Hi to all, here again with a new little problem.
I have a simple platform ( a cube with rigidbody ) that must rotate around an object.
I have tried in a very simple way, parent the platform with the object and assign this rotating script to that:
var tr : Transform;
function Update() {
// Spin the object around the world origin at 20 degrees/second.
transform.RotateAround (Vector3.zero, Vector3.up, 0.2 * Time.deltaTime);
}
It works fine, but when i go with my player on that platform it’s shacking so i tried with kinematic on but nothing…
I decided to ry with a waypoint script so i used a script that follows waypoints attached to my platform, now it’s no more shacking but when it reaches every waypoint it becames inclined for a few second and i don’t know why… this is the script: (all my waypoints have a triggered sphere collider whit radious =5)
var waypoints : Transform[];
var waypointRadius : float = 5;
var damping : float = 0.135;
var loop : boolean = true;
var speed : float = 0.045;
var faceHeading : boolean = true;
private var targetHeading : Vector3;
private var currentHeading : Vector3;
private var targetwaypoint : int;
private var xform : Transform;
private var useRigidbody : boolean;
private var rigidmember : Rigidbody;
// Use this for initialization
function Start() {
xform = transform;
currentHeading = xform.forward;
if(waypoints.Length<=0)
{
Debug.Log("No waypoints on "+name);
enabled = false;
}
targetwaypoint = 0;
if(rigidbody!=null)
{
useRigidbody = true;
rigidmember = rigidbody;
}
else
{
useRigidbody = false;
}
}
// calculates a new heading
function FixedUpdate() {
targetHeading = waypoints[targetwaypoint].position - xform.position;
currentHeading = Vector3.Lerp(currentHeading,targetHeading,damping*Time.deltaTime);
}
// moves us along current heading
function Update(){
if(useRigidbody)
rigidmember.velocity = currentHeading * speed;
else
xform.position +=currentHeading * Time.deltaTime * speed;
if(faceHeading)
xform.LookAt(xform.position+currentHeading);
if(Vector3.Distance(xform.position,waypoints[targetwaypoint].position)<=waypointRadius)
{
targetwaypoint++;
if(targetwaypoint>=waypoints.Length)
{
targetwaypoint = 0;
if(!loop)
enabled = false;
}
}
}
// draws red line from waypoint to waypoint
function OnDrawGizmos(){
Gizmos.color = Color.red;
for(var i : int = 0; i< waypoints.Length;i++)
{
var pos : Vector3 = waypoints[i].position;
if(i>0)
{
var prev : Vector3 = waypoints[i-1].position;
Gizmos.DrawLine(prev,pos);
}
}
}