鲨鱼炸弹小游戏总结

2/3D游戏:2.5D

辅助插件:原生

游戏制作难度系数:初级

游戏教程网址:http://www.raywenderlich.com/4551/how-to-make-a-2-5d-game-with-unity-tutorial-part-1

1、背景自适应(GUITexture)正交模式

    void Start()
    {
        GUITexture gui = GetComponent<GUITexture>();
        // GUITexture的pixelInset值分别为:
        //width: 510  height: 340
        // x: -255   y:  -170
        Rect r = new Rect();
        r.width = Screen.width;
        r.height = Screen.height;
        float m = 510 / -255f;
        float n = 340 / -170f;
        r.x = Screen.width / m;
        r.y = Screen.height / n;
        gui.pixelInset = r;
    }

2、控制摄像机旋转造成2.5D效果(利用数学知识完美解决)

float anglespan = 0;
    void Update()
    {
        //判断飞机是否超过屏幕的可视范围,如果超过就重置飞机的位置 ,20是根据mainCamera的Far来设定的
        if (transform.position.x > 20)
        {
            speed = Random.Range(8f, 12f);
            transform.position = new Vector3(-20f, transform.position.y, transform.position.z);
        }
        transform.Translate(0, 0, speed * Time.deltaTime);

        //造成2.5D效果  nextZ可能的值为(初始值为0):2  4  6
        if (nextZ > mainCamera.transform.position.z)
        {
            //作者的方法:
            //float mx = 3 * Mathf.Sin(transform.position.z / 2) * Time.deltaTime;
            //float mz = -Mathf.Sin(transform.position.z / 2) * Time.deltaTime;
            // mainCamera.gameObject.transform.Translate(mx, 0, mz);

            float angle = Time.deltaTime * 5.7f;
            //改变背景图和camera的旋转,造成2.5D的效果
            mainCamera.gameObject.transform.Rotate(Vector3.up, angle);
            gameBackground.gameObject.transform.Rotate(Vector3.back, angle);

            //我的方法:计算摄像机每次旋转的角度
            anglespan = mainCamera.gameObject.transform.localEulerAngles.y - anglespan;
            float distance = Vector3.Distance(gameBackground.transform.position, mainCamera.transform.position);
            Vector3 zz = new Vector3(
                   -distance * Mathf.Sin(anglespan * Mathf.Deg2Rad),
                   0,
                   distance * (1 - Mathf.Cos(anglespan * Mathf.Deg2Rad))
                );
            mainCamera.gameObject.transform.Translate(zz * Time.deltaTime);
        }

 

左图为鲨鱼没有被击中时候的正常状态,而右图为鲨鱼被击中两次后的状态

当鲨鱼被击中后,为了实现2.5D效果,完美要旋转摄像机和背景图,并且移动摄像机,摄像机和背景图的旋转好做,就是给他们同一个角度进行旋转即可,可是经过了旋转,为了保持摄像机原有的拍摄角度和画面,我们该怎么移动呢,这就要求旋转一定角度求摄像机的落点,看下图(俯视图):摄像机的位置(0,0,0),背景图的位置(0,0,20)

其他小知识:

1、Translate的作用:就是正负号表示方向,值表示移动距离

transform.Translate(new Vector3(-10, -transform.position.y + Random.Range(-4, -1), 0));//向x轴的反方向移动10个单位

时间: 2024-12-26 04:45:27

鲨鱼炸弹小游戏总结的相关文章

从头开始构建web前端应用——字符炸弹小游戏(二)

接上篇.欢迎指正. 现在,需要考虑如何拆分文件. 拆分文件的目的,是为了方便代码管理.很显然,样式表,网页源文件,js代码需要放在不同的地方.另外,对于前端开发来说,主要的逻辑控制流程,都在js文件里面,所以,还需要拆分js文件.我个人习惯上按功能模块来拆分.在拆分前,你需要仔细思考一下,每一个函数和其他函数之间的关联度,尽量做到相关功能函数在一个文件里. ok,开工.在html所在文件目录下创建2个新文件夹,分别命名为css,js. 1.拆分css. css样式表写的不多,直接在css文件夹下

从头开始构建web前端应用——字符炸弹小游戏(一)

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

结对项目之小游戏编程(斗地主)

一.题目简介    本次的项目是编写一个斗地主的小游戏,实现语言:java:主要完成了GUI设计.计时线程.算法.本次项目的主要目的是对算法的学习.算法分析在心得里面. 技术难点:1.图片的移动    2.计时线程的设定   3.对牌的分割,必须考虑到优先拆分方案,将权值低的拆分方案舍去. 4.在删除的时候遇到问题了,删除不了. 二.结对分工及过程 本次结对项目的成员有两个,张国伟:负责对GUI界面的设计,完成功能:洗牌功能,发牌功能,打牌功能的图片的位移处理,基本打牌的桌面等等. 我主要负责对

【python游戏编程之旅】第五篇---嗷大喵爱吃鱼小游戏开发实例

本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 我们一同在前几期的博客中已经学到了很多pygame的基本知识了,现在该做个小游戏实战一下了. 前几期博客链接: 第一篇:初识pygame  http://www.cnblogs.com/msxh/p/4966899.html 第二篇:pygame中的IO.数据  http://www.cnblogs.com/msxh/p/4973003.html 第三篇:pygame事件与设备轮询  http://www

《Java小游戏实现》:坦克大战(续三)

<Java小游戏实现>:坦克大战(续三) 相关博文: <Java小游戏实现>:坦克大战http://blog.csdn.net/u010412719/article/details/51712663 <Java小游戏实现>:坦克大战(续一):http://blog.csdn.net/u010412719/article/details/51723570 <Java小游戏实现>:坦克大战(续二):http://blog.csdn.net/u010412719/

DirectX游戏开发——从一个小游戏开始

本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/26364129 写在前面:自己对DirectX挺感兴趣的,加上自己目前在研究3D重建方面的东西,所以利用课余时间学习一下.看了一段时间的书,感觉还是靠动手编写一些小例子来学习,进步的更快体会的更深.所以从我自己写的一个小游戏开始吧,把自己学习心得和自己的一些想法写下来.更是欢迎有兴趣的童鞋来和我交流. 首先:先把我的小例子分享

【原创游戏】Extreme Ball——虐心小游戏

控制小球,收集所有金币,到达漩涡,即可通过关卡. 但是这些关卡可没有那么容易通过哦. 游戏中特有宇宙探险地图,使你可以在浩瀚的宇宙中自由的探索,体验不一样的乐趣. 控制小球进入黑洞即过关的小游戏,休闲必备.但是难度--不会那么容易通过的-- 新增宇宙探险模式,地图大小堪比沙盒游戏,主角小球需避开宇宙中的星球.黑洞.怪物.炸弹.流星等障碍才能找到出口!对手机有一定性能要求,适合高手挑战! app下载地址:https://pan.baidu.com/s/1hs19Thq 大地图~ 原文地址:http

原生JS实现的h5小游戏-植物大战僵尸

代码地址如下:http://www.demodashi.com/demo/12755.html 项目介绍 本项目是利用原生js实现的h5小游戏-植物大战僵尸,主要结合了一下自己对于h5小游戏的理解,结合面向对象的编程思想进行开发,在实现时使用了部分es6语法,对于es6语法不太熟悉的小伙伴可以先查阅相关资料了解一下. 如有需要,可根据自己的需求修改源码样式.源码配置属性代码,实现个性化定制. 以下为文件目录结构示意图,核心代码在js文件夹下的四个common.js.main.js.game.js

js选择颜色小游戏(随机生成不含重复数字的数组,通过数组中的数控制定义好的数组)

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>js网页版小游戏</title> <style media="screen"> .wrap { width: 577px; outline: 1px solid hotpink; margin: 100px auto; box-shadow: 0 0 5px; } .