2015-10-19 4 views
0

Когда я использую transform.Translate на оси x и z куба, он перемещается в соответствии с нажатием клавиш. Но я хочу, чтобы куб медленно возвращался в исходное положение, когда пользователь перестает нажимать клавиши, а ось по умолчанию равна x = 0, z = 0.Перемещение куба в исходное положение

public float move = 1f; 

void Update() 
{ 
    this.transform.Translate (Input.GetAxis ("Horizontal")/move, 0f,  Input.GetAxis ("Vertical")/move); 
} 

ответ

0

Вы можете использовать Vector3.MoveTowards медленно переместить текущее преобразование к цели или оригинальное преобразование позиции.

private Transform original; 
public float speed = 0.5f; 

void Awake() 
{ 
    original = transform; 
} 

void Update() { 
    float step = speed * Time.deltaTime; 
    transform.position = Vector3.MoveTowards(transform.position, original.position, step); 
} 

Unity3d documention - Vector3.MoveTowards

2

Таким образом, ваш лучший выбор, чтобы сохранить исходное положение

private Vector3 _intialPosition; 
private float _duration = 0.4f; 
private float _startTime; 

void Awake() 
{ 
    _initialPosition = transform.position; 
} 

void Start() { 
    _startTime = Time.time; 
} 

А затем проверить, если клавиша была нажата, и если нет, то есть это движение назад к начальным должность

void Update() 
{ 
    if(Input.GetAxis("Horizontal") != 0 || Input.GetAxis("Vertical") != 0) 
    { 
     //Logic here to move via arrows... 
    } 
    else 
    { 
     transform.position = Vector3.Lerp(transform.position, _initialPosition, (Time.time - _startTime)/_duration); 
    } 
} 

Unity Documen ставляет

Lerp

+0

этот сценарий присоединен к кубу, когда я переместить куб с горизонтальным и вертикальным вводом перемещается в соответствии с ним, но я хочу вернуться к своей первоначальной позиции х, у, г = 0 –

+0

вы хотите ли вернуться, когда вы не введете? – JonE

+0

да, я говорю это –

Смежные вопросы