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: -170Rect 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 6if (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个单位