Пример #1
0
    public override void OnInspectorGUI()
    {
        //base.OnInspectorGUI();
        //myMessage = "Finds a Transform for the camera to focus";
        EditorGUILayout.HelpBox(myMessage, myType);
        //EditorGUILayout.LabelField("Test Bool");
        CameraLookAt script = (CameraLookAt)target;

        script.lookAtTarget = (Transform)EditorGUILayout.ObjectField("Look At Transform", script.lookAtTarget, typeof(Transform), true);

        EditorGUILayout.BeginToggleGroup("Requires a target", script.lookAtTarget);
        script.bSmooth  = EditorGUILayout.Toggle("Use Smoothing", script.bSmooth);
        script.dampener = EditorGUILayout.FloatField("Slerp Speed", script.dampener);
        EditorGUILayout.EndToggleGroup();

        if (GUILayout.Button("LookAtPlayer"))
        {
            script.LocatePlayer();
        }
        if (script.lookAtTarget != null)
        {
            myMessage = "Camera will look at " + script.lookAtTarget.name;
            myType    = MessageType.Info;
            if (GUILayout.Button("Clear Transform"))
            {
                script.lookAtTarget = null;
            }
        }
        else
        {
            myMessage = "Camera has no target... Send help";
            myType    = MessageType.Error;
        }
    }
Пример #2
0
        private SaveableData ToSaveableData()
        {
            var obj = new SaveableData {
                Width                                 = Width,
                Height                                = Height,
                SoftwareDownsize                      = SoftwareDownsize,
                CameraPosition                        = CameraPosition.ToArray(),
                CameraLookAt                          = CameraLookAt.ToArray(),
                CameraFov                             = CameraFov,
                AlignCar                              = AlignCar,
                AlignCameraHorizontally               = AlignCameraHorizontally,
                AlignCameraHorizontallyOffset         = AlignCameraHorizontallyOffset,
                AlignCameraHorizontallyOffsetRelative = AlignCameraHorizontallyOffsetRelative,
                AlignCameraVertically                 = AlignCameraVertically,
                AlignCameraVerticallyOffset           = AlignCameraVerticallyOffset,
                AlignCameraVerticallyOffsetRelative   = AlignCameraVerticallyOffsetRelative,
                SteerDeg                              = SteerDeg,
                HeadlightsEnabled                     = HeadlightsEnabled,
                BrakeLightsEnabled                    = BrakeLightsEnabled,
                LeftDoorOpen                          = LeftDoorOpen,
                RightDoorOpen                         = RightDoorOpen,
                ShowDriver                            = ShowDriver,
            };

            Save(obj);
            return(obj);
        }
Пример #3
0
    void Start()
    {
        cameraLook = GetComponent <CameraLookAt> ();

        startTime     = Time.time;
        journeyLength = Vector3.Distance(startMarker.position, endMarker.position);
    }
Пример #4
0
 public void LookAt(Transform lookAtTransform, string lookAtType)
 {
     if (CameraLookAt.Check(lookAtType))
     {
         this.lookAtTransform = lookAtTransform;
         this.lookAtType      = lookAtType;
         this.lookAtChange    = true;
     }
 }
Пример #5
0
    // Use this for initialization
    private void Start()
    {
        b = GetComponent <MonoBoid>().boid;



        //take this out
        CameraLookAt.Register(b);
    }
Пример #6
0
    public override void OnInspectorGUI()
    {
        CameraLookAt targetScript = (CameraLookAt)target;

        targetScript.cameraTarget = EditorGUILayout.Vector3Field("Look at point", targetScript.cameraTarget);
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
Пример #7
0
 public Camera(IMessenger messenger, CameraRotation rotation, CameraLookAt lookAt, CameraView view, BeatModifier beatModifier, double fov, double zoom)
 {
     Messenger    = messenger ?? throw new ArgumentNullException(nameof(messenger));
     Rotation     = rotation;
     LookAt       = lookAt;
     View         = view;
     BeatModifier = beatModifier ?? throw new ArgumentNullException(nameof(beatModifier));
     FOV          = fov;
     Zoom         = zoom;
 }
Пример #8
0
    void OnSceneGUI()
    {
        CameraLookAt targetScript = (CameraLookAt)target;

        targetScript.cameraTarget = Handles.PositionHandle(targetScript.cameraTarget, Quaternion.identity);
        Handles.SphereCap(0, targetScript.cameraTarget, Quaternion.identity, 2);
        if (GUI.changed)
        {
            EditorUtility.SetDirty(target);
        }
    }
Пример #9
0
    public MapCamera()
    {
        _camera        = GameObject.FindGameObjectWithTag(AppConfig.TAB_MAIN_CAMERA);
        _cameraControl = _camera.GetComponent <CameraControl> ();

        _cAutoFollow = new CameraAutoFollow(this);
        _cAutoScale  = new CameraAutoScale(this);
        _cSmoothMove = new CameraSmoothMove(this);
        _cShowTeam   = new CameraShowTeam(this);
        _cLookAt     = new CameraLookAt(this);
        _cManualMove = new CameraManualMove(this);
    }
Пример #10
0
    public static CameraLookAt Instance()
    {
        if (!cameraLookAt)
        {
            cameraLookAt = FindObjectOfType(typeof(CameraLookAt)) as CameraLookAt;
            if (!cameraLookAt)
            {
                Debug.LogError("There needs to be one active CameraLookAt script on a GameObject in your scene.");
            }
        }

        return(cameraLookAt);
    }
Пример #11
0
        private void SyncCamera()
        {
            if (_cameraBusy)
            {
                return;
            }
            _cameraBusy = true;

            try {
                var offset = AlignCar ? -Renderer.CarCenter : Vector3.Zero;
                CameraPosition.Set(Renderer.Camera.Position + offset);
                CameraLookAt.Set((Renderer.CameraOrbit?.Target ?? Renderer.Camera.Position + Renderer.Camera.Look) + offset);
                CameraFov = Renderer.Camera.FovY.ToDegrees();
                AlignCameraHorizontally = false;
                AlignCameraVertically   = false;
            } finally {
                _cameraBusy = false;
            }
        }
Пример #12
0
        protected void LoadCamera(SaveableData o)
        {
            _cameraBusy = true;

            try {
                CameraPosition.Set(o.CameraPosition);
                CameraLookAt.Set(o.CameraLookAt);
                CameraFov = o.CameraFov;
                AlignCar  = o.AlignCar;
                AlignCameraHorizontally               = o.AlignCameraHorizontally;
                AlignCameraHorizontallyOffset         = o.AlignCameraHorizontallyOffset;
                AlignCameraHorizontallyOffsetRelative = o.AlignCameraHorizontallyOffsetRelative;
                AlignCameraVertically               = o.AlignCameraVertically;
                AlignCameraVerticallyOffset         = o.AlignCameraVerticallyOffset;
                AlignCameraVerticallyOffsetRelative = o.AlignCameraVerticallyOffsetRelative;
            } finally {
                _cameraBusy = false;
                UpdateCamera();
            }
        }
Пример #13
0
    // Update is called once per frame
    void Update()
    {
        if (targetLookAt != null)
        {
            transform.LookAt(targetLookAt, Vector3.up);
        }


        if (Input.GetMouseButton(1))
        {
            stopFloating = true;
            float rotX = Input.GetAxis("Mouse X");
            float rotY = Input.GetAxis("Mouse Y");

            CameraLookAt lookAt = Camera.main.GetComponent <CameraLookAt>();

            lookAt.body.AddRelativeForce(Vector3.right * rotX, ForceMode.VelocityChange);
            lookAt.body.AddRelativeForce(Vector3.forward * rotY, ForceMode.VelocityChange);
        }
        else
        {
            stopFloating = false;
        }
    }
Пример #14
0
        private void UpdateCamera()
        {
            if (_cameraBusy)
            {
                return;
            }
            _cameraBusy = true;

            try {
                Renderer.SetCamera(CameraPosition.ToVector(), CameraLookAt.ToVector(), CameraFov.ToRadians());

                if (AlignCar)
                {
                    Renderer.AlignCar();
                }

                Renderer.AlignCamera(AlignCameraHorizontally, AlignCameraHorizontallyOffset, AlignCameraHorizontallyOffsetRelative,
                                     AlignCameraVertically, AlignCameraVerticallyOffset, AlignCameraVerticallyOffsetRelative);

                _cameraIgnoreNext = true;
            } finally {
                _cameraBusy = false;
            }
        }
Пример #15
0
    // Update is called once per frame
    void Update()
    {
        Rect      cameraRange     = vo.cameraRange;
        Transform cameraTransform = vo.cameraTransform;

        //镜头新的位置
        float cameraX = cameraTransform.position.x;
        float cameraY = cameraTransform.position.y;

        //移动方式
        if (vo.lookAtChange)
        {
            vo.lookAtChange = false;
            lookAt          = null;
            switch (vo.lookAtType)
            {
            case CameraLookAt.LOOK_AT_CENTER:
                lookAt = new LookAtCenter();
                break;

            case CameraLookAt.LOOK_AT_RANGE:
                lookAt = new LookAtRange();
                break;

            case CameraLookAt.LOOK_AT_FRONT:
                lookAt = new LookAtFront();
                break;
            }
        }
        if (lookAt != null)
        {
            lookAt.Update();
            if (lookAt.moveFlag)      //镜头缓动效果,离目标点越近移动越慢,但有最小速度限制
            {
                float spped  = 0.05f; //每次移动剩余距离的 0.05 倍,计算总的时间需要用到积分,有点难度 (@.@)
                float min    = 0.005f;
                float speedx = (lookAt.moveX - cameraTransform.position.x) * spped;
                float speedy = (lookAt.moveY - cameraTransform.position.y) * spped;
                if (speedx > 0 && speedx < min)
                {
                    speedx = min;
                }
                if (speedx < 0 && speedx > -min)
                {
                    speedx = -min;
                }
                if (speedy > 0 && speedy < min)
                {
                    speedy = min;
                }
                if (speedy < 0 && speedy > -min)
                {
                    speedy = -min;
                }
                float xValue = (cameraTransform.position.x - lookAt.moveX) * (cameraTransform.position.x + speedx - lookAt.moveX);
                float yValue = (cameraTransform.position.y - lookAt.moveY) * (cameraTransform.position.y + speedy - lookAt.moveY);
                if ((xValue < 0 || speedx == 0) && (yValue < 0 || speedy == 0)) //移动完成
                {
                    cameraX = lookAt.moveX;
                    cameraY = lookAt.moveY;
                }
                else
                {
                    float x = cameraTransform.position.x;
                    float y = cameraTransform.position.y;
                    if (xValue > 0)
                    {
                        x = cameraTransform.position.x + speedx;
                    }
                    else if (xValue < 0)
                    {
                        x = lookAt.moveX;
                    }
                    if (yValue > 0)
                    {
                        y = cameraTransform.position.y + speedy;
                    }
                    else if (yValue < 0)
                    {
                        y = lookAt.moveY;
                    }
                    cameraX = x;
                    cameraY = y;
                }
            }
        }

        //添加新的屏幕震动
        while (vo.shakes.Count != 0)
        {
            CameraShake shake = vo.shakes[0] as CameraShake;
            //震动唯一,则覆盖之前的
            if (shake.only)
            {
                for (int i = 0; i < shakes.Count; i++)
                {
                    if ((shakes[i] as CameraShake).tag == shake.tag)
                    {
                        shakes.RemoveAt(i);
                        i--;
                    }
                }
            }
            shakes.Add(shake);
            vo.shakes.RemoveAt(0);
        }

        //计算屏幕震动
        for (int i = 0; i < shakes.Count; i++)
        {
            (shakes[i] as CameraShake).Update();
            cameraX += (shakes[i] as CameraShake).x;
            cameraY += (shakes[i] as CameraShake).y;
            if ((shakes[i] as CameraShake).completeFlag == true)
            {
                shakes.RemoveAt(i);
                i--;
            }
        }

        //控制镜头移动范围
        if (cameraX > cameraRange.x + cameraRange.width)
        {
            cameraX = cameraRange.x + cameraRange.width;
        }
        if (cameraX < cameraRange.x)
        {
            cameraX = cameraRange.x;
        }
        if (cameraY > cameraRange.y + cameraRange.height)
        {
            cameraY = cameraRange.y + cameraRange.height;
        }
        if (cameraY < cameraRange.y)
        {
            cameraY = cameraRange.y;
        }

        //设置镜头位置
        cameraTransform.position = new Vector3(cameraX, cameraY);
    }
Пример #16
0
    // Use this for initialization
    void Start()
    {
        CameraLookAt script = GetComponent <CameraLookAt>();

        lookAtTarget = script.lookAtTarget;
    }
Пример #17
0
 void Start()
 {
     camlook = Camera.main.GetComponent <CameraLookAt>();
 }
Пример #18
0
 void Start()
 {
     cameraLookAt  = CameraLookAt.Instance();
     hudController = HUDController.Instance();
 }