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; } }
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); } } } }
// Call this from OnDisable() public void Shutdown() { if (mComponentEditor != null) { UnityEngine.Object.DestroyImmediate(mComponentEditor); } mComponentEditor = null; Target = null; mComponent = null; }
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); } } }
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 }
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); }
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; } }
// 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(); }
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; }
private void Start() { rabbitCamera = GetComponent <CinemachineVirtualCamera>().GetCinemachineComponent(CinemachineCore.Stage.Body); }