static CreateRigWithUndo() { CinemachineFreeLook.CreateRigOverride = (CinemachineFreeLook vcam, string name, CinemachineVirtualCamera copyFrom) => { // Create a new rig with default components GameObject go = InspectorUtility.CreateGameObject(name); Undo.RegisterCreatedObjectUndo(go, "created rig"); Undo.SetTransformParent(go.transform, vcam.transform, "parenting rig"); CinemachineVirtualCamera rig = Undo.AddComponent <CinemachineVirtualCamera>(go); Undo.RecordObject(rig, "creating rig"); if (copyFrom != null) { ReflectionHelpers.CopyFields(copyFrom, rig); } else { go = rig.GetComponentOwner().gameObject; Undo.RecordObject(Undo.AddComponent <CinemachineOrbitalTransposer>(go), "creating rig"); Undo.RecordObject(Undo.AddComponent <CinemachineComposer>(go), "creating rig"); } return(rig); }; CinemachineFreeLook.DestroyRigOverride = (GameObject rig) => { Undo.DestroyObjectImmediate(rig); }; }
static Cinemachine.CinemachineVirtualCamera InternalCreateVirtualCamera( string name, bool selectIt, params Type[] components) { // Create a new virtual camera CreateCameraBrainIfAbsent(); GameObject go = Cinemachine.Editor.InspectorUtility.CreateGameObject( GenerateUniqueObjectName(typeof(Cinemachine.CinemachineVirtualCamera), name), typeof(Cinemachine.CinemachineVirtualCamera)); if (SceneView.lastActiveSceneView != null) { go.transform.position = SceneView.lastActiveSceneView.pivot; } Undo.RegisterCreatedObjectUndo(go, "create " + name); Cinemachine.CinemachineVirtualCamera vcam = go.GetComponent <Cinemachine.CinemachineVirtualCamera>(); GameObject componentOwner = vcam.GetComponentOwner().gameObject; foreach (Type t in components) { Undo.AddComponent(componentOwner, t); } vcam.InvalidateComponentPipeline(); if (selectIt) { Selection.activeObject = go; } return(vcam); }
static int GetComponentOwner(IntPtr L) { try { ToLua.CheckArgsCount(L, 1); Cinemachine.CinemachineVirtualCamera obj = (Cinemachine.CinemachineVirtualCamera)ToLua.CheckObject <Cinemachine.CinemachineVirtualCamera>(L, 1); UnityEngine.Transform o = obj.GetComponentOwner(); ToLua.Push(L, o); return(1); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
static CreateRigWithUndo() { CinemachineFreeLook.CreateRigOverride = (CinemachineFreeLook vcam, string name, CinemachineVirtualCamera copyFrom) => { // If there is an existing rig with this name, delete it List <Transform> list = new List <Transform>(); foreach (Transform child in vcam.transform) { if (child.GetComponent <CinemachineVirtualCamera>() != null && child.gameObject.name == name) { list.Add(child); } } foreach (Transform child in list) { Undo.DestroyObjectImmediate(child.gameObject); } // Create a new rig with default components GameObject go = new GameObject(name); Undo.RegisterCreatedObjectUndo(go, "created rig"); Undo.SetTransformParent(go.transform, vcam.transform, "parenting rig"); CinemachineVirtualCamera rig = Undo.AddComponent <CinemachineVirtualCamera>(go); Undo.RecordObject(rig, "creating rig"); if (copyFrom != null) { ReflectionHelpers.CopyFields(copyFrom, rig); } else { go = rig.GetComponentOwner().gameObject; Undo.RecordObject(Undo.AddComponent <CinemachineOrbitalTransposer>(go), "creating rig"); Undo.RecordObject(Undo.AddComponent <CinemachineComposer>(go), "creating rig"); } return(rig); }; CinemachineFreeLook.DestroyRigOverride = (GameObject rig) => { Undo.DestroyObjectImmediate(rig); }; }
private void CreateRigs(CinemachineVirtualCamera[] copyFrom) { // Invalidate the cache m_Rigs = null; mOribitals = null; string[] rigNames = RigNames; float[] softCenterDefaultsV = new float[] { 0.5f, 0.55f, 0.6f }; for (int i = 0; i < rigNames.Length; ++i) { CinemachineVirtualCamera src = null; if (copyFrom != null && copyFrom.Length > i) { src = copyFrom[i]; } CinemachineVirtualCamera rig = null; if (CreateRigOverride != null) { rig = CreateRigOverride(this, rigNames[i], src); } else { // If there is an existing rig with this name, delete it List <Transform> list = new List <Transform>(); foreach (Transform child in transform) { if (child.GetComponent <CinemachineVirtualCamera>() != null && child.gameObject.name == rigNames[i]) { list.Add(child); } } foreach (Transform child in list) { DestroyImmediate(child.gameObject); } // Create a new rig with default components GameObject go = new GameObject(rigNames[i]); go.transform.parent = transform; rig = go.AddComponent <CinemachineVirtualCamera>(); if (src != null) { ReflectionHelpers.CopyFields(src, rig); } else { go = rig.GetComponentOwner().gameObject; go.AddComponent <CinemachineOrbitalTransposer>(); go.AddComponent <CinemachineComposer>(); } } // Set up the defaults rig.InvalidateComponentPipeline(); CinemachineOrbitalTransposer orbital = rig.GetCinemachineComponent <CinemachineOrbitalTransposer>(); if (orbital == null) { orbital = rig.AddCinemachineComponent <CinemachineOrbitalTransposer>(); // should not happen } if (src == null) { // Only set defaults if not copying orbital.m_Radius = DefaultRadius[i]; orbital.m_HeightOffset = DefaultHeight[i]; CinemachineComposer composer = rig.GetCinemachineComponent <CinemachineComposer>(); if (composer != null) { composer.m_HorizontalDamping = composer.m_VerticalDamping = 0; composer.m_ScreenX = 0.5f; composer.m_ScreenY = softCenterDefaultsV[i]; composer.m_DeadZoneWidth = composer.m_DeadZoneHeight = 0; composer.m_SoftZoneWidth = composer.m_SoftZoneHeight = 0.8f; composer.m_BiasX = composer.m_BiasY = 0; } } } }