Exemplo n.º 1
0
    private void TestCodeFunc()
    {
        GameObject cmVcam1Obj = GameObject.Find("CM vcam1");

        CinemachineVirtualCamera cinemachineVirtualCamera = cmVcam1Obj.GetComponent <CinemachineVirtualCamera>();

        cinemachineComponentBase = cinemachineVirtualCamera.GetCinemachineComponent(CinemachineCore.Stage.Body);
        cinemachineTransposer    = cinemachineComponentBase as CinemachineTransposer;

        moveTran = GameObject.Find("cmCameraLookAt").transform;
        //CinemachineEventAdd cinemachineEventAdd = null;
        cinemachineEventAdd = cmVcam1Obj.AddComponent <CinemachineNationCameraMoveEnd>();
        cinemachineVirtualCamera.AddExtension(cinemachineEventAdd);
        cinemachineEventAdd.onVirtualCameraEnter += OnVirtualCameraEnter;


        //cinemachineComponentBase.FollowTargetPosition.Set(1, 1, 1);
        //cinemachineComponentBase.FollowTargetPosition;
        //CinemachineHardLockToTarget cinemachineHardLockToTarget = cinemachineComponentBase as CinemachineHardLockToTarget;

        EasyTouch.On_Drag      += EasyTouchOn_Drag;
        EasyTouch.On_PinchIn   += EasyTouchOn_PinchIn;
        EasyTouch.On_PinchOut  += EasyTouchOn_PinchOut;
        EasyTouch.On_SimpleTap += EasyTouchOn_SimpleTap;


        mapPlaneA = new Plane(moveTran.forward * -1, Vector3.Distance(moveTran.position, Vector3.zero));



        // 方向
        // 位置
    }
        // This code dynamically discovers eligible classes and builds the menu
        // data for the various component pipeline stages.
        static void UpdateStaticData()
        {
            if (sStageData != null)
            {
                return;
            }
            sStageData = new StageData[Enum.GetValues(typeof(CinemachineCore.Stage)).Length];

            var stageTypes = new List <Type> [Enum.GetValues(typeof(CinemachineCore.Stage)).Length];

            for (int i = 0; i < stageTypes.Length; ++i)
            {
                sStageData[i].Name = ((CinemachineCore.Stage)i).ToString();
                stageTypes[i]      = new List <Type>();
            }

            // Get all ICinemachineComponents
            var allTypes
                = ReflectionHelpers.GetTypesInAllDependentAssemblies(
                      (Type t) => typeof(CinemachineComponentBase).IsAssignableFrom(t) && !t.IsAbstract);

            // Create a temp game object so we can instance behaviours
            GameObject go = new GameObject("Cinemachine Temp Object");

            go.hideFlags = HideFlags.DontSaveInBuild | HideFlags.DontSaveInEditor;
            foreach (Type t in allTypes)
            {
                MonoBehaviour            b = go.AddComponent(t) as MonoBehaviour;
                CinemachineComponentBase c = b != null ? (CinemachineComponentBase)b : null;
                if (c != null)
                {
                    CinemachineCore.Stage stage = c.Stage;
                    stageTypes[(int)stage].Add(t);
                }
            }
            GameObject.DestroyImmediate(go);

            // Create the static lists
            for (int i = 0; i < stageTypes.Length; ++i)
            {
                stageTypes[i].Insert(0, null);  // first item is "none"
                sStageData[i].types = stageTypes[i].ToArray();
                GUIContent[] names = new GUIContent[sStageData[i].types.Length];
                for (int n = 0; n < names.Length; ++n)
                {
                    if (n == 0)
                    {
                        bool useSimple
                            = (i == (int)CinemachineCore.Stage.Aim) ||
                              (i == (int)CinemachineCore.Stage.Body);
                        names[n] = new GUIContent((useSimple) ? "Do nothing" : "none");
                    }
                    else
                    {
                        names[n] = new GUIContent(InspectorUtility.NicifyClassName(sStageData[i].types[n].Name));
                    }
                }
                sStageData[i].PopupOptions = names;
            }
        }
Exemplo n.º 3
0
    void Start()
    {
        virtualCamera = GetComponent <CinemachineVirtualCamera>();
        componentBase = virtualCamera.GetCinemachineComponent <CinemachineComponentBase>();

        zoomDistance = (maxZoom + minZoom) / 2;
        rawZoom      = zoomDistance;
    }
        void SetPipelineStage(CinemachineCore.Stage stage, Type type)
        {
            Undo.SetCurrentGroupName("Cinemachine pipeline change");

            // Get the existing components
            for (int j = 0; j < targets.Length; j++)
            {
                var       vCam  = targets[j] as CinemachineVirtualCamera;
                Transform owner = vCam.GetComponentOwner();
                if (owner == null)
                {
                    continue; // maybe it's a prefab
                }
                CinemachineComponentBase[] components = owner.GetComponents <CinemachineComponentBase>();
                if (components == null)
                {
                    components = new CinemachineComponentBase[0];
                }

                // Find an appropriate insertion point
                int numComponents = components.Length;
                int insertPoint   = 0;
                for (insertPoint = 0; insertPoint < numComponents; ++insertPoint)
                {
                    if (components[insertPoint].Stage >= stage)
                    {
                        break;
                    }
                }

                // Remove the existing components at that stage
                for (int i = numComponents - 1; i >= 0; --i)
                {
                    if (components[i].Stage == stage)
                    {
                        Undo.DestroyObjectImmediate(components[i]);
                        components[i] = null;
                        --numComponents;
                        if (i < insertPoint)
                        {
                            --insertPoint;
                        }
                    }
                }

                // Add the new stage
                if (type != null)
                {
                    MonoBehaviour b = Undo.AddComponent(owner.gameObject, type) as MonoBehaviour;

                    while (numComponents-- > insertPoint)
                    {
                        UnityEditorInternal.ComponentUtility.MoveComponentDown(b);
                    }
                }
            }
        }
Exemplo n.º 5
0
 // Call this from OnDisable()
 public void Shutdown()
 {
     if (mComponentEditor != null)
     {
         UnityEngine.Object.DestroyImmediate(mComponentEditor);
     }
     mComponentEditor = null;
     Target           = null;
     mComponent       = null;
 }
Exemplo n.º 6
0
    void Awake()
    {
        dummyPlayerTransform.position = dummyStart.position;
        ComponentBase = chasmCam.GetCinemachineComponent(CinemachineCore.Stage.Body);
        if (ComponentBase is CinemachineFramingTransposer == false)
        {
            Debug.LogError("Cannot find starting camera's framing transposer");
        }

        Timer             = 0;
        ChasmCamStartDist = (ComponentBase as CinemachineFramingTransposer).m_CameraDistance;
    }
        private void SetPipelineStage(CinemachineCore.Stage stage, Type type)
        {
            Undo.SetCurrentGroupName("Cinemachine pipeline change");

            // Get the existing components
            var owner = Target.GetComponentOwner();

            var components = owner.GetComponents <CinemachineComponentBase>();

            if (components == null)
            {
                components = new CinemachineComponentBase[0];
            }

            // Find an appropriate insertion point
            var numComponents = components.Length;
            var insertPoint   = 0;

            for (insertPoint = 0; insertPoint < numComponents; ++insertPoint)
            {
                if (components[insertPoint].Stage >= stage)
                {
                    break;
                }
            }

            // Remove the existing components at that stage
            for (var i = numComponents - 1; i >= 0; --i)
            {
                if (components[i].Stage == stage)
                {
                    Undo.DestroyObjectImmediate(components[i]);
                    components[i] = null;
                    --numComponents;
                    if (i < insertPoint)
                    {
                        --insertPoint;
                    }
                }
            }

            // Add the new stage
            if (type != null)
            {
                var b = Undo.AddComponent(owner.gameObject, type) as MonoBehaviour;
                while (numComponents-- > insertPoint)
                {
                    ComponentUtility.MoveComponentDown(b);
                }
            }
        }
Exemplo n.º 8
0
 private int GetPopupIndexForComponent(CinemachineComponentBase c)
 {
     if (c != null)
     {
         var types = sStageData[(int)mStage].types;
         for (int i = types.Length - 1; i > 0; --i)
         {
             if (c.GetType() == types[i])
             {
                 return(i);
             }
         }
     }
     return(0); // none
 }
Exemplo n.º 9
0
 UnityEditor.Editor GetEditorForPipelineStage(CinemachineCore.Stage stage)
 {
     foreach (UnityEditor.Editor e in m_componentEditors)
     {
         if (e != null)
         {
             CinemachineComponentBase c = e.target as CinemachineComponentBase;
             if (c != null && c.Stage == stage)
             {
                 return(e);
             }
         }
     }
     return(null);
 }
Exemplo n.º 10
0
        private void SetCameraAimMode()
        {
            CinemachineVirtualCamera vcam    = followClearshotGO.GetComponent <CinemachineVirtualCamera>();
            CinemachineComponentBase current = vcam.GetCinemachineComponent(CinemachineCore.Stage.Aim);

            if (current.GetType() == _agentWithFocus.Settings.cameraAimMode.GetType())
            {
                return;
            }
            else
            {
                // Destroy the existing component (have to try to destroy all as its a generic method)
                vcam.DestroyCinemachineComponent <CinemachineHardLookAt>();
                vcam.DestroyCinemachineComponent <CinemachineGroupComposer>();
                vcam.DestroyCinemachineComponent <CinemachineHardLookAt>();
                vcam.DestroyCinemachineComponent <CinemachineHardLookAt>();
                vcam.DestroyCinemachineComponent <CinemachinePOV>();
            }

            switch (_agentWithFocus.Settings.cameraAimMode)
            {
            case AgentSettingSO.CameraAimMode.Composer:
                vcam.AddCinemachineComponent <CinemachineComposer>();
                break;

            case AgentSettingSO.CameraAimMode.GroupComposer:
                vcam.AddCinemachineComponent <CinemachineGroupComposer>();
                break;

            case AgentSettingSO.CameraAimMode.HardLookAt:
                vcam.AddCinemachineComponent <CinemachineHardLookAt>();
                break;

            case AgentSettingSO.CameraAimMode.POV:
                vcam.AddCinemachineComponent <CinemachinePOV>();
                break;

            case AgentSettingSO.CameraAimMode.SameAsFollowTarget:
                vcam.AddCinemachineComponent <CinemachineSameAsFollowTarget>();
                break;

            default:
                Debug.LogError("Sorry, don't know how to use a camera Aim policy of " + _agentWithFocus.Settings.cameraAimMode);
                break;
            }
        }
Exemplo n.º 11
0
 // Call this from Editor's OnInspectorGUI - returns new component if user changes type
 public void OnInspectorGUI(CinemachineComponentBase component)
 {
     if (component != mComponent)
     {
         if (mComponentEditor != null)
         {
             mComponentEditor.ResetTarget();
             UnityEngine.Object.DestroyImmediate(mComponentEditor);
         }
         mComponentEditor = null;
         mComponent       = component;
     }
     if (mComponent != null && mComponentEditor == null)
     {
         UnityEditor.Editor.CreateCachedEditor(mComponent, null, ref mComponentEditor);
     }
     mStageSelection = GetPopupIndexForComponent(mComponent);
     mStageError     = mComponent == null ? false : !mComponent.IsValid;
     DrawComponentInspector();
 }
Exemplo n.º 12
0
        private void DrawComponentInspector()
        {
            const float kBoxMargin = 4;  // GML wtf get rid of this
            const float indentSize = 15; // GML wtf get rid of this

            int index = (int)mStage;

            EditorGUILayout.BeginVertical(GUI.skin.box);
            EditorGUIUtility.labelWidth -= kBoxMargin;

            Rect rect = EditorGUILayout.GetControlRect(true);

            // Don't use PrefixLabel() because it will link the enabled status of field and label
            GUIContent label = new GUIContent(InspectorUtility.NicifyClassName(mStage.ToString()));

            if (mStageError)
            {
                label.image = EditorGUIUtility.IconContent("console.warnicon.sml").image;
            }
            float labelWidth = EditorGUIUtility.labelWidth - EditorGUI.indentLevel * indentSize;
            Rect  r          = rect; r.width = labelWidth; r.x -= kBoxMargin;

            EditorGUI.LabelField(r, label);

            r = rect; r.width -= labelWidth; r.x += labelWidth;
            bool wasEnabled = GUI.enabled;

            if (TypeIsLocked)
            {
                GUI.enabled = false;
            }
            int newSelection = EditorGUI.Popup(r, mStageSelection, sStageData[index].PopupOptions);

            GUI.enabled = wasEnabled;

            Type type = sStageData[index].types[newSelection];

            if (newSelection != mStageSelection)
            {
                if (mComponent != null)
                {
                    if (DestroyComponent != null)
                    {
                        DestroyComponent(mComponent);
                    }
                }
                if (newSelection != 0)
                {
                    sStageData[index].IsExpanded = true;
                    if (SetComponent != null)
                    {
                        SetComponent(type);
                    }
                }
                mComponent = null;
                GUIUtility.ExitGUI();
                return; // let the component editor be recreated
            }

            // Draw the embedded editor
            if (type != null)
            {
                r = new Rect(rect.x - kBoxMargin, rect.y, labelWidth, rect.height);
                sStageData[index].IsExpanded = EditorGUI.Foldout(
                    r, sStageData[index].IsExpanded, GUIContent.none, true);
                if (sStageData[index].IsExpanded)
                {
                    // Make the editor for that stage
                    if (mComponentEditor != null)
                    {
                        ++EditorGUI.indentLevel;
                        EditorGUILayout.Separator();
                        mComponentEditor.OnInspectorGUI();
                        EditorGUILayout.Separator();
                        --EditorGUI.indentLevel;
                    }
                }
            }
            EditorGUILayout.EndVertical();
            EditorGUIUtility.labelWidth += kBoxMargin;
        }
Exemplo n.º 13
0
 private void Start()
 {
     rabbitCamera = GetComponent <CinemachineVirtualCamera>().GetCinemachineComponent(CinemachineCore.Stage.Body);
 }