利用unity 制作贪吃蛇小游戏
2017-10-26 08:12
1056 查看
首先要做一个贪吃蛇游戏。
需要实现的技术点,分别有:
1.利用键盘控制“蛇头”移动。
2.能对吃到“果子”这一动作进行判断,并且同时生成新“果子”。
3.死亡判断。
4.实现“蛇身”。
我觉得困难的部分在于实现“蛇身”的部分。
先按着点。来罗列一下思路和代码。
1.利用键盘控制“蛇头”移动:
先把“蛇头”对象设置为球形刚体。然而我并没有在脚本中直接对刚体施加速度,而是通过键盘来改变一个二维向量“speed”。
然后在每次刷新的时候,让“蛇头”的位置加上这个向量"speed"。来达到蛇头的移动。
if (Input.GetKey(key_up) && fangxiang != "down")
{
speed = new Vector2(0, speed_canshu);
fangxiang = "up";
}
else if (Input.GetKey(key_down) && fangxiang != "up")
{
speed = new Vector2(0, -speed_canshu);
fangxiang = "down";
}
else if (Input.GetKey(key_right) && fangxiang != "left")
{
speed = new Vector2(speed_canshu, 0);
fangxiang = "right";
}
else if (Input.GetKey(key_left) && fangxiang != "right")
{
speed = new Vector2(-speed_canshu, 0);
fangxiang = "left";
}
else
{
//位置移动的预先处理
}
weizhi += speed;
weizhi_3D = new Vector3(0, 0, 0);
weizhi_3D.x = weizhi.x;
weizhi_3D.y = weizhi.y;
rigidbody2D.transform.SetPositionAndRotation(weizhi_3D, new Quaternion(0, 0, 0, 0));
//weizhi 是代表现在蛇头位置的二维向量。weizhi_3D是代表现在蛇头位置的三维向量。speed_canshu是控制速度的参数。
2.3.能对吃到“果子”这一动作进行判断,并且同时生成新“果子”,和死亡判断:
把果子设置为预制体。并把果子的tag设置为ball_new,并添加上球形刚体组件。
OnCollisionEnter2D()函数就可以判断是否接触了。在脚本中使用
private void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Ball_body")//判断是否接触到的蛇身,是的话,把判断游戏结束的变量flag_game,设置为flase
{
flag_game = false;
}
if (col.gameObject.tag == "Ball_new")//判断是否接触到的果子(ball_new)
{
col.gameObject.tag = "Ball_body";//把接触到的果子的tag设置为蛇身
col.gameObject.transform.SetPositionAndRotation(weizhi_jilu[10 * (ball_number + 1)], new Quaternion(0, 0, 0, 0));
ball.Insert(0, col.gameObject);//ball是一个储存蛇身gameObject的list。把碰到的果子的gameObject插入到list的头部。
ball_number++;//计数,记录ball里对象的个数
weizhi_jilu.RemoveRange(ball_number * 11, weizhi_jilu.Count - (ball_number+1) * 11 );
flag = true;
}
if (col.gameObject.tag == "Wall")//判断是否接触到墙体
{
flag_game = false;
//直接GG
}
}
4.实现“蛇身”。
我最开始想的是利用,joint 关节链接起各个蛇身和蛇头。但是我发现,由于unity设置的刚体有惯性的原因,导致蛇身在转向的时候,
蛇尾会甩动起来。就很奇怪。。所以我处理蛇身的方式是:把蛇头的位置按时间先后一个个存入list中,然后把位置依次分配给蛇身对象。
具体代码就在附件中上传。
http://download.csdn.net/download/jxf1183727/10042295
工程上传链接
需要实现的技术点,分别有:
1.利用键盘控制“蛇头”移动。
2.能对吃到“果子”这一动作进行判断,并且同时生成新“果子”。
3.死亡判断。
4.实现“蛇身”。
我觉得困难的部分在于实现“蛇身”的部分。
先按着点。来罗列一下思路和代码。
1.利用键盘控制“蛇头”移动:
先把“蛇头”对象设置为球形刚体。然而我并没有在脚本中直接对刚体施加速度,而是通过键盘来改变一个二维向量“speed”。
然后在每次刷新的时候,让“蛇头”的位置加上这个向量"speed"。来达到蛇头的移动。
if (Input.GetKey(key_up) && fangxiang != "down")
{
speed = new Vector2(0, speed_canshu);
fangxiang = "up";
}
else if (Input.GetKey(key_down) && fangxiang != "up")
{
speed = new Vector2(0, -speed_canshu);
fangxiang = "down";
}
else if (Input.GetKey(key_right) && fangxiang != "left")
{
speed = new Vector2(speed_canshu, 0);
fangxiang = "right";
}
else if (Input.GetKey(key_left) && fangxiang != "right")
{
speed = new Vector2(-speed_canshu, 0);
fangxiang = "left";
}
else
{
//位置移动的预先处理
}
weizhi += speed;
weizhi_3D = new Vector3(0, 0, 0);
weizhi_3D.x = weizhi.x;
weizhi_3D.y = weizhi.y;
rigidbody2D.transform.SetPositionAndRotation(weizhi_3D, new Quaternion(0, 0, 0, 0));
//weizhi 是代表现在蛇头位置的二维向量。weizhi_3D是代表现在蛇头位置的三维向量。speed_canshu是控制速度的参数。
2.3.能对吃到“果子”这一动作进行判断,并且同时生成新“果子”,和死亡判断:
把果子设置为预制体。并把果子的tag设置为ball_new,并添加上球形刚体组件。
OnCollisionEnter2D()函数就可以判断是否接触了。在脚本中使用
private void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.tag == "Ball_body")//判断是否接触到的蛇身,是的话,把判断游戏结束的变量flag_game,设置为flase
{
flag_game = false;
}
if (col.gameObject.tag == "Ball_new")//判断是否接触到的果子(ball_new)
{
col.gameObject.tag = "Ball_body";//把接触到的果子的tag设置为蛇身
col.gameObject.transform.SetPositionAndRotation(weizhi_jilu[10 * (ball_number + 1)], new Quaternion(0, 0, 0, 0));
ball.Insert(0, col.gameObject);//ball是一个储存蛇身gameObject的list。把碰到的果子的gameObject插入到list的头部。
ball_number++;//计数,记录ball里对象的个数
weizhi_jilu.RemoveRange(ball_number * 11, weizhi_jilu.Count - (ball_number+1) * 11 );
flag = true;
}
if (col.gameObject.tag == "Wall")//判断是否接触到墙体
{
flag_game = false;
//直接GG
}
}
4.实现“蛇身”。
我最开始想的是利用,joint 关节链接起各个蛇身和蛇头。但是我发现,由于unity设置的刚体有惯性的原因,导致蛇身在转向的时候,
蛇尾会甩动起来。就很奇怪。。所以我处理蛇身的方式是:把蛇头的位置按时间先后一个个存入list中,然后把位置依次分配给蛇身对象。
具体代码就在附件中上传。
http://download.csdn.net/download/jxf1183727/10042295
工程上传链接
相关文章推荐
- Unity学习小结5 - 利用BMFont制作美术字及要点注意
- 小游戏●贪吃蛇1(利用二维数组制作)
- 原生JS制作贪吃蛇小游戏
- unity加kinect2.0拍照和利用RPC图片传输制作照片墙问题
- 自制Unity小游戏TankHero-2D(1)制作主角坦克
- 【Unity】3.2 利用预设(Prefab)制作可复用的组件
- Unity中利用NGUI制作简易字体
- 我的Unity(5)一点一滴 利用贴图制作弹痕
- 利用unity + visual studio 自制一款小游戏
- Unity入门:利用Unity制作ppt
- Unity2D 制作小游戏FlappyBird心得—Unity5学习笔记
- unity 利用ugui 制作技能冷却效果
- Unity IMGUI 的小游戏(井字棋)制作以及怎么发布为安卓apk并且发给女孩子手机上成功运行的教程 - 3D游戏编程学习日志
- unity学习之飞机大战制作 关键点(MAX) 成品小游戏飞机大战
- Unity_制作小地图——利用遮挡
- 初学JS——利用JS制作的别踩白块儿(街机模式) 小游戏
- 我的Unity(10)一点一滴 利用UI制作摇杆控制物体移动
- 利用Unity制作“表”
- 【Unity】3.2 利用预设(Prefab)制作可复用的组件
- Unity手机开发之巧妙利用纹理制作滚动背景