void go() { interval++; if (interval < speed) { return; } interval = 0; for (int i = 0; i < snake.Count; i++) { snake[i].go.transform.localPosition = snake[i].targetPos; snake[i].lastPos = snake[i].targetPos; snake[i].go.transform.localEulerAngles = snake[i].targetAngle; snake[i].lastRotateAngle = snake[i].targetRotateAngle; } updateCameraParam(); bool eat = Foods.Instance.Eat(snake[0].targetPos); if (eat) { GameObject body = clone(Config.Instance.PrefabBody, gameObject); SnakePart part = new SnakePart(body); part.Clone(snake[snake.Count - 2]); snake.Insert(snake.Count - 1, part); } Vector3 dest = Vector3.zero; PlaneType newPlane = mapPlane[currPlane].Move(snake[0].lastPos, ref newDirect, ref dest); snake[0].SetTargetPos(dest); Vector3 angle; if (currPlane == newPlane) { angle = mapPlane[currPlane].Rotate(currDirect, newDirect); } else { angle = mapPlane[newPlane].Enter(currPlane); } snake[0].SetRotateAngle(angle); currPlane = newPlane; int count = eat ? snake.Count - 2 : snake.Count; for (int i = 1; i < count; i++) { snake[i].SetTargetPos(snake[i - 1].lastPos); snake[i].targetRotateAngle = snake[i - 1].lastRotateAngle; snake[i].targetAngle = snake[i - 1].go.transform.localEulerAngles; } lastFixedTime = Time.time; currDirect = newDirect; }