Я использую приведенный ниже код, прикрепленный к цилиндрическому объекту с ребристым телом и столкновением.Этот объект находится в середине барьеров столкновения, которые образуют круг.Я пытаюсь заставить этот объект плавно перемещаться вперед на случайное расстояние, а после того, как он перемещается, ждать случайное время и затем двигаться снова.Если он ударяется о барьер с именем тега «стена», то поверните на некоторое расстояние от стен, чтобы он мог продолжать двигаться внутри.и продолжайте делать следующий код.
Однако объект не движется плавно, и он почти не движется.
Как я могу это исправить?Заранее спасибо за любые ссылки или помощь в этой проблеме.
public bool hit, m = false;
public float waitTime;
public float movDistance;
public float fRotation;
public float transitionSpeed = 1f;
private float lerpTime = 3f;
private float currentLerpTime = 0f;
private Vector3 startPos, endPos;
void Start()
{
//rb = GetComponent<Rigidbody>();
startPos = this.transform.position;
}
private void Update()
{
if (m == false) {
if (hit == true) {
currentLerpTime += Time.deltaTime;
if (currentLerpTime >= lerpTime) {
currentLerpTime = lerpTime;
hit = false;
}
float p = currentLerpTime / lerpTime;
this.transform.position = Vector3.Lerp(startPos, endPos, p);
}
if (hit == false) {
setRanges();
m = true;
StartCoroutine(Example());
}
}
}
public void setRanges()
{
waitTime = Random.Range(4f, 10f);
movDistance = Random.Range(2f, 10f);
fRotation = Random.Range(1f, 270f);
endPos = this.transform.position + Vector3.forward * movDistance;
}
IEnumerator Example()
{
Debug.Log("Wait" + waitTime + "Seconds");
startPos = this.transform.position;
yield return new WaitForSeconds(waitTime);
hit = true;
m = false;
}
void OnCollisionEnter(Collision col)
{
if (col.gameObject.tag == "wall")
{
Debug.Log(" hit wall");
this.transform.rotation = Quaternion.Euler(0, 180, 0);
hit = false;
}
}