using System.Collections; using System.Collections.Generic; using UnityEngine; public class Walk2 : MonoBehaviour { public List legs = new List(); private List legsInitial = new List(); // Use this for initialization void Start() { for (int index = 0; index < legs.Count; ++index) { legsInitial.Add(legs[index].GetComponent().point); } } struct step { public float rotation; public float height; public bool inAir; public step(float r, float h, bool i) { rotation = r; height = h; inAir = i; } } // 1, 3, 5 -= 3 int offset(int i, int offset, int max) { return i - offset < 0 ? (max - (offset - i)) : i - offset; } step[] s = { new step(-1, 0, false), new step(0, -2, false), new step(0, 0, false), // rest new step(1, 0, false), new step(1, 0, false), new step(0, 0, false), // rest new step(0, 2, false), new step(-1, 0, true), }; public int st = 5; public int speed2 = 30; int speed = 10; public float rotation = 0; int size = 8; //public float walkspeed = 1; // Update is called once per frame void FixedUpdate() { if (speed <= 0) { if (st >= size-1) st = 0; else st++; for (int index = 0; index < legs.Count; ++index) { int t = st; if (index == 1 || index == 3 || index == 5) { t = offset(st, 4, size); } if (s[t].inAir == false) { Vector3 n = legs[index].GetComponent().getWorldPos(); n = Quaternion.Euler(0, rotation * s[t].rotation, 0) * n; n.y += s[t].height; // rotate x,y around rotation. legs[index].GetComponent().setWorldPos(n); } else { legs[index].GetComponent().point = legsInitial[index] + new Vector3(0, s[t].height, 0); } } speed = speed2; } else speed--; } }