using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclass ControlSnake : MonoBehaviour {
List<SnakeBody> snake;
public Transform head;
public Transform bodyOne;
public Transform bodyTwo;
SnakeBody snakeHead;
// Use this for initializationvoid Start () {
snake = new List<SnakeBody>();
snakeHead = new SnakeBody(null,head);
SnakeBody snakeBodyOne = new SnakeBody(snakeHead, bodyOne);
snake.Add(snakeBodyOne);
SnakeBody snakeBodyTwo = new SnakeBody(snakeBodyOne, bodyTwo);
snake.Add(snakeBodyTwo);
Debug.Log(snake.Count);
StartCoroutine(MoveSanke());
}
public IEnumerator MoveSanke()
{
while (true)
{
snakeHead.MoveFront();
yieldreturnnew WaitForSeconds(0.1f);
for (int i = 0; i < snake.Count; i++)
{
SnakeBody tmpSnake = snake[i];
Debug.Log("i ===="+i);
tmpSnake.FollowFront();
yieldreturnnew WaitForSeconds(0.3f);
}
}
}
// Update is called once per framevoid Update () {
if (Input.GetKeyDown(KeyCode.A))
{
snakeHead.MoveLeft();
}
if (Input.GetKeyDown(KeyCode.D))
{
snakeHead.MoveRight();
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
publicclass SnakeBody {
publicSnakeBody(SnakeBody front ,Transform tmpBody)
{
Body = tmpBody;
if (front == null)
{
Debug.Log(" 11 111");
}
FrontBody = front;
if (FrontBody != null)
oldPos = FrontBody.body.position;
}
SnakeBody frontBody;
public SnakeBody FrontBody
{
get
{
return frontBody;
}
set
{
frontBody = value;
}
}
Transform body;
public Transform Body
{
get
{
return body;
}
set
{
body = value;
Debug.Log(" body Name" + body.name);
}
}
Vector3 oldPos;
publicvirtualvoidMoveFront()
{
body.Translate(Vector3.forward*2);
}
publicvoidMoveLeft()
{
Vector3 anlge= body.localEulerAngles;
anlge.y -= 90;
body.localEulerAngles = anlge;
}
publicvoidMoveRight()
{
Vector3 anlge = body.localEulerAngles;
anlge.y += 90;
body.localEulerAngles = anlge;
}
publicvoidSetNewPostion()
{
Debug.Log(body.name);
oldPos = body.position;
}
publicvoidFollowFront()
{
// 当前 body 赋值到 前面一个位置 。
body.position = FrontBody.oldPos;
// body.position = oldPos;// 前面一个 位置 oldPos 赋值给 新的位置。if (frontBody != null)
frontBody.SetNewPostion();
}
}