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/


原创粉丝点击