using System.Collections; using System.Collections.Generic; using UnityEngine; public class Walk3 : 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); step2.Add(0); step6.Add(false); //step3.Add(0); //step4.Add(new Vector3(0, 0, 0)); step5.Add(new Vector3()); } } struct step { public Vector3 pos; public float rotation; public float height; public bool inAir; public step(Vector3 p, float r, float h, bool i) { pos = p; rotation = r; height = 0; 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(new Vector3(-1, 0, 0), -1, 0, false), new step(new Vector3(0, -2, 0), 0, -2, false), new step(new Vector3(0, 0, 0), 0, 0, false), // rest new step(new Vector3(1, 0, 0), 1, 0, false), new step(new Vector3(1, 0, 0), 1, 0, false), new step(new Vector3(0, 0, 0), 0, 0, false), // rest new step(new Vector3(0, 2, 0), 0, 2, false), new step(new Vector3(-1, 0, 0), -1, 0, true), }; public int st = 5; public int speed2 = 30; int speed = 10; public float walkDirection = 0; public float centerRotation = 0; int size = 8; public float walkspeed = 1; private List step2 = new List(); //private List step3 = new List(); //private List step4 = new List(); private List step5 = new List(); private List step6 = new List(); // 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) { step2[index] = (centerRotation * s[t].rotation) / speed2; Vector3 t2 = s[t].pos; t2.x *= walkspeed; // rotate x,y around rotation. step5[index] = (Quaternion.Euler(0, walkDirection, 0) * t2) / speed2; step6[index] = true; } else { Vector3 t2 = (legsInitial[index] + s[t].pos) - legs[index].GetComponent().point; step5[index] = t2 / speed2; step6[index] = false; } } speed = speed2; } else { speed--; makestep(); } } void makestep() { for (int index = 0; index < legs.Count; ++index) { legs[index].GetComponent().point += step5[index]; if (step6[index]) { //legs[index].GetComponent().point += step5[index]; // rotate x,y around rotation. legs[index].GetComponent().setWorldPos( Quaternion.Euler(0, step2[index], 0) * legs[index].GetComponent().getWorldPos() ); } } } }