Unity3D 协程实现贪吃蛇

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();

    }


}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值