UnityでLerpを使ってオブジェクトを往復させたい

自動ドアに応用したくてLerpを用いたプログラミングをしました。
座標AからBまで進み、Bとの距離が十分小さくなったらAに向かって進む、を繰り返すスクリプトを書いたつもりでしたが、Bで止まってしまって困っています。
原因を教えていただければ自分で考えて直してみます。

以下はその動画とスクリプトです。

c#

1using System.Collections;2using System.Collections.Generic;3using UnityEngine;4 5public class AutoDoorOpen : MonoBehaviour 6{7 8 public Transform startLocation;//開始位置のTransform9 public Transform endLocation;//終了位置のTransform 10 public float moveSpeed = 50.0f;//開くときの移動速度11 public float reverseMoveSpeed = -50.0f;//閉まるときの移動速度12 public float purposeDistance = 1.0f;//ドアと目的地の距離13 14 private float startTime;//開始時間15 private float journeyLength;//移動距離16 17 18 // Start is called before the first frame update19 void Start()20 {21 //移動に必要な距離を計算22 journeyLength = Vector3.Distance(startLocation.position, endLocation.position);23 24 }25 26 // Update is called once per frame27 void Update()28 {29 //ドアの位置を取得30 Vector3 currentPosition = transform.position;31 32 //ドアの位置がstartLocation付近にあるなら(Mathf.Absで絶対値に直す)33 if (Mathf.Abs(Vector3.Distance(currentPosition, startLocation.position)) < purposeDistance)34 {35 //移動した距離を計算36 float distCovered = (Time.time - startTime) * moveSpeed;37 38 //現在の位置をLerpで求める39 float fracJourney = distCovered / journeyLength;40 transform.position = Vector3.Lerp(startLocation.position, endLocation.position, fracJourney);41 42 //開始時間を更新43 startTime = Time.time;44 }45 46 //ドアの位置がendLocation付近にあるなら47 else if (Mathf.Abs(Vector3.Distance(currentPosition, endLocation.position)) < purposeDistance)48 {49 //移動した距離を計算50 float distCovered = (Time.time - startTime) * reverseMoveSpeed;51 52 //現在の位置をLerpで求める53 float fracJourney = distCovered / journeyLength;54 transform.position = Vector3.Lerp(startLocation.position, endLocation.position, fracJourney);55 56 //開始時間を更新57 startTime = Time.time;58 }59 60 }61}

https://youtu.be/uABdwOfPF20

コメントを投稿

0 コメント