Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class AutoMove : MonoBehaviour {
- [System.Serializable]
- public struct moveStep{public Vector3 pos; public Vector3 rot; [Range(0,1)]public float speed;public bool worldSpace; public bool smooth;}
- public GameObject movingObj;
- public moveStep[] steps;
- int i =0;
- public float speed;
- public float lt;
- public bool smooth;
- public bool loop;
- public bool flip;
- public bool worldSpace;
- public bool pi;
- public bool mode;
- [Range(0,3)]
- public float pim;
- public float t;
- // Use this for initialization
- void Start () {
- speed = steps [0].speed;
- smooth = steps [0].smooth;
- worldSpace = steps [0].worldSpace;
- }
- // Update is called once per frame
- void Update () {
- Debug.DrawLine (transform.position, movingObj.transform.position);
- Debug.DrawLine (transform.position, transform.position + steps [i].pos);
- Debug.DrawLine (movingObj.transform.position, transform.position + steps [i].pos);
- Debug.DrawLine (movingObj.transform.position, movingObj.transform.position + steps [i].pos);
- if (i + 1 < steps.Length && steps [i + 1].pos != null) {
- Debug.DrawLine (transform.position, transform.position + steps [i+ 1].pos);
- }
- //if (steps[i-1].pos !=null)
- //Debug.DrawLine (transform.position, transform.position + steps [i-1].pos);
- lt += Time.deltaTime;
- if (lt > speed)
- lt = speed;
- //lt = lt * lt;
- //float t =0f;
- if (mode) {
- t = lt / (speed);
- if(pi)
- t = Mathf.Sin(t * Mathf.PI * pim);
- }
- if (!mode) {
- t = lt;
- if(pi)
- t = Mathf.Sin(t * Mathf.PI * pim);
- }
- //multiplier += .2f * Time.smoothDeltaTime;
- if (!smooth) {
- movingObj.transform.localPosition = Vector3.Lerp (movingObj.transform.localPosition, steps [i].pos, t);
- movingObj.transform.localRotation = Quaternion.Lerp (movingObj.transform.localRotation, Quaternion.Euler (steps [i].rot), t);
- }
- if (smooth) {
- if (!worldSpace) {
- movingObj.transform.localPosition = Vector3.Slerp (movingObj.transform.localPosition, steps [i].pos, t);
- movingObj.transform.localRotation = Quaternion.Slerp (movingObj.transform.localRotation, Quaternion.Euler (steps [i].rot), t);
- } else {
- movingObj.transform.position = Vector3.Slerp (movingObj.transform.localPosition, steps [i].pos, t);
- movingObj.transform.rotation = Quaternion.Slerp (movingObj.transform.localRotation, Quaternion.Euler (steps [i].rot), t);
- }
- }
- ////////////////////////////////
- if (!worldSpace) {
- if (Vector3.Distance (movingObj.transform.localPosition, steps [i].pos) <= .1f) {
- Next ();
- lt = 0f;
- }
- /////////////////////////////////////
- } else {
- if (Vector3.Distance (movingObj.transform.position, steps [i].pos) <= .1f) {
- Next ();
- lt = 0f;
- }
- }
- }
- void Next(){
- ///if flip is true, we need to add to i, up to the length of the list.
- /// otherwise, we need to substract from it, making sure it doesnt go below 0.
- ///
- ///
- ///
- ///
- /// We need to add to i when going forward,
- /// and subtract from it going back.
- ///
- /// we need to keep track of this, by flipping the value when we've reached length-1, also flipping it when reaching 0.
- ///
- //if (i > 0) {
- // flip = false;
- //}
- //if (i < 0)
- // flip = true;
- if (!loop) {
- if (flip) {
- i++;
- } else {
- i--;
- }
- if (i == steps.Length - 1 || i == 0) {
- flip = !flip;
- }
- } else {
- if (i == steps.Length - 1) {
- i = 0;
- } else {
- i++;
- }
- }
- //This happens in Next without conditionals
- speed= steps[i].speed;
- smooth = steps [i].smooth;
- worldSpace = steps [i].worldSpace;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement