Unity3D 协程实现贪吃蛇

来源:互联网 发布:js获取当前网址 编辑:程序博客网 时间:2024/06/05 02:31
using System.Collections;using System.Collections.Generic;using UnityEngine;public class ControlSnake : MonoBehaviour {    List<SnakeBody> snake;    public Transform head;    public Transform bodyOne;    public Transform bodyTwo;    SnakeBody snakeHead;    // Use this for initialization    void 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();            yield return new WaitForSeconds(0.1f);            for (int i = 0; i < snake.Count; i++)            {                SnakeBody tmpSnake = snake[i];                Debug.Log("i ===="+i);                tmpSnake.FollowFront();                yield return new WaitForSeconds(0.3f);            }        }    }    // Update is called once per frame    void Update () {        if (Input.GetKeyDown(KeyCode.A))        {            snakeHead.MoveLeft();        }        if (Input.GetKeyDown(KeyCode.D))        {            snakeHead.MoveRight();        }    }}
using System.Collections;using System.Collections.Generic;using UnityEngine;public class SnakeBody  {    public SnakeBody(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;    public  virtual void MoveFront()    {        body.Translate(Vector3.forward*2);    }    public void MoveLeft()    {        Vector3   anlge=  body.localEulerAngles;        anlge.y -= 90;        body.localEulerAngles = anlge;    }    public void MoveRight()    {        Vector3 anlge = body.localEulerAngles;        anlge.y += 90;        body.localEulerAngles = anlge;    }    public void SetNewPostion()    {        Debug.Log(body.name);       oldPos = body.position;    }    public  void  FollowFront()    {        //  当前 body  赋值到 前面一个位置 。       body.position =   FrontBody.oldPos;       // body.position = oldPos;        //  前面一个 位置 oldPos   赋值给 新的位置。        if (frontBody != null)        frontBody.SetNewPostion();    }}
原创粉丝点击