How can I move an object between two positions, while it is on a rotating platform?
What I'm trying to do is create a hazard for the player that moves between two point back and forth on a gameboard. The player is a marble, and you move it by tilting the game board. I have placed stationary hazards that work fine, but once I add a moving hazard, it doesn't seem to work well.
I tried to use transform.position already, but the moving hazard doesn't stick to the board, it floats in space.
So I tried using translate, and it "sticks" to the board, but other bugs happen, such as when I tilt the gameboard the hazard becomes stuck, or moves outside its zone on the board.
This is the code that I'm using for that hazard so far
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class MovingHazard : MonoBehaviour
 {
 
     public float z_max = 1F; //set the max offset from original point
     public float rotationspeed = 2.5F;
 
     private int i;
     private GameObject gameboard;
     private float z_offset; //represents how far hazard is from original position
     private float z;
     private float direction = 1.0F; //1 for up -1 for down
     
     Vector3 starting_pos = new Vector3();
     Quaternion gameboard_rotation; //make quaternion variable for the grounds rotation value
 
     // Use this for initialization
     void Start ()
 
     {
         gameboard = GameObject.FindWithTag("Ground"); //set variable to hold the grounds object information
         starting_pos = transform.position; //starting position of the moving hazard
         
     }
     
     // Update is called once per frame
     void FixedUpdate ()
     {
         gameboard_rotation = gameboard.transform.rotation; //the value of the gameboards rotation
         
         z_offset = transform.position.z - starting_pos.z; //take displacement of current position w.r.t starting position
         if(Mathf.Abs(z_offset) >= z_max) //if the current position of the hazard is past the max offset from original position in either direction
         {
             direction = direction * -1.0F; //change the direction of the translation. Everytime it reaches the max point, the direction will reverse
         }
         
         objectmove();
     }
 
     void objectmove()
     {
 
         transform.rotation = Quaternion.Slerp(transform.rotation, gameboard_rotation, Time.deltaTime * rotationspeed); //use the hazards current rotation and rotate it to equal the gameboards rotation. Probably inefficient but whatever
 
         transform.Translate(0, 0, direction * .05F); //used to translate the object in certain direction while staying on gameboards axis. Probably voodoo magic, don't know why.
             
     }
 
 }
 
Your answer
 
 
             Follow this Question
Related Questions
Moving walls in multiple places 1 Answer
Can someone help me rewriting my script from transform.position to transform.Translate? 1 Answer
Moving object between points 1 Answer
Limit movement to just forward/backward and left/right 0 Answers
Keep the distance of one object relative to another while changing its size 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                