两点之间往复运动 仿照itween 的pingpong运动
usingUnityEngine;
usingSystem.Collections;
publicclass Test : MonoBehaviour
{
public Transform startPoint;
public Transform endPoint;
public float moveSpeed = 3;
int a = 0;
void Start()
{
StartCoroutine(Move());
}
// 物体在两点之间运动
IEnumerator MoveStart()
{
while (true )
{
transform.position =Vector3.Lerp(transform.position, startPoint.position,Time.deltaTime * moveSpeed);
if (Vector3 .Distance(startPoint.position, transform.position) < 0.1f)
{
StopAllCoroutines();
StartCoroutine(MoveEnd());
}
yield return null;
}
}
IEnumerator MoveEnd()
{
while (true )
{
transform.position =Vector3.Lerp(transform.position, endPoint.position,Time.deltaTime * moveSpeed);
if (Vector3 .Distance(endPoint.position, transform.position) < 0.1f)
{
StopAllCoroutines();
StartCoroutine(MoveStart());
}
yield return null;
}
}
IEnumerator Move()
{
while (true )
{
transform.position =Vector3.Lerp(transform.position, endPoint.position,Time.deltaTime * moveSpeed);
if (Vector3 .Distance(endPoint.position, transform.position) < 0.1f)
{
StopAllCoroutines();
StartCoroutine(MoveStart());
}
yield return null;
}
}
}
------------------------------------------------------------------------------------------
usingUnityEngine;
usingSystem.Collections;
///<summary>
/// 两点匀速乒乓运动
///</summary>
publicclass Pinpang2 : MonoBehaviour {
public Transform startPoint;
public Transform endPoint;
public float timer = 3f;
void Start()
{
StartCoroutine(Move());
}
// 物体在两点之间运动
IEnumerator MoveStart()
{
float time = 0;
while (true)
{
time +=Time.deltaTime;
transform.position =Vector3.Lerp(endPoint.position, startPoint.position, time / timer);
if (Vector3.Distance(startPoint.position, transform.position) < 0.01f)
{
transform.position = startPoint.position;
StopAllCoroutines();
StartCoroutine(MoveEnd());
}
yield return null;
}
}
IEnumerator MoveEnd()
{
float time = 0;
while (true)
{
time +=Time.deltaTime;
transform.position =Vector3.Lerp(startPoint.position, endPoint.position, time / timer);
if (Vector3.Distance(endPoint.position, transform.position) < 0.01f)
{
transform.position = endPoint.position;
StopAllCoroutines();
StartCoroutine(MoveStart());
}
yield return null;
}
}
IEnumerator Move()
{
float time = 0;
while (true)
{
time +=Time.deltaTime;
transform.position =Vector3.Lerp(startPoint.position, endPoint.position, time/timer);
if (Vector3.Distance(endPoint.position, transform.position) < 0.01f)
{
transform.position = endPoint.position;
StopAllCoroutines();
StartCoroutine(MoveStart());
}
yield return null;
}
}
}
------------------------------------------------------------------
四点匀速移动
usingUnityEngine;
usingSystem.Collections;
publicclass SidainPingpang : MonoBehaviour {
public Transform startPoint;
public Transform secondPoint;
public Transform thirdPoint;
public Transform endPoint;
public float timer = 3f;
void Start()
{
StartCoroutine(Move());
}
// 物体在两点之间运动
IEnumerator MoveStart()
{
float time = 0;
while (true)
{
time +=Time.deltaTime;
transform.position =Vector3.Lerp(secondPoint.position, startPoint.position, time / timer);
if (Vector3.Distance(startPoint.position, transform.position) < 0.01f)
{
transform.position = startPoint.position;
StopAllCoroutines();
StartCoroutine(MoveEnd());
}
yield return null;
}
}
IEnumerator MoveSecond()
{
float time = 0;
while (true)
{
time +=Time.deltaTime;
transform.position =Vector3.Lerp(thirdPoint.position, secondPoint.position, time / (timer / 2));
if (Vector3.Distance(secondPoint.position, transform.position) < 0.01f)
{
transform.position = secondPoint.position;
StopAllCoroutines();
StartCoroutine(MoveStart());
}
yield return null;
}
}
IEnumerator MoveThird()
{
float time = 0;
while (true)
{
time +=Time.deltaTime;
transform.position =Vector3.Lerp(endPoint.position, thirdPoint.position, time / timer);
if (Vector3.Distance(thirdPoint.position, transform.position) < 0.01f)
{
transform.position = thirdPoint.position;
StopAllCoroutines();
StartCoroutine(MoveSecond());
}
yield return null;
}
}
IEnumerator MoveEnd()
{
float time = 0;
while (true)
{
time +=Time.deltaTime;
transform.position =Vector3.Lerp(startPoint.position, endPoint.position, time / (timer / 2));
if (Vector3.Distance(endPoint.position, transform.position) < 0.01f)
{
transform.position = endPoint.position;
StopAllCoroutines();
StartCoroutine(MoveThird());
}
yield return null;
}
}
IEnumerator Move()
{
float time = 0;
while (true)
{
time +=Time.deltaTime;
transform.position =Vector3.Lerp(startPoint.position, endPoint.position, time / (timer / 2));
if (Vector3.Distance(endPoint.position, transform.position) < 0.01f)
{
transform.position = endPoint.position;
StopAllCoroutines();
StartCoroutine(MoveThird());
}
yield return null;
}
}
}