利用unity 制作贪吃蛇小游戏
来源:互联网 发布:大数据教师培训方案 编辑:程序博客网 时间:2024/04/30 13:02
首先要做一个贪吃蛇游戏。
需要实现的技术点,分别有:
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));
{
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()函数就可以判断是否接触了。在脚本中使用
{
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
工程上传链接
阅读全文
0 0
- 利用unity 制作贪吃蛇小游戏
- 【小游戏】C++手工制作贪吃蛇
- html画布制作贪吃蛇小游戏
- Day02 骚年,玩蛇吗?(制作小游戏贪吃蛇)
- 小游戏 贪吃蛇
- 贪吃蛇小游戏
- 贪吃蛇小游戏
- 贪吃蛇小游戏
- Applet贪吃蛇小游戏
- 贪吃蛇小游戏记录:
- 贪吃蛇小游戏笔记
- [小游戏]贪吃蛇
- 经典贪吃蛇小游戏
- 贪吃蛇小游戏~
- 【java】贪吃蛇小游戏
- 【java】贪吃蛇小游戏
- javascript贪吃蛇小游戏
- 贪吃蛇简单小游戏
- 解密:Python风靡全宇宙,首要原因竟是它?
- AngularJs实现订单列表的增加删除查询排序
- SQL Server 2017 附加于分离数据库并认识数据库结构
- 专访深鉴CEO姚颂:把芯片的专用和通用看作两极,那么中间任何位置都可有所作为
- 软件安装
- 利用unity 制作贪吃蛇小游戏
- Recyclerview嵌套Recyclerview实现简单购物车
- TabLayout展示数据
- 最长递增子序列问题——动态规划
- JZOJ 5424. 【NOIP2017提高A组集训10.25】凤凰院凶真
- mongodb 安装与配置
- 第1132期AI100_机器学习日报(2017-10-24)
- ImageLOader
- Angular球员页面---一个简单的Demo