unity3d 源文件贪吃蛇 源文件

unity3d之贪吃蛇
临时兴起,写一个贪吃蛇教程吧。
本来觉得会很好写,结果写了整整一下午,还是自己代码写的太少,操作起来不灵活,思路会短路。
废话不多说。先上图:
逻辑很简单,但自己本来在明确思路的情况下却在写代码时走了弯路,核心部分是蛇吃了绿色的食物后,变长。
我的方法是存储蛇的最后一节身体位置,每次添加新的长度到末尾。
这里要注意的是采取,从尾至头的方式移动蛇前进,而不是通常我们理解的从头至尾。目的就是方便操作同时到达蛇形蜿蜒的效果。
下面是主题代码:
using UnityE
using System.C
public class GameManager : MonoBehaviour {
private const int height = 14;
private const int width = 14;
private Vector2 origin = new Vector2(-1.84f,-1.25f);
private const float moveUnit = 0.28f;
private bool[,] Meshs = new bool[height,width];
private GameObject[] snakeArray = new GameObject[100];
private GameO
private GameObject food =
private Vector2[] snakePositions = new Vector2[100];
public GameObject[] snakeHead = new GameObject[4];
public GameObject snakeB
public GameObject food_
private int head_
private int snakeIndex=0;
public static bool IsGameOn;
// Use this for initialization
void Start () {
InitGame ();
// Update is called once per frame
void Update () {
if(Input.GetKeyDown(KeyCode.LeftArrow)){
direction = 0;
SnakeMove();
if(Input.GetKeyDown(KeyCode.RightArrow)){
direction = 1;
SnakeMove();
if(Input.GetKeyDown(KeyCode.UpArrow)){
direction = 2;
SnakeMove();
if(Input.GetKeyDown(KeyCode.DownArrow)){
direction = 3;
SnakeMove();
private void InitGame(){
IsGameOn =
for (int k=0; k&100; k++)
snakeArray [k] =
for (int k=0; k&100; k++)
snakePositions [k] = Vector2.
int i = Random.Range (0,4);//0,1,2,3 represents Left,Right,Up and Down
head_direction =
direction=head_
Vector2 originalPosition = new Vector2 (origin.x+moveUnit*7,origin.y+moveUnit*7);
snakePositions [0] = new Vector2 (7, 7);//head's axis value
head = (GameObject)Instantiate (snakeHead[i],originalPosition,Quaternion.identity);
snakeArray [0] =
SnakeMove ();
GenerateFood ();
private void SnakeBodyMove(){
snakePositions[99] = snakePositions[snakeIndex];
for (int i=snakeI i&0; i--) {
if(snakePositions[i]!=Vector2.zero){
snakePositions[i] = snakePositions[i-1];
if(snakeArray[i]!=null){
snakeArray[i].transform.position = new Vector2(origin.x + moveUnit *snakePositions[i-1].x,origin.y + moveUnit *snakePositions[i-1].y);
private void SnakeMove(){
CancelInvoke ("SnakeMove");
if (!IsGameOn)
SnakeBodyMove();
switch(direction){
//Debug.Log("0position"+snakePositions[99]);
checkSnakeHead();
head.transform.Translate(-moveUnit,0,0);
snakePositions[0].x--;
Invoke("SnakeMove",0.5f);
checkSnakeHead();
head.transform.Translate(moveUnit,0,0);
//snakePositions[99].x++;
snakePositions[0].x++;
Invoke("SnakeMove",0.5f);
checkSnakeHead();
head.transform.Translate(0,moveUnit,0);
//snakePositions[99].y++;
snakePositions[0].y++;
Invoke("SnakeMove",0.5f);
checkSnakeHead();
head.transform.Translate(0,-moveUnit,0);
//snakePositions[99].y--;
snakePositions[0].y--;
Invoke("SnakeMove",0.5f);
if(snakePositions[0].x&0||snakePositions[0].x&13||snakePositions[0].y&0||snakePositions[0].y&13){
gameover.enabled =
private void checkSnakeHead(){
if(direction!=head_direction){
head_direction =
GameObject tmp =
head = (GameObject)Instantiate (snakeHead[head_direction],head.transform.position,Quaternion.identity);
snakeArray[0] =
Destroy(tmp.gameObject);
public void GenerateFood(){
int i = Random.Range (0,14);
int j = Random.Range (0,14);
GameObject tmp =
food = (GameObject)Instantiate (food_prefab,new Vector2(origin.x+moveUnit*j,origin.y+moveUnit*i),Quaternion.identity);
if(tmp!= null)
Destroy (tmp.gameObject);
public void SnakeGrow(){
snakeIndex++;
Vector2 endPosition = new Vector2 (origin.x + moveUnit * snakePositions[99].x, origin.y + moveUnit * snakePositions[99].y);
snakeArray[snakeIndex] =(GameObject)Instantiate (snakeBody,endPosition,Quaternion.identity);
snakePositions [snakeIndex] = snakePositions [99];
没有更多推荐了,Unity3D 协程实现贪吃蛇
using System.C
using System.Collections.G
using UnityE
public class ControlSnake : MonoBehaviour {
List&SnakeBody&
public Transform bodyO
public Transform bodyT
SnakeBody snakeH
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.C i++)
SnakeBody tmpSnake = snake[i];
Debug.Log("i ===="+i);
tmpSnake.FollowFront();
yield return new WaitForSeconds(0.3f);
void Update () {
if (Input.GetKeyDown(KeyCode.A))
snakeHead.MoveLeft();
if (Input.GetKeyDown(KeyCode.D))
snakeHead.MoveRight();
using System.C
using System.Collections.G
using UnityE
public class SnakeBody
public SnakeBody(SnakeBody
front ,Transform
Body = tmpB
if (front == null)
Debug.Log("
FrontBody =
if (FrontBody != null)
oldPos = FrontBody.body.
SnakeBody frontB
public SnakeBody FrontBody
return frontB
frontBody = value;
public Transform Body
body = value;
Debug.Log(" body Name" + body.name);
Vector3 oldP
virtual void MoveFront()
body.Translate(Vector3.forward*2);
public void MoveLeft()
body.localEulerA
anlge.y -= 90;
body.localEulerAngles =
public void MoveRight()
Vector3 anlge = body.localEulerA
anlge.y += 90;
body.localEulerAngles =
public void SetNewPostion()
Debug.Log(body.name);
oldPos = body.
FollowFront()
body.position =
FrontBody.oldP
if (frontBody != null)
frontBody.SetNewPostion();
没有更多推荐了,贪吃蛇大作战的实现【unity3d吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:87,659贴子:
贪吃蛇大作战的实现收藏
关于贪吃蛇大作战蛇撞到身体的实现方法。AI蛇我是用脚本实例化的,它们的尾巴都是用的同一个预制体,请问怎么可以识别蛇撞到的是别的蛇的身体和撞到自己的身体?因为撞到别人的身体时会死掉而撞自己的身体不会死掉。
unity微职位高端培训,随到随学/4对1辅导/闯关式学习;unity微职位高端培训,优选大牛老师授课,实时在线答疑,保证学习效果.
分两个预制体啊,别人的用other tags
实例化时自己加一个tag,碰撞时判断一下这个自定义tag
放到两个物理层,同一个物理层设为不能碰撞,不就好了。
楼主问一下贪吃蛇的身体旋转是怎么实现的,我目前知道的是用Array记录xy点然后画出来,不过这是libgdx(另外一个引擎)的方法。
泰课有教程。
楼主,这个游戏实现起来难吗?不用做的很好,差不多就行的那种。毕业设计想做一个unity3d的项目,但是并没有学过多久,菜鸟级的,有什么项目可以推荐吗?
大兄弟 这个360度的旋转
然后身体跟随是怎么做的 能不能给个思路 如果源码能给看一下最好不过了
别的蛇,你打算联网么?如果是单机的话,防止吃掉一个食物后,本身会被销毁,可以设置BOX collider 属性的size为0.5(根据情况设置)
自动生成的AI要带序号啊,不然无法识别
概括的说,就是每一条蛇,必须有一个唯一识别码,才能实现你要的效果,也就是i d,你可以做一个id生成器,取一次,下一次得到的id就+1。然后蛇的身体通通附上ID,这样碰撞的时候直接比较ID就可以了。至于ID放在哪里,可以直接赋值给tag,也可以在脚本里生命ID,总之就是这个构架,应该没问题
登录百度帐号查看: 705|回复: 2
Unity3D贪吃蛇游戏3D的求教程
2级会员(论坛居民)主题帖子CG券
2级会员(论坛居民), 积分 24, 距离下一级还需 176 积分
2级会员(论坛居民), 积分 24, 距离下一级还需 176 积分
&&贪吃蛇游戏上手,求教程。
Powered by游戏蛮牛学习群(纯技术交流,不闲聊):
扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
关注:1385
当前位置: &
查看: 5460|回复: 50
新手向,简单贪吃蛇源码(详细注释)
本帖为抢楼帖,欢迎抢楼!&
2146/150排名<font color="#FF昨日变化4主题帖子积分
初来乍到, 积分 146, 距离下一级还需 4 积分
初来乍到, 积分 146, 距离下一级还需 4 积分
蛮牛币1127
在线时间6 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
一个简单的DEMO,用unity实现经典的贪吃蛇,新人发帖,技术不足,还请谅解!
(41.92 KB, 下载次数: 20)
19:51 上传
19:56 上传
点击文件名下载附件
48 Bytes, 下载次数: 1062
售价: 1 蛮牛币 &[]
markmarkmark&
本帖被以下淘专辑推荐:
& |主题: 9, 订阅: 5
每日推荐:
2146/150排名<font color="#FF昨日变化4主题帖子积分
初来乍到, 积分 146, 距离下一级还需 4 积分
初来乍到, 积分 146, 距离下一级还需 4 积分
蛮牛币1127
在线时间6 小时
注释很详细哦,亲们
每日推荐:
2146/150排名<font color="#FF昨日变化4主题帖子积分
初来乍到, 积分 146, 距离下一级还需 4 积分
初来乍到, 积分 146, 距离下一级还需 4 积分
蛮牛币1127
在线时间6 小时
以下为部分代码截图
(78.15 KB, 下载次数: 23)
20:00 上传
(70.69 KB, 下载次数: 11)
20:00 上传
每日推荐:
4347/500排名<font color="#FF昨日变化3主题帖子积分
四处流浪, 积分 347, 距离下一级还需 153 积分
四处流浪, 积分 347, 距离下一级还需 153 积分
在线时间82 小时
不错,过来学习
每日推荐:
271/150排名<font color="#FF昨日变化3主题帖子积分
初来乍到, 积分 71, 距离下一级还需 79 积分
初来乍到, 积分 71, 距离下一级还需 79 积分
在线时间11 小时
冲你注释详细就是卖点哦
每日推荐:
71541/5000排名<font color="#FF昨日变化主题帖子积分
日久生情, 积分 1541, 距离下一级还需 3459 积分
日久生情, 积分 1541, 距离下一级还需 3459 积分
蛮牛币5661
在线时间613 小时
下载试试看& && && && && && && && && && && && && && && && && &
每日推荐:
71541/5000排名<font color="#FF昨日变化主题帖子积分
日久生情, 积分 1541, 距离下一级还需 3459 积分
日久生情, 积分 1541, 距离下一级还需 3459 积分
蛮牛币5661
在线时间613 小时
26、NGUI3.6版本中,在创建一个Sprite时,有一个Type属性,在Type中有Simple、Sliced、Tiled、Filled等设置选项,其中Simple:表示单一延展的四边形,Tiled表示平铺,可以看到很多小四边形会铺满Sprite的整个区域。同理,请概要描述一下Sliced的作用?4分 答:Sliced,表示切割和按钮背景的类型是相同,Sprite被分切成9块,所有角不能进行延展,只有中间区域可以双向延展,这种逻辑可以用少量的纹理绘制出漂亮的用户界面。&&27、NGUI3.6版本中,Panel是一个比较重要的控件,请根据所学内容简述Panel的作用?4分 答:Panel用来绘制所有的UI控件,UI控件必须通过Panel才能显示,Panel中的Depth属性要比其它UI控件的Depth值更重要, “panel”的depth值比其它控件的 depth优先级要高。&&28、NGUI3.6版本中,新建一个Sprite,如果想把它变成一个按钮类型的控件,有两个必要
每日推荐:
7排名<font color="#FF昨日变化1主题帖子积分
蛮牛币9719
在线时间458 小时
学习了,看下怎么样。。。。
每日推荐:
5694/1000排名<font color="#FF昨日变化1主题帖子积分
熟悉之中, 积分 694, 距离下一级还需 306 积分
熟悉之中, 积分 694, 距离下一级还需 306 积分
在线时间256 小时
赞, 不错& && && && && && && && && && && &。
每日推荐:
122/50排名<font color="#FF昨日变化8主题帖子积分
注册看看, 积分 22, 距离下一级还需 28 积分
注册看看, 积分 22, 距离下一级还需 28 积分
在线时间1 小时
学习了,看下怎么样。。。。
每日推荐:
3287/300排名<font color="#FF昨日变化主题帖子积分
偶尔光临, 积分 287, 距离下一级还需 13 积分
偶尔光临, 积分 287, 距离下一级还需 13 积分
在线时间85 小时
下载试试看{:97:}
每日推荐:
3175/300排名<font color="#FF昨日变化3主题帖子积分
偶尔光临, 积分 175, 距离下一级还需 125 积分
偶尔光临, 积分 175, 距离下一级还需 125 积分
在线时间17 小时
下载求教育啊
每日推荐:
61160/1500排名<font color="#FF昨日变化主题帖子积分
蛮牛粉丝, 积分 1160, 距离下一级还需 340 积分
蛮牛粉丝, 积分 1160, 距离下一级还需 340 积分
蛮牛币1855
在线时间481 小时
感謝大大分享!!!!!!!!!!!!
每日推荐:
71541/5000排名<font color="#FF昨日变化主题帖子积分
日久生情, 积分 1541, 距离下一级还需 3459 积分
日久生情, 积分 1541, 距离下一级还需 3459 积分
蛮牛币5661
在线时间613 小时
哈哈哈,很好,因为这个,我考试过了
每日推荐:
254/150排名<font color="#FF昨日变化2主题帖子积分
初来乍到, 积分 54, 距离下一级还需 96 积分
初来乍到, 积分 54, 距离下一级还需 96 积分
在线时间0 小时
kkkkkkkkkkkjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
每日推荐:}

我要回帖

更多关于 unity贪吃蛇源文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信