欢迎访问优讯网!
您当前的位置:首页 > 爱编程

unity实现贪吃蛇游戏

时间:2020-04-17 08:22:03  来源:优讯网  作者:小卡司  浏览次数:
这篇文章主要为大家详细介绍了unity实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
 

unity贪吃蛇基本原理实现,供大家参考,具体内容如下

原理:

1、每个身体跟着前面的身体移动;
2、蛇头自动一直向前走,可以向左或者向右转弯。

思想:

贪吃蛇的身体有若干个,每个身体有共同的特性,就是跟着前面的身体移动,这里把蛇的身体抽象出出来,用一个SnackBody类来表达,每一节身体都new出一个SnackBody对象,然后操作这个对象实现功能;蛇头可以看做特殊的蛇身体。应该有一个管理器来管理所有的蛇身体,所以有个SnackController类来管理。每段蛇身都有Front,self,oldPos三个属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class SnackBody
{
  public SnackBody front; //表示 前一段蛇身
  public Transform self; //表示 当前蛇身
  Vector3 oldPos; //当前蛇身的前一个位置
 
  public SnackBody(SnackBody tmpFront, Transform tmpSelf)
  {
    front = tmpFront;
    self = tmpSelf;
    oldPos = tmpSelf.position;
  }
 
  //这一节蛇身已经向前移动了,更新oldPos
  public void Reflash()
  {
    oldPos = this.self.position;
  }
 
  //跟着前面的蛇身
  public void FollowFront()
  {
    self.position = front.oldPos; //更新蛇身的位置
    front.Reflash();
  }
   
  public virtual void MoveForward(){}
  }
 
public class SnackHead : SnackBody
{
  //继承基类
  public SnackHead(SnackBody tmpFront,Transform tmpSelf):base(tmpFront,tmpSelf)
  {
  }
  public override void MoveForward()
  {
    self.Translate(-self.forward, Space.World);
  }
 
  /// <summary>
  /// 向右移动
  /// </summary>
  public void TurnRight()
  {
    Vector3 tmpAngle = self.localEulerAngles;
    tmpAngle.y += 90;
    self.localEulerAngles = tmpAngle;
  }
 
  /// <summary>
  /// 向左移动
  /// </summary>
  public void TurnLeft()
  {
    Vector3 tmpAngle = self.localEulerAngles;
    tmpAngle.y -= 90;
    self.localEulerAngles = tmpAngle;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class SnackController : MonoBehaviour {
 
  List<SnackBody> allBodys; //存储所有的蛇身
 
  public Transform snackHead;
  public Transform bodyOne;
  public Transform bodyTwo;
 
  // Use this for initialization
  void Start () {
 
    allBodys = new List<SnackBody>();
 
    SnackHead tmpHead = new SnackHead(null, snackHead);
    allBodys.Add(tmpHead);
 
    SnackBody tmpOneBody = new SnackBody(tmpHead, bodyOne);
    allBodys.Add(tmpOneBody);
 
    SnackBody tmpTwoBody = new SnackBody(tmpOneBody, bodyTwo);
    allBodys.Add(tmpTwoBody);
 
    StartCoroutine(MoveFront());
  }
 
  IEnumerator MoveFront()
  {
    while(true) //用一个死循环来让蛇一直移动
    {
      allBodys[0].MoveForward();
 
      yield return new WaitForSeconds(0.5f);
 
      for(int i=1;i<allBodys.Count; i++)
      {
        allBodys[i].FollowFront();
        yield return new WaitForSeconds(0.2f);
      }
    }
  }
  
 // Update is called once per frame
 void Update () {
  
    if(Input.GetKeyDown(KeyCode.A))
    {
      ((SnackHead)allBodys[0]).TurnLeft();
    }
 
    if (Input.GetKeyDown(KeyCode.D))
    {
      ((SnackHead)allBodys[0]).TurnRight();
    }
  }
}

来顶一下
返回首页
返回首页

原文链接:https://www.jb51.net/article/184863.htm


推荐资讯
如何下载旧版centos iso镜像 如何下载迷你mini版的centos镜像
如何下载旧版centos i
计算机的正确使用姿势 电脑痴如何正确的使用电脑
计算机的正确使用姿势
好用的后台管理的前端框架模版H-ui H-ui框架模版分享
好用的后台管理的前端
微信电脑多开方法 无需辅助电脑版微信双开方法分享
微信电脑多开方法 无
相关文章
栏目更新
栏目热门