- Home /
MOVE GameObject to point A to B and to B to A
Hello, try to move object "blinds" to point A to B and then to B to A
my code work for A to B (slowly) but dont work for B to A (teleportation)
do you have anny issue ? my code here ↓↓
using UnityEngine;
using System.Collections;
//using SimpleJSON;
public class blind_move : MonoBehaviour
{
public GameObject blinds;
private Vector3 Open;
public Vector3 Close;
public float distance = 5f;
public float speed = 5;
public float currentDistance;
private bool keyHit;
private bool keyHit2;
void Start()
{
Open = blinds.transform.position;
Close = blinds.transform.position + Vector3.down * distance;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.U))
{
keyHit = true;
}
if (keyHit == true)
{
currentDistance += Time.deltaTime;
if (currentDistance >= speed)
{
currentDistance = speed;
}
float Perc = currentDistance / speed;
blinds.transform.position = Vector3.Lerp(Open, Close, Perc);
}
if (Input.GetKeyDown(KeyCode.D))
{
keyHit2 = true;
}
if (keyHit2 == true)
{
currentDistance += Time.deltaTime;
if (currentDistance <= speed)
{
currentDistance = speed;
}
float Perc = currentDistance / speed;
blinds.transform.position = Vector3.Lerp(Close, Open, Perc);
}
}
}
Answer by misher · Feb 11, 2019 at 10:47 AM
You better create 2 empty game objects (points A and B) and use them as references and you also can physically see them in the Editor. Your object can be in 3 states:
moving to A
moving to B
stay where it is.
Depending on which state it is, you do:
Smoothly moving to the A
Smoothly moving to the B
Do nothing
Code for moving:
void Update() {
float step = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, target.position, step);
}
Assuming this script run on the object which you want to move. Target transform should be changed dynamically, and it is A or B transform references.
Answer by Warzezo · Feb 21, 2019 at 02:04 PM
Thanks for reply, i found my problem and fix it
For people who follow this question
my solution :
using System.Collections; using System.Collections.Generic; using UnityEngine; using SimpleJSON;
public class Blind_Movement_Test : MonoBehaviour {
public Vector3 pointB;
public Vector3 pointA;
public float maxSpeed = 1;
public bool keyHit = false;
public bool keyHit2 = false;
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.L))
{
keyHit = true;
}
if (keyHit == true)
{
keyHit2 = false;
var change = maxSpeed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, pointB, change);
}
if (Input.GetKey(KeyCode.M))
{
keyHit2 = true;
}
if (keyHit2 == true)
{
keyHit = false;
var change2 = maxSpeed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, pointA, change2);
}
}
For pointB and pointA defined in inspector (no work for double)
Cdt Warz.
Your answer
Follow this Question
Related Questions
Trouble converting transform.position to C# 1 Answer
Lerp not working 1 Answer
How do I change one value of a vector? 2 Answers
Vector3.Lerp stick halfway 2 Answers