moving platform problem (waypoint or rotating)

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);

            }

        }

    }

For the shaking, have you tried ticking the boxes to freeze the physics position and rotation on the platform?

My guess for the incline is the LookAt() function, you can’t really guarantee any rotation apart from the forward axis after you call that. Perhaps try xform.up = Vector3.up afterwards?

excuseme i’m quite novice to scripting, can you explain hot to freeze physics position and rotation and also where exactly to put xform.up = Vector3.up ? than again, be patient :slight_smile:

Finally i solved the problem.

(i used the rotating script)

i parented the camera with the platform and uncheked the Moving Platform Enabled checkbox on Character Motor, very simple… three days thrown away :slight_smile: