How I’ve handled multiple screen resolutions in my Unity3D game
来源:互联网 发布:mysql如何添加触发器 编辑:程序博客网 时间:2024/06/05 19:23
using UnityEngine;public class CameraPositioner : MonoBehaviour { #region Public Fields public bool moveIfInvisible = false; public int iterations = 32; public float baseDistance = 15; public float distanceMultiplier = 0.75f; #endregion #region Private Fields private Camera camera;#endregion #region Slots void Start() { camera = Camera.main; PositionCamera(); } void Update() { } #endregion #region Private Methods private void PositionCamera() { var points = InvisiblePoints(); if (points.Length == 0) { return; } if (!moveIfInvisible && !AreVisible(points)) { return; } float distance = baseDistance; for (int i = 0; i < iterations; ++i) { if (AreVisible(points)) { MoveForward(distance); } else { MoveBackward(distance); } distance *= distanceMultiplier; } } private Vector3[] InvisiblePoints() { var objects = GameObject.FindGameObjectsWithTag("CameraInvisible"); var result = new Vector3[objects.Length]; for (int i = 0; i < objects.Length; ++i) { result[i] = objects[i].transform.position; } return result; } private bool AreVisible(Vector3[] points) { for (int i = 0; i < points.Length; ++i) { var screenPoint = camera.WorldToScreenPoint(points[i]); if (screenPoint.x >= 0 && screenPoint.x < Screen.width && screenPoint.y > 0 && screenPoint.y < Screen.height) { return true; } } return false; } private void MoveForward(float distance) { Move(distance); } private void MoveBackward(float distance) { Move(-distance); } private void Move(float distance) { transform.Translate(Vector3.forward * distance, Space.Self); } #endregion}
参考:
http://www.madpixelmachine.com/2014/06/10/how-ive-handled-multiple-screen-resolutions-in-my-unity3d-game/
阅读全文
0 0
- How I’ve handled multiple screen resolutions in my Unity3D game
- How do I pause my game?
- How do I pause my game?
- How do I Install VE?
- I've got my alumni card
- I've got my alumni card
- How can I handle hardware keys in my application?
- How I explained OOD to my wife[Thinking in OOD]
- How do I configure my DNS settings in Ubuntu server?
- I've been a blogger. This is my first blog.
- Guide for Supporting Multiple Resolutions
- How can I recover a file that I deleted in my local repo from the remote repo in Git?
- How can I put a checkbox in a column of my DataGrid?
- How can I make my existing HTML files work in XML?
- How do I use the DCMTK libraries in my own application?
- How do I add capabilities to my executable in qt for symbian?
- How do I enable global actions such as Cut, Paste, and Print in my editor?
- How do I install a file in my local repository along with a generic POM?
- 【Git & GitHub】利用Git Bash进行第一次提交文件
- String、StringBuffer、与StringBuilder的区别
- Linux SVN 命令详解
- 语音合成vocoder(四) aperiodicity参数
- npm版本升级问题
- How I’ve handled multiple screen resolutions in my Unity3D game
- 对象序列化
- Android 5.0 M特性 样式设置
- C++文件读写详解
- Whitelabel error page问题
- 【MOOC】数字信号处理-电子科技大学-第十二周 离散傅里叶变换--FFT算法及应用
- MySQL性能分析及explain的使用
- JAVA基础——HashSet怎样判断元素重复
- 数据库mariadb的基本操作