Должен ли я использовать StartCoroutine?Как я могу перемещать объект вверх и назад?
using UnityEngine;
using System.Collections;
using System.Reflection;
public class DetectPlayer : MonoBehaviour {
GameObject target;
int counter = 0;
public static bool touched = false;
public float moveSpeed = 3.0f;
public float smooth = 1f;
private float distanceTravelled;
private Vector3 startPositon;
public float distanceToTravel = 50;
private void Start()
{
startPositon = new Vector3(target.transform.position.x, target.transform.position.y, target.transform.position.z);
}
private void Update()
{
if (RaiseWalls.raised == true && touched == true)
{
MoveElevator();
//touched = false;
}
}
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.name == "ThirdPersonController") // "Platform"
{
Debug.Log("Touching Platform");
}
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.name == "ThirdPersonController") // "OnTop Detector"
{
counter = 0;
Debug.Log("On Top of Platform");
target = GameObject.Find("Elevator");
GameObject findGo = GameObject.Find("ThirdPersonController");
GameObject findGo1 = GameObject.Find("Elevator");
findGo.transform.parent = findGo1.transform;
GameObject go = GameObject.Find("CubeToRaise");
go.GetComponent<RaiseWalls>();
Debug.Log("The button clicked, raising the wall");
touched = true;
}
}
void OnTriggerExit(Collider other)
{
GameObject findGo = GameObject.Find("ThirdPersonController");
findGo.transform.parent = null;
}
void MoveElevator()
{
if (distanceTravelled == distanceToTravel)
{
}
else
{
target.transform.localPosition += target.transform.up * Time.deltaTime * moveSpeed;
distanceTravelled += Vector3.Distance(target.transform.position, startPositon);
}
}
}
В этом случае лифт в функции MoveElvator перемещается вверх. Теперь я хочу сделать это, когда он достигнет высоты 50, чтобы начать движение вниз и остановиться при обнаружении/получении на земле.
Так я добавил
if (distanceTravelled == distanceToTravel)
{
}
Но не знаю, как заставить его двигаться вниз и остановится при получении на землю.
Это C# не unityscript. Кстати, вы не получаете ответы, потому что трудно понять вашу проблему. «Теперь я хочу сделать это, когда он достигнет высоты 50, чтобы начать движение назад и остановиться, когда обнаруживается/попадает на землю». Где вы обнаруживаете, если он находится на земле? – Programmer
Кстати, ваше пройденное расстояние неверно, потому что вы добавляете общее расстояние, пройденное к нему в каждом кадре. Вы должны просто иметь: 'distanceTravelled = Vector3.Distance (target.transform.position, startPositon);' – FINDarkside