コード例 #1
0
    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;
    }
コード例 #2
0
 // Start is called before the first frame update
 void Start()
 {
     mLimiter = new CameraMoveLimiter(Camera.main, LimitShape.Square_pyramid, Dist);
     debugger.Set(mLimiter);
 }