- 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
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                