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