public void Set(CameraMoveLimiter limiter) { mCamPos = limiter.TargetCam.transform.position; mCamRot = limiter.TargetCam.transform.rotation; mFar = limiter.DepthVolume; mNear = limiter.Planes[4].GetDistanceToPoint(mCamPos) * -1f; Quaternion _normalRotate = Quaternion.FromToRotation(Vector3.up, limiter.Planes[2].normal); Vector3 _downForwardNormal = _normalRotate * Vector3.forward; _normalRotate = Quaternion.FromToRotation(Vector3.down, limiter.Planes[3].normal); Vector3 _upForwardNormal = _normalRotate * Vector3.forward; mFov = GetAngle(_downForwardNormal, _upForwardNormal); float _width = Vector3.Distance( limiter.TargetCam.ViewportToWorldPoint(new Vector3(0f, 1f, mFar)) , limiter.TargetCam.ViewportToWorldPoint(new Vector3(1f, 1f, mFar))); float _height = Vector3.Distance( limiter.TargetCam.ViewportToWorldPoint(new Vector3(1f, 1f, mFar)) , limiter.TargetCam.ViewportToWorldPoint(new Vector3(1f, 0f, mFar))); mAspect = _width / _height; // for(int i = 0; i < limiter.Planes.Length; ++i) // { // Plane _plane = limiter.Planes[i]; // if(_plane.Equals(default(Plane))) // continue; // GameObject p = GameObject.CreatePrimitive(PrimitiveType.Plane); // p.name = "Plane " + i.ToString(); // p.transform.rotation = Quaternion.FromToRotation(Vector3.up, _plane.normal); // p.transform.position = -_plane.normal * _plane.distance; // p.transform.localScale = new Vector3(10, 10, 10); // } _isSet = true; }
// Start is called before the first frame update void Start() { mLimiter = new CameraMoveLimiter(Camera.main, LimitShape.Square_pyramid, Dist); debugger.Set(mLimiter); }