From ef0f5fa53d177950bc9fc54cab05def78813d246 Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Mon, 12 Jun 2023 10:18:35 -0400 Subject: [PATCH 01/21] API in Deoccluder and ThirdPersonFollow to access which collision objects are impacting the camera position. (#881) --- com.unity.cinemachine/CHANGELOG.md | 1 + .../Editors/CinemachineDeoccluderEditor.cs | 7 ++- .../Behaviours/CinemachineDeoccluder.cs | 52 +++++++++++-------- .../CinemachineThirdPersonFollow.cs | 5 ++ 4 files changed, 42 insertions(+), 23 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index 51c978324..e7c139862 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. - Renamed CinemachineSplineDolly.CameraUp to CameraRotation, which more accurately reflects what it does. +- Added API in Deoccluder and ThirdPersonFollow to access which collision objects are impacting the camera position. ## [3.0.0-pre.7] - 2023-05-04 diff --git a/com.unity.cinemachine/Editor/Editors/CinemachineDeoccluderEditor.cs b/com.unity.cinemachine/Editor/Editors/CinemachineDeoccluderEditor.cs index a7920eac9..cde61ce92 100644 --- a/com.unity.cinemachine/Editor/Editors/CinemachineDeoccluderEditor.cs +++ b/com.unity.cinemachine/Editor/Editors/CinemachineDeoccluderEditor.cs @@ -13,6 +13,7 @@ namespace Unity.Cinemachine.Editor class CinemachineDeoccluderEditor : UnityEditor.Editor { CinemachineDeoccluder Target => target as CinemachineDeoccluder; + static List> s_pathsCache; public override VisualElement CreateInspectorGUI() { @@ -48,9 +49,11 @@ static void DrawColliderGizmos(CinemachineDeoccluder collider, GizmoType type) Gizmos.DrawLine(pos, pos + forwardFeelerVector * distance); // Show the avoidance path, for debugging - for (int i = 0; i < collider.DebugPaths.Count; ++i) + s_pathsCache ??= new (); + collider.DebugCollisionPaths(s_pathsCache, null); + for (int i = 0; i < s_pathsCache.Count; ++i) { - var path = collider.DebugPaths[i]; + var path = s_pathsCache[i]; Gizmos.color = CinemachineDeoccluderPrefs.CameraPathColor.Value; Vector3 p0 = vcam.State.ReferenceLookAt; for (int j = 0; j < path.Count; ++j) diff --git a/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs b/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs index b1c93d9e8..cd589ece6 100644 --- a/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs +++ b/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs @@ -173,6 +173,7 @@ public struct QualityEvaluation [FoldoutWithEnabledButton] public QualityEvaluation ShotQualityEvaluation = QualityEvaluation.Default; + List m_extraStateCache; /// See whether an object is blocking the camera's view of the target /// The virtual camera in question. This might be different from the @@ -246,16 +247,18 @@ class VcamExtraState : VcamExtraStateBase public bool TargetObscured; public float OcclusionStartTime; public List DebugResolutionPath; + public List OccludingObjects; public Vector3 PreviousCameraOffset; public Vector3 PreviousCameraPosition; public float PreviousDampTime; - public void AddPointToDebugPath(Vector3 p) + public void AddPointToDebugPath(Vector3 p, Collider c) { #if UNITY_EDITOR - if (DebugResolutionPath == null) - DebugResolutionPath = new List(); + DebugResolutionPath ??= new (); DebugResolutionPath.Add(p); + OccludingObjects ??= new (); + OccludingObjects.Add(c); #endif } @@ -288,23 +291,30 @@ public void ResetDistanceSmoothing(float smoothingTime) } }; - List m_extraStateCache; - - /// Inspector API for debugging collision resolution path - internal List> DebugPaths + /// Debug API for discovering which objects are occluding the camera, + /// and the path taken by the camera to ist deoccluded position. Note that + /// this information is only collected while running in the editor. In the build, the + /// return values will always be empty. This is for performance reasons. + /// A container to hold lists of points representing the camera path. + /// There will be one path per CinemachineCamera influenced by this deoccluder. + /// This parameter may be null. + /// A container to hold lists of Colliders representing the obstacles encountered. + /// There will be one list per CinemachineCamera influenced by this deoccluder. + /// This parameter may be null. + public void DebugCollisionPaths(List> paths, List> obstacles) { - get + paths?.Clear(); + obstacles?.Clear(); + m_extraStateCache ??= new(); + GetAllExtraStates(m_extraStateCache); + for (int i = 0; i < m_extraStateCache.Count; ++i) { - List> list = new (); - m_extraStateCache ??= new(); - GetAllExtraStates(m_extraStateCache); - for (int i = 0; i < m_extraStateCache.Count; ++i) + var e = m_extraStateCache[i]; + if (e.DebugResolutionPath != null && e.DebugResolutionPath.Count > 0) { - var e = m_extraStateCache[i]; - if (e.DebugResolutionPath != null && e.DebugResolutionPath.Count > 0) - list.Add(e.DebugResolutionPath); + paths?.Add(e.DebugResolutionPath); + obstacles?.Add(e.OccludingObjects); } - return list; } } @@ -471,7 +481,7 @@ Vector3 PreserveLineOfSight(ref CameraState state, ref VcamExtraState extra) var pos = cameraPos + displacement; if (hitInfo.collider != null) { - extra.AddPointToDebugPath(pos); + extra.AddPointToDebugPath(pos, hitInfo.collider); if (AvoidObstacles.Strategy != ObstacleAvoidance.ResolutionStrategy.PullCameraForward) { Vector3 targetToCamera = cameraPos - lookAtPos; @@ -550,7 +560,7 @@ Vector3 PushCameraBack( // We hit something. Stop there and take a step along that wall. var adjustment = hitInfo.distance - k_PrecisionSlush; pos = ray.GetPoint(adjustment); - extra.AddPointToDebugPath(pos); + extra.AddPointToDebugPath(pos, hitInfo.collider); if (iterations > 1) pos = PushCameraBack( pos, dir, hitInfo, @@ -572,7 +582,7 @@ Vector3 PushCameraBack( // All clear ray = new Ray(pos, dir); - extra.AddPointToDebugPath(pos); + extra.AddPointToDebugPath(pos, null); distance = GetPushBackDistance(ray, startPlane, targetDistance, lookAtPos); if (distance > Epsilon) { @@ -581,14 +591,14 @@ Vector3 PushCameraBack( CollideAgainst & ~TransparentLayers, IgnoreTag)) { pos = ray.GetPoint(distance); // no obstacles - all good - extra.AddPointToDebugPath(pos); + extra.AddPointToDebugPath(pos, null); } else { // We hit something. Stop there and maybe take a step along that wall float adjustment = hitInfo.distance - k_PrecisionSlush; pos = ray.GetPoint(adjustment); - extra.AddPointToDebugPath(pos); + extra.AddPointToDebugPath(pos, hitInfo.collider); if (iterations > 1) pos = PushCameraBack( pos, dir, hitInfo, lookAtPos, startPlane, diff --git a/com.unity.cinemachine/Runtime/Components/CinemachineThirdPersonFollow.cs b/com.unity.cinemachine/Runtime/Components/CinemachineThirdPersonFollow.cs index 72fa9cd6b..93121f273 100644 --- a/com.unity.cinemachine/Runtime/Components/CinemachineThirdPersonFollow.cs +++ b/com.unity.cinemachine/Runtime/Components/CinemachineThirdPersonFollow.cs @@ -114,6 +114,9 @@ public struct ObstacleSettings /// If enabled, camera will be pulled in front of occluding obstacles. [FoldoutWithEnabledButton] public ObstacleSettings AvoidObstacles = ObstacleSettings.Default; + + /// The current obstacle that is being avoided. + public Collider CurrentObstacle { get; set; } #endif // State info @@ -258,6 +261,7 @@ void PositionCamera(ref CameraState curState, float deltaTime) var camPos = hand - (targetForward * (CameraDistance - m_DampingCorrection.z)); #if CINEMACHINE_PHYSICS + CurrentObstacle = null; if (AvoidObstacles.Enabled) { // Check if hand is colliding with something, if yes, then move the hand @@ -336,6 +340,7 @@ Vector3 ResolveCollisions( new Ray(root, dir), cameraRadius, out RaycastHit hitInfo, len, AvoidObstacles.CollisionFilter, AvoidObstacles.IgnoreTag)) { + CurrentObstacle = hitInfo.collider; var desiredResult = hitInfo.point + hitInfo.normal * cameraRadius; desiredCorrection = (desiredResult - tip).magnitude; } From 01a32e20860d82c3ebde1ed55339378f6291949f Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Wed, 21 Jun 2023 14:18:05 -0400 Subject: [PATCH 02/21] Added OrbitalFollow.RecenteringTarget, fixed broken samples (#882) --- com.unity.cinemachine/CHANGELOG.md | 2 + .../CinemachineOrbitalFollow.md | 5 + .../images/OrbitalFollowInspector.png | Bin 25223 -> 30876 bytes .../Editors/CinemachineOrbitalFollowEditor.cs | 14 + .../Editor/Editors/CmCameraEditor.cs | 3 +- .../Components/CinemachineOrbitalFollow.cs | 80 +++++- .../Runtime/Components/CinemachinePanTilt.cs | 4 +- .../Runtime/Core/InputAxis.cs | 11 +- .../Samples~/3D Samples/ClearShot.unity | 44 ++- .../3D Samples/FadeOutNearbyObjects.unity | 15 +- .../3D Samples/FreeLook Deoccluder.unity | 257 ++++++------------ .../FreeLook on Spherical Surface.unity | 229 ++++++---------- .../Samples~/3D Samples/Lock-on Target.unity | 21 +- .../Samples~/3D Samples/SplitScreenCar.unity | 18 +- .../Shared Assets/Prefabs/CapsuleCar.prefab | 6 +- .../Shared Assets/Prefabs/Player 2D.prefab | 72 ++--- .../Shared Assets/Prefabs/Player.prefab | 64 ++--- .../Scripts/SimplePlayerAimController.cs | 94 ------- .../Tests/Editor/InputAxisTests.cs | 6 +- 19 files changed, 363 insertions(+), 582 deletions(-) delete mode 100644 com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index e7c139862..902620ac9 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -7,9 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] - Bugfix: Occasional precision issue when camera rotation is exactly 180 degress, causing rotational flickering. - Bugfix: Deceleration at the end of axis range was too aggressive. +- Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. - Renamed CinemachineSplineDolly.CameraUp to CameraRotation, which more accurately reflects what it does. +- Renamed InputAxis.DoRecentering() to InputAxis.UpdateRecentering() - Added API in Deoccluder and ThirdPersonFollow to access which collision objects are impacting the camera position. diff --git a/com.unity.cinemachine/Documentation~/CinemachineOrbitalFollow.md b/com.unity.cinemachine/Documentation~/CinemachineOrbitalFollow.md index 7f2157c71..bc73f561f 100644 --- a/com.unity.cinemachine/Documentation~/CinemachineOrbitalFollow.md +++ b/com.unity.cinemachine/Documentation~/CinemachineOrbitalFollow.md @@ -33,6 +33,11 @@ If you attach an input controller to the CinemachineCamera, then the player can | __Radius__ || In Sphere mode, this defines the radius of the surface sphere | | __Top__, __Center__, __Bottom__ || In ThreeRing mode, these define the height and radius of the 3 orbit rings that are used to create the orbit surface. These values are relative to the target's origin. | | __Spline Curvature__ || In ThreeRing mode, this defines the tautness of the line that connects the 3 orbits. This line determines the final shape of the surface. | +| __Recentering Target__ || Defines the reference frame for horizontal recentering. The axis center will be dynamically updated to be behind the selected object. | +||_Axis Center_|Static reference frame. Axis center value is not dynamically updated.| +||_Parent Object_|Axis center is dynamically adjusted to be behind the parent object's forward.| +||_Tracking Target_|Axis center is dynamically adjusted to be behind the Tracking Target's forward.| +||_LookAt Target_|Axis center is dynamically adjusted to be behind the LookAt Target's forward.| | __Horizontal Axis__ || Horizontal positioning (rotation about the Y axis) of the camera on the surface. Value is in degrees, and Range defines the allowable value limits. If Wrap is checked, the value wraps around when it crosses the edge of its range. You can define a Center position here, which can be used if recentering logic is enabled in the axis driver. | | __Vertical Axis__ || Vertical positioning (rotation about the X axis) of the camera on the surface. Value is in degrees in Sphere mode, but is in arbitrary units in ThreeRing mode. Range defines the allowable value limits. If Wrap is checked, the value wraps around when it crosses the edge of its range. You can define a Center position here, which can be used if recentering logic is enabled in the axis driver. | | __Radial Axis__ || Controls the camera distance from the target by scaling the orbits. Value is a scalar multiplier of the orbit heights and radii. Range defines the allowable value limits. If Wrap is checked, the value wraps around when it crosses the edge of its range. You can define a Center position here, which can be used if recentering logic is enabled in the axis driver. | diff --git a/com.unity.cinemachine/Documentation~/images/OrbitalFollowInspector.png b/com.unity.cinemachine/Documentation~/images/OrbitalFollowInspector.png index f7874a8e455d54923387dc5ab63eb549422f4186..4ea92eb30cfb228e2ddc725d6c7f8797f0fdba62 100644 GIT binary patch literal 30876 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 Y_d569yp}!-mj@FW>YD02!8t|!4*-f)-2eap literal 25223 zcmbrlbzD<_{67i~C+Y}6V1#rjIYIO5`rKKqq~s-!hj()6c{Zr zx?#jUe7^U0A2%NNkNdcPu(_S%**Wicy`Hb<^ZAN=^-`JS4&5CB0s<11=L)Y02na)g zKSN?L@Xh=yLUrJc(Dk*lJVDtI!y52`$VyIKj)0&t{_eTyP2lrwr{}t^1OyMlum1?+ zmv=3IFDcvyh>yI5E_xLP~98NDM0{)_3Qih|r*FQd(w<9a{E)T^s) z8IzO40%6O}AVOG7{__-O6{oD%f+AIa;VtBv0^zrlgNo^I&za0TnboxV;tHic2t=mv*;q%AwgM4!>D%EZpv!lSAuE{@cJ$YC?}MJ#jO8 z$L&`aSe9@Gp>NagmrfSrx24Wj3tDe6`BiwX6{a8Yx1B6tFOFx8N7{Bi3W(Ix(%`Sh z#ADJl{4$_!HUMv#DF>kf30zpo;Qs{wac8bdeDzFG5R^?uc_ zF3nRfDVeTLdQsl>kj>Wy&&H;nkx9MPQ-Y)|`ikos&6-3 zO|!j+nHAl0R>M0x1cP4~mZ`S3%i)c9>n7pRShB#AE^OmUj{byb9@N-|X#VG2fsKn* zWtm4IV>2H2ds?p$KJ80Msy^|Od(Z!9XSaPaS^3#fW!t>fWV_AAbo!iSq<4*_LbTG5 zxz$L!sClM%qZVWIQ41>=78M-sesyu|cqiEH6tOvHN=lgb12HjZsqZi~H9rvU+l<`{ z#Qz-T3q3_Lf9P=hN*IMxXiS%$Nr%U zf5Tjecxo%K)(+#u|7F1KUWzZL1mGUk;ep%!`}A<^jj!?LUV3!m+1xD|o%NL%;h~IC z3g0XI?CjIirDRmV%O~?6#8>`VNCGpfinaNct)ymkCi=HlS8Ejw2t#vO&gCfn9tt$H^E;I_w^!8M_c4-+uK_D_Tw7b zMYWqxkZpS2i*qf*{q#L84y-)|JVXiDM@)j8j5_cRC&4im(qNI0SH~23_#fRt^jvAb zDQ-Z3G0wd;t@`d;i7Ytwiw*5Z-|g1=nvt56h#oHK-AET{u~|RY?MSX1ZmAex8p>-v zZSvGLujKgph)p{^vssn`R%t6R`6Uh78*F<1AI3fQA}KI(HKYvBPOsNxYe`wt54U&A zC5unMOhx|QnTY0|?uM|Y0Pr|{D0{XlTb!A%1N#l~us^jkE-1cb1B9~17io>Kgt-pk zpTwjkSw2%|pBFNYdMj@3E%?lk^$yQ?O7g90W$QB5kp#bS=zZYHyMhOz$=5Li9)yZ{ z?jP_9qakzQc25_#K6NSj8an@E)+A*muk3iDwxNEj-Asp!=2Z!{@aZinxosDJ{*v2h zTj={$l4flpmXQ=2`=_KmcgOsJE&Ms%igM=IQ~Dnj2=N8&_fOdML&uq4D5WY3*g&>+ zo{60Z$_X|i75FKbE{9WeVes}Lov1y@U%rocD%OGe;mbJXzZ-4L>#g^FqCkz z%J}!lX!0v9srQ|_(hCu6FLH8jIwxYK#Q0=!wWdZ{wiS$!5;4rY&%zVE^hBDlKTks4 zd*VCyI`qoXqdpizSgAwP6xexy|ATaywylmXIGYgTYCE2}Y&zvP2V&y(-a<>`H{Pso z^>O9$PT6RpY(;Yn*n&$&r{9Fw)8kE<^KS|DyS~Es;`Dx!tY5g>nNe!C>2C*v!S}X{ z%Bh>+CU(0)AkvKFx>qor7`eqy98@5$%J;Ae>?7^!w+{K_1Z7cj@a)DHSFCM1Q z82KfA8T>}IYIJ{9nul9;?bim=rl|)&@UxgvwVR2yovG5w4Oc^ec<%DT zfjN>N)uvNAmK_4k8&#}7AvI~uJqZ$T%PZAM

<~ZI#*NQL~~Yi_W>B6SZTZoye&Z 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%0AyWa)% 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 Target.Radius))); var m_Orbits = ux.AddChild(new PropertyField(serializedObject.FindProperty(() => Target.Orbits))); + var row = ux.AddChild(InspectorUtility.PropertyRow( + serializedObject.FindProperty(() => Target.RecenteringTarget), out _)); + + var recenteringInactive = row.Contents.AddChild(new Label(" (inactive)") + { + tooltip = "Horizontal recentering is currently inactive, so the recentering target will be ignored.", + style = { alignSelf = Align.Center } + }); + var recenteringProp = serializedObject.FindProperty(() => Target.HorizontalAxis).FindPropertyRelative( + "Recentering").FindPropertyRelative("Enabled"); + + ux.AddSpace(); this.AddInputControllerHelp(ux, "Orbital Follow has no input axis controller behaviour."); ux.Add(new PropertyField(serializedObject.FindProperty(() => Target.HorizontalAxis))); @@ -47,6 +59,8 @@ public override VisualElement CreateInspectorGUI() m_Radius.SetVisible(mode == CinemachineOrbitalFollow.OrbitStyles.Sphere); m_Orbits.SetVisible(mode == CinemachineOrbitalFollow.OrbitStyles.ThreeRing); }); + + ux.TrackPropertyWithInitialCallback(recenteringProp, (p) => recenteringInactive.SetVisible(!p.boolValue)); return ux; } diff --git a/com.unity.cinemachine/Editor/Editors/CmCameraEditor.cs b/com.unity.cinemachine/Editor/Editors/CmCameraEditor.cs index a8718f687..55a635ddb 100644 --- a/com.unity.cinemachine/Editor/Editors/CmCameraEditor.cs +++ b/com.unity.cinemachine/Editor/Editors/CmCameraEditor.cs @@ -74,7 +74,8 @@ public override VisualElement CreateInspectorGUI() if (Target == null) return; // object deleted var brain = CinemachineCore.FindPotentialTargetBrain(Target); - Target.InternalUpdateCameraState(brain == null ? Vector3.up : brain.DefaultWorldUp, -1); + var deltaTime = Application.isPlaying ? Time.deltaTime : -1; + Target.InternalUpdateCameraState(brain == null ? Vector3.up : brain.DefaultWorldUp, deltaTime); bool haveDefault = Target.Target.TrackingTarget != Target.Follow; defaultTargetLabel.SetVisible(haveDefault); if (haveDefault) diff --git a/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs b/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs index 3b53ec0a6..bcb82fec5 100644 --- a/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs +++ b/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs @@ -48,6 +48,31 @@ public enum OrbitStyles [HideFoldout] public Cinemachine3OrbitRig.Settings Orbits = Cinemachine3OrbitRig.Settings.Default; + ///

Defines the reference frame in which horizontal recentering is done. + public enum ReferenceFrames + { + /// Static reference frame. Axis center value is not dynamically updated. + AxisCenter, + + /// Axis center is dynamically adjusted to be behind the parent + /// object's forward. + ParentObject, + + /// Axis center is dynamically adjusted to be behind the + /// Tracking Target's forward. + TrackingTarget, + + /// Axis center is dynamically adjusted to be behind the + /// LookAt Target's forward. + LookAtTarget + } + + /// Defines the reference frame for horizontal recentering. The axis center + /// will be dynamically updated to be behind the selected object. + [Tooltip("Defines the reference frame for horizontal recentering. The axis center " + + "will be dynamically updated to be behind the selected object.")] + public ReferenceFrames RecenteringTarget = ReferenceFrames.TrackingTarget; + /// Axis representing the current horizontal rotation. Value is in degrees /// and represents a rotation about the up vector [Tooltip("Axis representing the current horizontal rotation. Value is in degrees " @@ -87,6 +112,8 @@ void OnValidate() HorizontalAxis.Validate(); VerticalAxis.Validate(); RadialAxis.Validate(); + + HorizontalAxis.Restrictions &= ~(InputAxis.RestrictionFlags.NoRecentering | InputAxis.RestrictionFlags.RangeIsDriven); } void Reset() @@ -357,15 +384,11 @@ public override void MutateCameraState(ref CameraState curState, float deltaTime m_ResetHandler?.Invoke(); Vector3 offset = GetCameraPoint(); - if (TrackerSettings.BindingMode != BindingMode.LazyFollow) - HorizontalAxis.Restrictions - &= ~(InputAxis.RestrictionFlags.NoRecentering | InputAxis.RestrictionFlags.RangeIsDriven); - else - { - HorizontalAxis.Value = 0; - HorizontalAxis.Restrictions - |= InputAxis.RestrictionFlags.NoRecentering | InputAxis.RestrictionFlags.RangeIsDriven; - } + + var gotInput = HorizontalAxis.TrackValueChange() | HorizontalAxis.TrackValueChange() | RadialAxis.TrackValueChange(); + if (TrackerSettings.BindingMode == BindingMode.LazyFollow) + HorizontalAxis.SetValueAndLastValue(0); + m_TargetTracker.TrackTarget( this, deltaTime, curState.ReferenceUp, offset, TrackerSettings, out Vector3 pos, out Quaternion orient); @@ -389,10 +412,41 @@ public override void MutateCameraState(ref CameraState curState, float deltaTime } m_PreviousOffset = offset; - var gotInput = HorizontalAxis.TrackValueChange() | HorizontalAxis.TrackValueChange() | RadialAxis.TrackValueChange(); - HorizontalAxis.DoRecentering(deltaTime, gotInput); - VerticalAxis.DoRecentering(deltaTime, gotInput); - RadialAxis.DoRecentering(deltaTime, gotInput); + if (HorizontalAxis.Recentering.Enabled) + UpdateHorizontalCenter(orient); + + HorizontalAxis.UpdateRecentering(deltaTime, gotInput); + VerticalAxis.UpdateRecentering(deltaTime, gotInput); + RadialAxis.UpdateRecentering(deltaTime, gotInput); + } + + void UpdateHorizontalCenter(Quaternion referenceOrientation) + { + // Get the recentering target's forward vector + var fwd = Vector3.forward; + switch (RecenteringTarget) + { + case ReferenceFrames.AxisCenter: + if (TrackerSettings.BindingMode == BindingMode.LazyFollow) + HorizontalAxis.Center = 0; + return; + case ReferenceFrames.ParentObject: + if (transform.parent != null) + fwd = transform.parent.forward; + break; + case ReferenceFrames.TrackingTarget: + if (FollowTarget != null) + fwd = FollowTarget.forward; + break; + case ReferenceFrames.LookAtTarget: + if (LookAtTarget != null) + fwd = LookAtTarget.forward; + break; + } + // Align the axis center to be behind fwd + var up = referenceOrientation * Vector3.up; + fwd.ProjectOntoPlane(up); + HorizontalAxis.Center = -Vector3.SignedAngle(fwd, referenceOrientation * Vector3.forward, up); } /// For the inspector diff --git a/com.unity.cinemachine/Runtime/Components/CinemachinePanTilt.cs b/com.unity.cinemachine/Runtime/Components/CinemachinePanTilt.cs index d8a77e014..a4069f2ff 100644 --- a/com.unity.cinemachine/Runtime/Components/CinemachinePanTilt.cs +++ b/com.unity.cinemachine/Runtime/Components/CinemachinePanTilt.cs @@ -137,8 +137,8 @@ public override void MutateCameraState(ref CameraState curState, float deltaTime m_PreviousCameraRotation = rot; var gotInput = PanAxis.TrackValueChange() | TiltAxis.TrackValueChange(); - PanAxis.DoRecentering(deltaTime, gotInput); - TiltAxis.DoRecentering(deltaTime, gotInput); + PanAxis.UpdateRecentering(deltaTime, gotInput); + TiltAxis.UpdateRecentering(deltaTime, gotInput); } /// diff --git a/com.unity.cinemachine/Runtime/Core/InputAxis.cs b/com.unity.cinemachine/Runtime/Core/InputAxis.cs index 1ab73578a..b7c53cffc 100644 --- a/com.unity.cinemachine/Runtime/Core/InputAxis.cs +++ b/com.unity.cinemachine/Runtime/Core/InputAxis.cs @@ -222,7 +222,7 @@ struct RecenteringState RecenteringState m_RecenteringState; /// - /// Call this before calling DoRecentering. Will track any value changes so that the re-centering clock + /// Call this before calling UpdateRecentering. Will track any value changes so that the re-centering clock /// is updated properly. /// /// True if value changed. This value can be used to cancel re-centering when multiple @@ -239,11 +239,16 @@ public bool TrackValueChange() return false; } + internal void SetValueAndLastValue(float value) + { + Value = m_RecenteringState.m_LastValue = value; + } + /// Call this to manage re-centering axis value to axis center. /// This assumes that TrackValueChange() has been called already this frame. /// Current deltaTime, or -1 for immediate re-centering /// If true, cancel any re-centering currently in progress and reset the timer. - public void DoRecentering(float deltaTime, bool forceCancel) + public void UpdateRecentering(float deltaTime, bool forceCancel) { if ((Restrictions & (RestrictionFlags.NoRecentering | RestrictionFlags.Momentary)) != 0) return; @@ -292,7 +297,7 @@ public void DoRecentering(float deltaTime, bool forceCancel) /// Trigger re-centering immediately, regardless of whether re-centering /// is enabled or the wait time has elapsed. - public void RecenterNow() => m_RecenteringState.m_ForceRecenter = true; + public void TriggerRecentering() => m_RecenteringState.m_ForceRecenter = true; /// Cancel any current re-centering in progress, and reset the wait time public void CancelRecentering() diff --git a/com.unity.cinemachine/Samples~/3D Samples/ClearShot.unity b/com.unity.cinemachine/Samples~/3D Samples/ClearShot.unity index aa37b6c92..a5cac40e9 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/ClearShot.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/ClearShot.unity @@ -500,7 +500,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 470754142} - m_LocalRotation: {x: -0.0056971363, y: 0.98527575, z: -0.16756213, w: -0.03349952} + m_LocalRotation: {x: -0.005325681, y: 0.9870713, z: -0.15663888, w: -0.033560164} m_LocalPosition: {x: 2.2, y: 11.8, z: 26.4} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -520,7 +520,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f38bda98361e1de48a4ca2bd86ea3c17, type: 3} m_Name: m_EditorClassIdentifier: - TargetOffset: {x: 0, y: 0, z: 0} + TargetOffset: {x: 0, y: 1, z: 0} Lookahead: Enabled: 0 Time: 0 @@ -550,11 +550,9 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Priority: - Enabled: 0 - m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + Enabled: 1 + m_Value: 2 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 20 @@ -608,7 +606,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 591947960} - m_LocalRotation: {x: 0.037421178, y: -1e-45, z: -0, w: 0.9992996} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -0.66, y: 1, z: -19.61} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -647,7 +645,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f38bda98361e1de48a4ca2bd86ea3c17, type: 3} m_Name: m_EditorClassIdentifier: - TargetOffset: {x: 0, y: 0.7, z: 0} + TargetOffset: {x: 0, y: 1, z: 0} Lookahead: Enabled: 0 Time: 0 @@ -677,11 +675,9 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Priority: - Enabled: 0 - m_Value: 0 - OutputChannel: - Enabled: 0 + Enabled: 1 m_Value: 1 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -861,9 +857,7 @@ MonoBehaviour: Priority: Enabled: 0 m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -1354,7 +1348,7 @@ Camera: height: 1 near clip plane: 0.1 far clip plane: 5000 - field of view: 20 + field of view: 50 orthographic: 0 orthographic size: 10 m_Depth: -1 @@ -1379,8 +1373,8 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1397234029} - m_LocalRotation: {x: -0.0080131795, y: 0.96693045, z: -0.0306169, w: -0.25306895} - m_LocalPosition: {x: 13.014894, y: 2.4203663, z: 9.494938} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.66, y: 1, z: -19.61} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] @@ -1412,7 +1406,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1418606827} - m_LocalRotation: {x: -0.0080131795, y: 0.96693045, z: -0.0306169, w: -0.25306895} + m_LocalRotation: {x: -0.0036278474, y: 0.9669206, z: -0.01377354, w: -0.25467968} m_LocalPosition: {x: 13.014894, y: 2.4203663, z: 9.494938} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -1432,7 +1426,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f38bda98361e1de48a4ca2bd86ea3c17, type: 3} m_Name: m_EditorClassIdentifier: - TargetOffset: {x: 0, y: 0, z: 0} + TargetOffset: {x: 0, y: 1, z: 0} Lookahead: Enabled: 0 Time: 0 @@ -1462,11 +1456,9 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Priority: - Enabled: 0 - m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + Enabled: 1 + m_Value: 3 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 30 diff --git a/com.unity.cinemachine/Samples~/3D Samples/FadeOutNearbyObjects.unity b/com.unity.cinemachine/Samples~/3D Samples/FadeOutNearbyObjects.unity index e78e9ad05..3aab2428e 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/FadeOutNearbyObjects.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/FadeOutNearbyObjects.unity @@ -981,7 +981,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 385349248} - m_LocalRotation: {x: 0.10352379, y: -4.772184e-18, z: 7.458585e-17, w: 0.994627} + m_LocalRotation: {x: 0.10352379, y: 3.0236938e-18, z: -3.147152e-19, w: 0.994627} m_LocalPosition: {x: 0.71, y: 3.0070581, z: -18.15717} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -1038,7 +1038,7 @@ MonoBehaviour: Owner: {fileID: 385349256} Enabled: 1 Input: - InputAction: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + InputAction: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Mouse X LegacyGain: 200 @@ -1050,7 +1050,7 @@ MonoBehaviour: Owner: {fileID: 385349256} Enabled: 1 Input: - InputAction: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + InputAction: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: -1 LegacyInput: Mouse Y LegacyGain: -200 @@ -1062,7 +1062,7 @@ MonoBehaviour: Owner: {fileID: 385349256} Enabled: 1 Input: - InputAction: {fileID: 5082991133974614888, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + InputAction: {fileID: 5082991133974614888, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Mouse ScrollWheel LegacyGain: 200 @@ -1103,6 +1103,7 @@ MonoBehaviour: Radius: 2.5 Height: 0.1 SplineCurvature: 0.5 + RecenteringTarget: 2 HorizontalAxis: Value: 0 Center: 0 @@ -1148,9 +1149,7 @@ MonoBehaviour: Priority: Enabled: 0 m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -2482,7 +2481,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 867266292} - m_LocalRotation: {x: 0.10352379, y: -4.772184e-18, z: 7.458585e-17, w: 0.994627} + m_LocalRotation: {x: 0.10352379, y: 3.0236938e-18, z: -3.147152e-19, w: 0.994627} m_LocalPosition: {x: 0.71, y: 3.0070581, z: -18.15717} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 diff --git a/com.unity.cinemachine/Samples~/3D Samples/FreeLook Deoccluder.unity b/com.unity.cinemachine/Samples~/3D Samples/FreeLook Deoccluder.unity index f2e37d11e..9a47a5751 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/FreeLook Deoccluder.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/FreeLook Deoccluder.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657844, g: 0.49641222, b: 0.57481676, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -208,7 +208,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 140191132} - m_LocalRotation: {x: 0.15022579, y: -1e-45, z: 0, w: 0.98865175} + m_LocalRotation: {x: 0.15086463, y: -1.1945524e-22, z: 1.8230227e-23, w: 0.9885544} m_LocalPosition: {x: 0, y: 2.25, z: -4} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -256,63 +256,51 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: HelpText value: "This scene shows a Freelook camera with a Deoccluder to handle occlusion by walls.\r\n\r\nTransparent objects are ignored by Cinemachine Deoccluder, @@ -321,8 +309,7 @@ PrefabInstance: Spacebar to jump, Shift to sprint. Mouse moves the camera. If using Input package, right mouse button to jump and middle mouse button to sprint." objectReference: {fileID: 0} - - target: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_Name value: HelpUI objectReference: {fileID: 0} @@ -339,118 +326,95 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 7632911616050328933, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616050328933, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Layer value: 1 objectReference: {fileID: 0} - - target: {fileID: 7632911616050328955, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616050328955, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: ce4c5a6977f4c4a03a175dacd27f529e, type: 2} - - target: {fileID: 7632911616286984587, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616286984587, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: ce4c5a6977f4c4a03a175dacd27f529e, type: 2} - - target: {fileID: 7632911616286984628, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616286984628, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Layer value: 1 objectReference: {fileID: 0} - - target: {fileID: 7632911616416927593, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616416927593, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: ce4c5a6977f4c4a03a175dacd27f529e, type: 2} - - target: {fileID: 7632911616416927594, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616416927594, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Layer value: 1 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521422, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521422, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Name value: Glass Wall Section objectReference: {fileID: 0} - - target: {fileID: 7632911616693521422, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521422, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Layer value: 1 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalPosition.x value: -5.6 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911617428946528, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911617428946528, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Layer value: 1 objectReference: {fileID: 0} - - target: {fileID: 7632911617428946535, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911617428946535, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: ce4c5a6977f4c4a03a175dacd27f529e, type: 2} - - target: {fileID: 7632911617567587698, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911617567587698, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: ce4c5a6977f4c4a03a175dacd27f529e, type: 2} - - target: {fileID: 7632911617567587711, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911617567587711, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Layer value: 1 objectReference: {fileID: 0} @@ -501,8 +465,7 @@ MonoBehaviour: Owner: {fileID: 1727080744} Enabled: 1 Input: - InputAction: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Mouse X LegacyGain: 200 @@ -514,8 +477,7 @@ MonoBehaviour: Owner: {fileID: 1727080744} Enabled: 1 Input: - InputAction: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: -1 LegacyInput: Mouse Y LegacyGain: -200 @@ -527,8 +489,7 @@ MonoBehaviour: Owner: {fileID: 1727080744} Enabled: 1 Input: - InputAction: {fileID: 5082991133974614888, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: 5082991133974614888, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Mouse ScrollWheel LegacyGain: 200 @@ -558,7 +519,7 @@ MonoBehaviour: IgnoreY: 0 Damping: {x: 0.5, y: 0.5} Composition: - ScreenPosition: {x: 0, y: 0.001118541} + ScreenPosition: {x: 0, y: 0} DeadZone: Enabled: 0 Size: {x: 0.2, y: 0.2} @@ -580,7 +541,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: TrackerSettings: - BindingMode: 4 + BindingMode: 5 PositionDamping: {x: 1, y: 1, z: 1} AngularDampingMode: 0 RotationDamping: {x: 1, y: 1, z: 1} @@ -598,13 +559,14 @@ MonoBehaviour: Radius: 2.15 Height: 0.1 SplineCurvature: 0.5 + RecenteringTarget: 2 HorizontalAxis: - Value: 0 - Center: 0 + Value: -0 + Center: -0 Range: {x: -180, y: 180} Wrap: 1 Recentering: - Enabled: 0 + Enabled: 1 Wait: 1 Time: 2 Restrictions: 0 @@ -643,9 +605,7 @@ MonoBehaviour: Priority: Enabled: 0 m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -680,7 +640,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1727080740} - m_LocalRotation: {x: 0.15022579, y: -1e-45, z: -0, w: 0.98865175} + m_LocalRotation: {x: 0.15086463, y: -1.1945524e-22, z: 1.8230227e-23, w: 0.9885544} m_LocalPosition: {x: 0, y: 2.25, z: -4} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -713,7 +673,7 @@ MonoBehaviour: DistanceLimit: 0 MinimumOcclusionTime: 0 CameraRadius: 0.1 - Strategy: 1 + Strategy: 0 MaximumEffort: 4 SmoothingTime: 0 Damping: 0.5 @@ -742,8 +702,7 @@ MonoBehaviour: RefIds: [] --- !u!4 &543450653499076494 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + m_CorrespondingSourceObject: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} m_PrefabInstance: {fileID: 5995860983734692292} m_PrefabAsset: {fileID: 0} --- !u!1001 &993682861312921315 @@ -754,63 +713,51 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916670, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916670, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_Name value: Checkerboard Stage objectReference: {fileID: 0} @@ -827,73 +774,59 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_Name value: Player objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, - type: 3} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} propertyPath: Controllers.Array.size value: 4 objectReference: {fileID: 0} - - target: {fileID: 5995860984952935429, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, - type: 3} + - target: {fileID: 5995860984952935429, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} propertyPath: m_CurrentVerticalSpeed value: -0.2032451 objectReference: {fileID: 0} @@ -910,63 +843,51 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 7632911616693521422, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521422, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_Name value: Wall Section objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalPosition.x value: 3 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, - type: 3} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} diff --git a/com.unity.cinemachine/Samples~/3D Samples/FreeLook on Spherical Surface.unity b/com.unity.cinemachine/Samples~/3D Samples/FreeLook on Spherical Surface.unity index 498ef8a57..c0084beda 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/FreeLook on Spherical Surface.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/FreeLook on Spherical Surface.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657844, g: 0.49641222, b: 0.57481676, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -220,6 +220,7 @@ MonoBehaviour: Radius: 5 Height: 2 SplineCurvature: 0.5 + RecenteringTarget: 2 HorizontalAxis: Value: 0 Center: 0 @@ -229,7 +230,7 @@ MonoBehaviour: Enabled: 0 Wait: 1 Time: 2 - Restrictions: 3 + Restrictions: 0 VerticalAxis: Value: 17.5 Center: 17.5 @@ -265,9 +266,7 @@ MonoBehaviour: Priority: Enabled: 0 m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -302,7 +301,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 364965555} - m_LocalRotation: {x: 0.18674214, y: -0.0011046958, z: 0.00020998727, w: 0.98240834} + m_LocalRotation: {x: 0.1867422, y: -0.00091963867, z: 0.00017481053, w: 0.9824085} m_LocalPosition: {x: 0, y: 34.6, z: -8} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -330,8 +329,7 @@ MonoBehaviour: Owner: {fileID: 364965559} Enabled: 1 Input: - InputAction: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Mouse X LegacyGain: 200 @@ -343,8 +341,7 @@ MonoBehaviour: Owner: {fileID: 364965559} Enabled: 1 Input: - InputAction: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: -1 LegacyInput: Mouse Y LegacyGain: -200 @@ -356,8 +353,7 @@ MonoBehaviour: Owner: {fileID: 364965559} Enabled: 1 Input: - InputAction: {fileID: 5082991133974614888, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: 5082991133974614888, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Mouse ScrollWheel LegacyGain: 200 @@ -369,8 +365,7 @@ MonoBehaviour: AutoEnableInputs: 1 --- !u!1 &415639058 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + m_CorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} m_PrefabInstance: {fileID: 1596369884} m_PrefabAsset: {fileID: 0} --- !u!1001 &556492492 @@ -381,63 +376,51 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 910066370878209049, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 910066370878209049, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_Name value: Lighting objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalPosition.y value: -0.5 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalPosition.z value: 8 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalRotation.w value: 0.8754261 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalRotation.x value: 0.40821788 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalRotation.y value: -0.23456968 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalRotation.z value: 0.10938163 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 50 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: -30 objectReference: {fileID: 0} - - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, - type: 3} + - target: {fileID: 7448820823963775129, guid: bfd45ae7994b04d538dc1317bc34bd62, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -518,63 +501,51 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: HelpText value: "This scene shows a basic FreeLook camera tracking a player walking on the surface of a sphere. To allow the cameras to correctly use the player's @@ -583,8 +554,7 @@ PrefabInstance: using Input package, right mouse button to jump and middle mouse button to sprint." objectReference: {fileID: 0} - - target: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_Name value: HelpUI objectReference: {fileID: 0} @@ -687,7 +657,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 867266292} - m_LocalRotation: {x: 0.18674214, y: -0.0011046958, z: 0.00020998727, w: 0.98240834} + m_LocalRotation: {x: 0.1867422, y: -0.00091963867, z: 0.00017481053, w: 0.9824085} m_LocalPosition: {x: 0, y: 34.6, z: -8} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -868,191 +838,151 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[0].Gain value: 1 objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[0].Name value: Move X objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[1].Gain value: 1 objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[1].Name value: Move Z objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[2].Gain value: 1 objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[2].Name value: Jump objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[3].Gain value: 1 objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[3].Name value: Sprint objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[0].Owner value: objectReference: {fileID: 1596369885} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[1].Owner value: objectReference: {fileID: 1596369885} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[2].Owner value: objectReference: {fileID: 1596369885} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[3].Owner value: objectReference: {fileID: 1596369885} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[0].LegacyGain value: 1 objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[1].LegacyGain value: 1 objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[2].LegacyGain value: 1 objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[3].LegacyGain value: 1 objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[0].InputAction value: - objectReference: {fileID: -1680190386980627800, guid: ca9f5fa95ffab41fb9a615ab714db018, - type: 3} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + objectReference: {fileID: -1680190386980627800, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[0].LegacyInput value: Horizontal objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[1].InputAction value: - objectReference: {fileID: -1680190386980627800, guid: ca9f5fa95ffab41fb9a615ab714db018, - type: 3} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + objectReference: {fileID: -1680190386980627800, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[1].LegacyInput value: Vertical objectReference: {fileID: 0} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[2].InputAction value: - objectReference: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, - type: 3} - - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + objectReference: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 584685341856215659, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: Controllers.Array.data[2].LegacyInput value: Jump objectReference: {fileID: 0} - - target: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_Name value: Player objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.y value: 30.1 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: JumpSpeed value: 2.5 objectReference: {fileID: 0} - - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: SprintSpeed value: 6 objectReference: {fileID: 0} - - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: SprintJumpSpeed value: 4 objectReference: {fileID: 0} @@ -1061,15 +991,13 @@ PrefabInstance: m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - targetCorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} insertIndex: -1 addedObject: {fileID: 1596369891} m_SourcePrefab: {fileID: 100100000, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} --- !u!114 &1596369885 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + m_CorrespondingSourceObject: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} m_PrefabInstance: {fileID: 1596369884} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 415639058} @@ -1080,8 +1008,7 @@ MonoBehaviour: m_EditorClassIdentifier: --- !u!4 &1596369886 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + m_CorrespondingSourceObject: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} m_PrefabInstance: {fileID: 1596369884} m_PrefabAsset: {fileID: 0} --- !u!114 &1596369891 diff --git a/com.unity.cinemachine/Samples~/3D Samples/Lock-on Target.unity b/com.unity.cinemachine/Samples~/3D Samples/Lock-on Target.unity index 5c68d8ae0..c6d3ffc13 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/Lock-on Target.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/Lock-on Target.unity @@ -319,7 +319,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 737942603} - m_LocalRotation: {x: 0.037952796, y: 0.0000000021492477, z: -8.1628766e-11, w: 0.99927956} + m_LocalRotation: {x: 0.037952796, y: 0.0000000021492599, z: -8.1629224e-11, w: 0.99927956} m_LocalPosition: {x: 0, y: 2.25, z: -29} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -362,9 +362,7 @@ MonoBehaviour: Priority: Enabled: 0 m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -399,7 +397,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 838339814} - m_LocalRotation: {x: 0.037952796, y: 0.0000000021492477, z: -8.1628766e-11, w: 0.99927956} + m_LocalRotation: {x: 0.037952796, y: 0.0000000021492599, z: -8.1629224e-11, w: 0.99927956} m_LocalPosition: {x: 0, y: 2.25, z: -29} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -456,7 +454,7 @@ MonoBehaviour: Owner: {fileID: 838339822} Enabled: 1 Input: - InputAction: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + InputAction: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Mouse X LegacyGain: 200 @@ -468,7 +466,7 @@ MonoBehaviour: Owner: {fileID: 838339822} Enabled: 1 Input: - InputAction: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + InputAction: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: -1 LegacyInput: Mouse Y LegacyGain: -200 @@ -480,7 +478,7 @@ MonoBehaviour: Owner: {fileID: 838339822} Enabled: 1 Input: - InputAction: {fileID: 5082991133974614888, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + InputAction: {fileID: 5082991133974614888, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Mouse ScrollWheel LegacyGain: 200 @@ -521,6 +519,7 @@ MonoBehaviour: Radius: 2 Height: 0.1 SplineCurvature: 0.5 + RecenteringTarget: 2 HorizontalAxis: Value: 0 Center: 0 @@ -585,9 +584,7 @@ MonoBehaviour: Priority: Enabled: 0 m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -622,7 +619,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1106812490} - m_LocalRotation: {x: 0.018435879, y: -0.00000001809565, z: 3.3366593e-10, w: 0.99983007} + m_LocalRotation: {x: 0.018435882, y: -0.000000018095653, z: 3.3366604e-10, w: 0.99983007} m_LocalPosition: {x: 0, y: 2.75, z: -29} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 diff --git a/com.unity.cinemachine/Samples~/3D Samples/SplitScreenCar.unity b/com.unity.cinemachine/Samples~/3D Samples/SplitScreenCar.unity index 0e0b364ef..675cf8b7d 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/SplitScreenCar.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/SplitScreenCar.unity @@ -231,7 +231,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 435228071} - m_LocalRotation: {x: 0.04894337, y: -0.84074587, z: 0.0771053, w: 0.5336719} + m_LocalRotation: {x: 0.048943356, y: -0.84074587, z: 0.077105284, w: 0.5336719} m_LocalPosition: {x: 1.121963, y: 2.1499999, z: 12.315761} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -356,7 +356,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491555735} - m_LocalRotation: {x: 0.04894337, y: -0.84074587, z: 0.0771053, w: 0.5336719} + m_LocalRotation: {x: 0.048943356, y: -0.84074587, z: 0.077105284, w: 0.5336719} m_LocalPosition: {x: 1.121963, y: 2.1499999, z: 12.315761} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -495,7 +495,7 @@ PrefabInstance: - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} propertyPath: m_ControllerManager.Controllers.Array.data[0].Input.InputAction value: - objectReference: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + objectReference: {fileID: -5630151704836100654, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} propertyPath: m_ControllerManager.Controllers.Array.data[0].Input.LegacyInput value: Mouse X @@ -503,7 +503,7 @@ PrefabInstance: - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} propertyPath: m_ControllerManager.Controllers.Array.data[1].Input.InputAction value: - objectReference: {fileID: 1120369429361536294, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + objectReference: {fileID: 1120369429361536294, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} propertyPath: m_ControllerManager.Controllers.Array.data[1].Input.LegacyInput value: Fire1 @@ -511,7 +511,7 @@ PrefabInstance: - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} propertyPath: m_ControllerManager.Controllers.Array.data[2].Input.InputAction value: - objectReference: {fileID: -1608118824973676762, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + objectReference: {fileID: -1608118824973676762, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} propertyPath: m_ControllerManager.Controllers.Array.data[2].Input.LegacyInput value: Fire2 @@ -630,7 +630,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1254209701} - m_LocalRotation: {x: -0.036060497, y: 0.91490656, z: -0.08390659, w: -0.39319897} + m_LocalRotation: {x: -0.036060482, y: 0.91490656, z: -0.08390658, w: -0.39319885} m_LocalPosition: {x: 4.8683195, y: 2.1499999, z: 14.077745} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -917,7 +917,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1967210314} - m_LocalRotation: {x: -0.036060497, y: 0.91490656, z: -0.08390659, w: -0.39319897} + m_LocalRotation: {x: -0.036060482, y: 0.91490656, z: -0.08390658, w: -0.39319885} m_LocalPosition: {x: 4.8683195, y: 2.1499999, z: 14.077745} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 @@ -981,6 +981,10 @@ PrefabInstance: propertyPath: m_Name value: RedCar objectReference: {fileID: 0} + - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[2].Input.InputAction + value: + objectReference: {fileID: 6539296782897260151, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/CapsuleCar.prefab b/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/CapsuleCar.prefab index 22b3487de..def588cd5 100644 --- a/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/CapsuleCar.prefab +++ b/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/CapsuleCar.prefab @@ -158,7 +158,7 @@ MonoBehaviour: Owner: {fileID: 878341184440332478} Enabled: 1 Input: - InputAction: {fileID: -1680190386980627800, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + InputAction: {fileID: -1680190386980627800, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Horizontal LegacyGain: 1 @@ -170,7 +170,7 @@ MonoBehaviour: Owner: {fileID: 878341184440332478} Enabled: 1 Input: - InputAction: {fileID: -1680190386980627800, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} + InputAction: {fileID: -1680190386980627800, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Vertical LegacyGain: 1 @@ -182,7 +182,7 @@ MonoBehaviour: Owner: {fileID: 878341184440332478} Enabled: 1 Input: - InputAction: {fileID: 1120369429361536294, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + InputAction: {fileID: 6539296782897260151, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Fire1 LegacyGain: 1 diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/Player 2D.prefab b/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/Player 2D.prefab index e9504df2a..4889d6ce5 100644 --- a/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/Player 2D.prefab +++ b/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/Player 2D.prefab @@ -81,7 +81,6 @@ MonoBehaviour: SprintSpeed: 4 JumpSpeed: 6 SprintJumpSpeed: 8 - LockCursor: 0 MoveX: Value: 0 Center: 0 @@ -139,7 +138,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 89875cdc57c54474a8a74efd9b2a3b5d, type: 3} m_Name: m_EditorClassIdentifier: - ScanRecursively: 0 + ScanRecursively: 1 SuppressInputWhileBlending: 1 m_ControllerManager: Controllers: @@ -147,8 +146,7 @@ MonoBehaviour: Owner: {fileID: 2662089159087876488} Enabled: 1 Input: - InputAction: {fileID: -1680190386980627800, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -1680190386980627800, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Horizontal LegacyGain: 1 @@ -160,8 +158,7 @@ MonoBehaviour: Owner: {fileID: 2662089159087876488} Enabled: 1 Input: - InputAction: {fileID: -1680190386980627800, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -1680190386980627800, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Vertical LegacyGain: 1 @@ -173,8 +170,7 @@ MonoBehaviour: Owner: {fileID: 2662089159087876488} Enabled: 1 Input: - InputAction: {fileID: 6539296782897260151, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: 335763634227698153, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Jump LegacyGain: 1 @@ -186,8 +182,7 @@ MonoBehaviour: Owner: {fileID: 2662089159087876488} Enabled: 1 Input: - InputAction: {fileID: -3285510275856705445, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -3285510275856705445, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Fire3 LegacyGain: 1 @@ -320,93 +315,75 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 2294858455320007780} m_Modifications: - - target: {fileID: 3392638608885220933, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 3392638608885220933, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: MaxSprintScale value: 2 objectReference: {fileID: 0} - - target: {fileID: 3392638608885220933, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 3392638608885220933, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: NormalWalkSpeed value: 1 objectReference: {fileID: 0} - - target: {fileID: 3392638608885220933, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 3392638608885220933, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: NormalSprintSpeed value: 3 objectReference: {fileID: 0} - - target: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_Name value: Animated Cameron objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalScale.x value: 1 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalScale.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalScale.z value: 1 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalRotation.w value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalRotation.y value: 0.7071068 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 90 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -417,7 +394,6 @@ PrefabInstance: m_SourcePrefab: {fileID: 100100000, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} --- !u!4 &2474673035909645045 stripped Transform: - m_CorrespondingSourceObject: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + m_CorrespondingSourceObject: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} m_PrefabInstance: {fileID: 8778465583405618108} m_PrefabAsset: {fileID: 0} diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/Player.prefab b/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/Player.prefab index e4b089f68..3419db447 100644 --- a/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/Player.prefab +++ b/com.unity.cinemachine/Samples~/Shared Assets/Prefabs/Player.prefab @@ -8,68 +8,55 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_Name value: Player objectReference: {fileID: 0} - - target: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_TagString value: Player objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - target: {fileID: 6594556230918967625, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} @@ -77,23 +64,19 @@ PrefabInstance: m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - targetCorrespondingSourceObject: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} insertIndex: -1 addedObject: {fileID: 3503563561542408220} - - targetCorrespondingSourceObject: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - targetCorrespondingSourceObject: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} insertIndex: -1 addedObject: {fileID: 8077383552022060413} - - targetCorrespondingSourceObject: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + - targetCorrespondingSourceObject: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} insertIndex: -1 addedObject: {fileID: 7804758404662293724} m_SourcePrefab: {fileID: 100100000, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} --- !u!1 &3521509573382385251 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, - type: 3} + m_CorrespondingSourceObject: {fileID: 5822944720597535731, guid: 970e9f2326c0d445f8c78ae675268945, type: 3} m_PrefabInstance: {fileID: 6922502204019172752} m_PrefabAsset: {fileID: 0} --- !u!143 &3503563561542408220 @@ -138,7 +121,6 @@ MonoBehaviour: SprintSpeed: 8 JumpSpeed: 5 SprintJumpSpeed: 7 - LockCursor: 0 MoveX: Value: 0 Center: 0 @@ -207,8 +189,7 @@ MonoBehaviour: Owner: {fileID: 8077383552022060413} Enabled: 1 Input: - InputAction: {fileID: -1680190386980627800, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -1680190386980627800, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Horizontal LegacyGain: 1 @@ -220,8 +201,7 @@ MonoBehaviour: Owner: {fileID: 8077383552022060413} Enabled: 1 Input: - InputAction: {fileID: -1680190386980627800, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -1680190386980627800, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Vertical LegacyGain: 1 @@ -233,8 +213,7 @@ MonoBehaviour: Owner: {fileID: 8077383552022060413} Enabled: 1 Input: - InputAction: {fileID: 6539296782897260151, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: 335763634227698153, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Jump LegacyGain: 1 @@ -246,8 +225,7 @@ MonoBehaviour: Owner: {fileID: 8077383552022060413} Enabled: 1 Input: - InputAction: {fileID: -3285510275856705445, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + InputAction: {fileID: -3285510275856705445, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} Gain: 1 LegacyInput: Fire3 LegacyGain: 1 diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs deleted file mode 100644 index 20a4e53be..000000000 --- a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -namespace Unity.Cinemachine.Samples -{ - /// - /// Add-on for SimplePlayerController that controls the player's Aiming Core. - /// This component expects to be in a child object of the player, to decouple player aiming from player rotation. - /// This only works in worlds where CharacterController is valid, ie when up is world up. - /// - public class SimplePlayerAimController : MonoBehaviour, IInputAxisOwner - { - public bool LockPlayerToCamera; - public float RotationDamping = 0.2f; - - [Tooltip("Horizontal Rotation.")] - public InputAxis HorizontalLook = new () { Range = new Vector2(-180, 180), Wrap = true, Recentering = InputAxis.RecenteringSettings.Default }; - - [Tooltip("Vertical Rotation.")] - public InputAxis VerticalLook = new () { Range = new Vector2(-70, 70), Recentering = InputAxis.RecenteringSettings.Default }; - - - SimplePlayerController m_Controller; - - /// Report the available input axes to the input axis controller. - /// We use the Input Axis Controller because it works with both the Input package - /// and the Legacy input system. This is sample code and we - /// want it to work everywhere. - void IInputAxisOwner.GetInputAxes(List axes) - { - axes.Add(new () { DrivenAxis = () => ref HorizontalLook, Name = "Horizontal Look", Hint = IInputAxisOwner.AxisDescriptor.Hints.X }); - axes.Add(new () { DrivenAxis = () => ref VerticalLook, Name = "Vertical Look", Hint = IInputAxisOwner.AxisDescriptor.Hints.Y }); - } - - void OnValidate() - { - HorizontalLook.Validate(); - VerticalLook.Range.x = Mathf.Clamp(VerticalLook.Range.x, -90, 90); - VerticalLook.Range.y = Mathf.Clamp(VerticalLook.Range.y, -90, 90); - VerticalLook.Validate(); - } - - void Start() - { - m_Controller = GetComponentInParent(); - if (m_Controller == null) - Debug.LogError("SimplePlayerController not found on parent object"); - else - { - m_Controller.Strafe = true; - m_Controller.PreUpdate += UpdateRotation; - } - } - - public void RecenterPlayer(float damping = 0) - { - var rot = transform.rotation.eulerAngles; - var parentRot = m_Controller.transform.rotation.eulerAngles; - var delta = rot.y - parentRot.y; - if (delta > 180) - delta -= 360; - if (delta < -180) - delta += 360; - delta = Damper.Damp(delta, damping, Time.deltaTime); - parentRot.y += delta; - m_Controller.transform.rotation = Quaternion.Euler(parentRot); - - HorizontalLook.Value -= delta; - transform.rotation = Quaternion.Euler(rot); - } - - void UpdateRotation() - { - transform.localRotation = Quaternion.Euler(VerticalLook.Value, HorizontalLook.Value, 0); - if (LockPlayerToCamera) - { - var yaw = transform.rotation.eulerAngles.y; - var parentRot = m_Controller.transform.rotation.eulerAngles; - HorizontalLook.Value = 0; - m_Controller.transform.rotation = Quaternion.Euler(new Vector3(parentRot.x, yaw, parentRot.z)); - } - else - { - // If the player is moving, rotate its yaw to match the camera direction, - // otherwise let the camera orbit - if (m_Controller.IsMoving) - RecenterPlayer(RotationDamping); - } - var gotInput = VerticalLook.TrackValueChange() | HorizontalLook.TrackValueChange(); - VerticalLook.DoRecentering(Time.deltaTime, gotInput); - HorizontalLook.DoRecentering(Time.deltaTime, gotInput); - } - } -} \ No newline at end of file diff --git a/com.unity.cinemachine/Tests/Editor/InputAxisTests.cs b/com.unity.cinemachine/Tests/Editor/InputAxisTests.cs index e7442412e..1049461db 100644 --- a/com.unity.cinemachine/Tests/Editor/InputAxisTests.cs +++ b/com.unity.cinemachine/Tests/Editor/InputAxisTests.cs @@ -124,19 +124,19 @@ public void TestInputAxisRecentering(float value, float center, float recenterTi // Should not recenter axis.Recentering.Enabled = false; - axis.DoRecentering(k_DeltaTime, false); + axis.UpdateRecentering(k_DeltaTime, false); UnityEngine.Assertions.Assert.AreApproximatelyEqual(axis.Value, value); // Should not recenter axis.Recentering.Enabled = true; - axis.DoRecentering(k_DeltaTime, true); // cancel recentering + axis.UpdateRecentering(k_DeltaTime, true); // cancel recentering UnityEngine.Assertions.Assert.AreApproximatelyEqual(axis.Value, value); // Recenter now var distance = Mathf.Abs(axis.Value - axis.Center); for (float t = 0; t < axis.Recentering.Time; t += k_DeltaTime) { - axis.DoRecentering(k_DeltaTime, false); + axis.UpdateRecentering(k_DeltaTime, false); var d = Mathf.Abs(axis.Value - axis.Center); UnityEngine.Assertions.Assert.IsTrue(d < distance); distance = d; From 991891617efff73fe984b8fb14f324bca7aa91dc Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Wed, 21 Jun 2023 17:34:58 -0400 Subject: [PATCH 03/21] Update FreeLook Deoccluder.unity --- .../Samples~/3D Samples/FreeLook Deoccluder.unity | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/com.unity.cinemachine/Samples~/3D Samples/FreeLook Deoccluder.unity b/com.unity.cinemachine/Samples~/3D Samples/FreeLook Deoccluder.unity index 9a47a5751..0560c833f 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/FreeLook Deoccluder.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/FreeLook Deoccluder.unity @@ -561,12 +561,12 @@ MonoBehaviour: SplineCurvature: 0.5 RecenteringTarget: 2 HorizontalAxis: - Value: -0 - Center: -0 + Value: 0 + Center: 0 Range: {x: -180, y: 180} Wrap: 1 Recentering: - Enabled: 1 + Enabled: 0 Wait: 1 Time: 2 Restrictions: 0 From 7f54c5659b40e8e098c855918adaa9ae0e78e006 Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Mon, 26 Jun 2023 16:58:51 -0400 Subject: [PATCH 04/21] revert accidentally-deleted file This reverts commit 01a32e20860d82c3ebde1ed55339378f6291949f. --- .../Scripts/SimplePlayerAimController.cs | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs new file mode 100644 index 000000000..01bd2b041 --- /dev/null +++ b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs @@ -0,0 +1,94 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Unity.Cinemachine.Samples +{ + /// + /// Add-on for SimplePlayerController that controls the player's Aiming Core. + /// This component expects to be in a child object of the player, to decouple player aiming from player rotation. + /// This only works in worlds where CharacterController is valid, ie when up is world up. + /// + public class SimplePlayerAimController : MonoBehaviour, IInputAxisOwner + { + public bool LockPlayerToCamera; + public float RotationDamping = 0.2f; + + [Tooltip("Horizontal Rotation.")] + public InputAxis HorizontalLook = new () { Range = new Vector2(-180, 180), Wrap = true, Recentering = InputAxis.RecenteringSettings.Default }; + + [Tooltip("Vertical Rotation.")] + public InputAxis VerticalLook = new () { Range = new Vector2(-70, 70), Recentering = InputAxis.RecenteringSettings.Default }; + + + SimplePlayerController m_Controller; + + /// Report the available input axes to the input axis controller. + /// We use the Input Axis Controller because it works with both the Input package + /// and the Legacy input system. This is sample code and we + /// want it to work everywhere. + void IInputAxisOwner.GetInputAxes(List axes) + { + axes.Add(new () { DrivenAxis = () => ref HorizontalLook, Name = "Horizontal Look", Hint = IInputAxisOwner.AxisDescriptor.Hints.X }); + axes.Add(new () { DrivenAxis = () => ref VerticalLook, Name = "Vertical Look", Hint = IInputAxisOwner.AxisDescriptor.Hints.Y }); + } + + void OnValidate() + { + HorizontalLook.Validate(); + VerticalLook.Range.x = Mathf.Clamp(VerticalLook.Range.x, -90, 90); + VerticalLook.Range.y = Mathf.Clamp(VerticalLook.Range.y, -90, 90); + VerticalLook.Validate(); + } + + void Start() + { + m_Controller = GetComponentInParent(); + if (m_Controller == null) + Debug.LogError("SimplePlayerController not found on parent object"); + else + { + m_Controller.Strafe = true; + m_Controller.PreUpdate += UpdateRotation; + } + } + + public void RecenterPlayer(float damping = 0) + { + var rot = transform.rotation.eulerAngles; + var parentRot = m_Controller.transform.rotation.eulerAngles; + var delta = rot.y - parentRot.y; + if (delta > 180) + delta -= 360; + if (delta < -180) + delta += 360; + delta = Damper.Damp(delta, damping, Time.deltaTime); + parentRot.y += delta; + m_Controller.transform.rotation = Quaternion.Euler(parentRot); + + HorizontalLook.Value -= delta; + transform.rotation = Quaternion.Euler(rot); + } + + void UpdateRotation() + { + transform.localRotation = Quaternion.Euler(VerticalLook.Value, HorizontalLook.Value, 0); + if (LockPlayerToCamera) + { + var yaw = transform.rotation.eulerAngles.y; + var parentRot = m_Controller.transform.rotation.eulerAngles; + HorizontalLook.Value = 0; + m_Controller.transform.rotation = Quaternion.Euler(new Vector3(parentRot.x, yaw, parentRot.z)); + } + else + { + // If the player is moving, rotate its yaw to match the camera direction, + // otherwise let the camera orbit + if (m_Controller.IsMoving) + RecenterPlayer(RotationDamping); + } + var gotInput = VerticalLook.TrackValueChange() | HorizontalLook.TrackValueChange(); + VerticalLook.UpdateRecentering(Time.deltaTime, gotInput); + HorizontalLook.UpdateRecentering(Time.deltaTime, gotInput); + } + } +} \ No newline at end of file From 42e06d94a27521af6c57df9d0d2c6c6f0d884eba Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Tue, 27 Jun 2023 16:12:28 -0400 Subject: [PATCH 05/21] Bugfix: Orbital recentering should not be forced when transitioning to a camera. (#883) --- com.unity.cinemachine/CHANGELOG.md | 2 ++ .../Components/CinemachineOrbitalFollow.cs | 6 ++++-- .../Runtime/Core/BlendManager.cs | 8 +++++++- .../Runtime/Core/CinemachineBlend.cs | 18 +++++++++++++++--- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index 902620ac9..34b71a231 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] - Bugfix: Occasional precision issue when camera rotation is exactly 180 degress, causing rotational flickering. - Bugfix: Deceleration at the end of axis range was too aggressive. +- Bugfix: Orbital recentering should not be forced when transitioning to a camera. +- Bugfix: InheritPosition takes the actual camera position, so it works consistently if transitioning mid-blend. - Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. diff --git a/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs b/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs index bcb82fec5..2825dc9be 100644 --- a/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs +++ b/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs @@ -226,7 +226,7 @@ public override bool OnTransitionFromCamera( && !CinemachineCore.IsLiveInBlend(VirtualCamera)) { var state = fromCam.State; - ForceCameraPosition(state.RawPosition, state.RawOrientation); + ForceCameraPosition(state.GetFinalPosition(), state.GetFinalOrientation()); return true; } return false; @@ -380,7 +380,9 @@ public override void MutateCameraState(ref CameraState curState, float deltaTime if (!IsValid) return; - if (deltaTime < 0 || !VirtualCamera.PreviousStateIsValid || !CinemachineCore.IsLive(VirtualCamera)) + // Force a reset if enabled, but don't be too aggressive about it, + // because maybe we've just inherited a position + if (deltaTime < 0)// || !VirtualCamera.PreviousStateIsValid || !CinemachineCore.IsLive(VirtualCamera) m_ResetHandler?.Invoke(); Vector3 offset = GetCameraPoint(); diff --git a/com.unity.cinemachine/Runtime/Core/BlendManager.cs b/com.unity.cinemachine/Runtime/Core/BlendManager.cs index 750f7b45c..4102abb2f 100644 --- a/com.unity.cinemachine/Runtime/Core/BlendManager.cs +++ b/com.unity.cinemachine/Runtime/Core/BlendManager.cs @@ -153,10 +153,16 @@ public ICinemachineCamera ProcessActiveCamera(ICinemachineMixer mixer, Vector3 u else { // Generate ActivationEvents + var eventOutgoing = outgoingCamera; + if (IsBlending) + { + eventOutgoing = new NestedBlendSource(ActiveBlend); + eventOutgoing.UpdateCameraState(up, deltaTime); + } var evt = new ICinemachineCamera.ActivationEventParams { Origin = mixer, - OutgoingCamera = outgoingCamera, + OutgoingCamera = eventOutgoing, IncomingCamera = incomingCamera, IsCut = !IsBlending || !IsLive(outgoingCamera), WorldUp = up, diff --git a/com.unity.cinemachine/Runtime/Core/CinemachineBlend.cs b/com.unity.cinemachine/Runtime/Core/CinemachineBlend.cs index a5719c29d..7eb6915b0 100644 --- a/com.unity.cinemachine/Runtime/Core/CinemachineBlend.cs +++ b/com.unity.cinemachine/Runtime/Core/CinemachineBlend.cs @@ -292,12 +292,18 @@ public AnimationCurve BlendCurve /// as an ersatz virtual camera for the purposes of blending. This achieves the purpose /// of blending the result oif a blend. /// - class NestedBlendSource : ICinemachineCamera + public class NestedBlendSource : ICinemachineCamera { - public NestedBlendSource(CinemachineBlend blend) { Blend = blend; } - public CinemachineBlend Blend { get; set; } string m_Name; + /// Contructor to wrap a CinemachineBlend object + /// The blend to wrap. + public NestedBlendSource(CinemachineBlend blend) { Blend = blend; } + + /// The CinemachineBlend object being wrapped. + public CinemachineBlend Blend { get; internal set; } + + /// public string Name { get @@ -307,10 +313,15 @@ public string Name return m_Name; } } + /// public string Description => Blend == null ? "(null)" : Blend.Description; + /// public CameraState State { get; private set; } + /// public bool IsValid => Blend != null && Blend.IsValid; + /// public ICinemachineMixer ParentCamera => null; + /// public void UpdateCameraState(Vector3 worldUp, float deltaTime) { if (Blend != null) @@ -319,6 +330,7 @@ public void UpdateCameraState(Vector3 worldUp, float deltaTime) State = Blend.State; } } + /// public void OnCameraActivated(ICinemachineCamera.ActivationEventParams evt) {} } } From f48c32f457b4e631326a76a2110b116710e45ceb Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Fri, 14 Jul 2023 16:46:33 -0400 Subject: [PATCH 06/21] Bugfix: CinemachineCollider was causing a pop when OnTargetObjectWarped was called. (#884) --- com.unity.cinemachine/CHANGELOG.md | 1 + .../Runtime/Behaviours/CinemachineDeoccluder.cs | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index 34b71a231..cd6f75529 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Bugfix: Deceleration at the end of axis range was too aggressive. - Bugfix: Orbital recentering should not be forced when transitioning to a camera. - Bugfix: InheritPosition takes the actual camera position, so it works consistently if transitioning mid-blend. +- Bugfix: CinemachineDeoccluder was causing a pop when OnTargetObjectWarped was called. - Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. diff --git a/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs b/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs index cd589ece6..c39df8337 100644 --- a/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs +++ b/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs @@ -329,6 +329,14 @@ public override float GetMaxDampTime() : 0; } + /// + public override void OnTargetObjectWarped( + CinemachineVirtualCameraBase vcam, Transform target, Vector3 positionDelta) + { + var extra = GetExtraState(vcam); + extra.PreviousCameraPosition += positionDelta; + } + /// /// Callback to do the collision resolution and shot evaluation /// From 2eb5c66d2b91ac69164c6eb37cb16a41e9914ae1 Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Mon, 17 Jul 2023 18:27:15 -0400 Subject: [PATCH 07/21] Spurious camera cut events were being issued, especially in HDRP (#887) --- com.unity.cinemachine/CHANGELOG.md | 1 + com.unity.cinemachine/Runtime/Core/BlendManager.cs | 2 +- .../Runtime/PostProcessing/CinemachineVolumeSettings.cs | 7 ++++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index cd6f75529..14851e650 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Bugfix: Orbital recentering should not be forced when transitioning to a camera. - Bugfix: InheritPosition takes the actual camera position, so it works consistently if transitioning mid-blend. - Bugfix: CinemachineDeoccluder was causing a pop when OnTargetObjectWarped was called. +- Bugfix: Spurious camera cut events were being issued, especially in HDRP. - Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. diff --git a/com.unity.cinemachine/Runtime/Core/BlendManager.cs b/com.unity.cinemachine/Runtime/Core/BlendManager.cs index 4102abb2f..2f2c0210d 100644 --- a/com.unity.cinemachine/Runtime/Core/BlendManager.cs +++ b/com.unity.cinemachine/Runtime/Core/BlendManager.cs @@ -164,7 +164,7 @@ public ICinemachineCamera ProcessActiveCamera(ICinemachineMixer mixer, Vector3 u Origin = mixer, OutgoingCamera = eventOutgoing, IncomingCamera = incomingCamera, - IsCut = !IsBlending || !IsLive(outgoingCamera), + IsCut = !IsBlending,// does not work with snapshots: || !IsLive(outgoingCamera), WorldUp = up, DeltaTime = deltaTime }; diff --git a/com.unity.cinemachine/Runtime/PostProcessing/CinemachineVolumeSettings.cs b/com.unity.cinemachine/Runtime/PostProcessing/CinemachineVolumeSettings.cs index 1adddd6ae..df183e258 100644 --- a/com.unity.cinemachine/Runtime/PostProcessing/CinemachineVolumeSettings.cs +++ b/com.unity.cinemachine/Runtime/PostProcessing/CinemachineVolumeSettings.cs @@ -214,12 +214,14 @@ protected override void PostPipelineStageCallback( static void OnCameraCut(ICinemachineCamera.ActivationEventParams evt) { + if (!evt.IsCut) + return; + var brain = evt.Origin as CinemachineBrain; - //Debug.Log($"Camera cut to {brain?.ActiveVirtualCamera.Name}"); + var cam = brain == null ? null : brain.OutputCamera; #if CINEMACHINE_HDRP // Reset temporal effects - var cam = brain?.OutputCamera; if (cam != null) { HDCamera hdCam = HDCamera.GetOrCreate(cam); @@ -229,7 +231,6 @@ static void OnCameraCut(ICinemachineCamera.ActivationEventParams evt) } #elif CINEMACHINE_URP // Reset temporal effects - var cam = brain?.OutputCamera; if (cam != null && cam.TryGetComponent(out var data)) data.resetHistory = true; #endif From 8d8ea6ffe9fc7c5bf32bd844af8022b9fd56a63e Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Tue, 18 Jul 2023 11:31:17 -0400 Subject: [PATCH 08/21] Fix leaks in TrackAnyUserActivity (#888) --- com.unity.cinemachine/CHANGELOG.md | 1 + com.unity.cinemachine/Editor/Utility/InspectorUtility.cs | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index 14851e650..442555586 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Bugfix: InheritPosition takes the actual camera position, so it works consistently if transitioning mid-blend. - Bugfix: CinemachineDeoccluder was causing a pop when OnTargetObjectWarped was called. - Bugfix: Spurious camera cut events were being issued, especially in HDRP. +- Bugfix: Mull reference exceptions when inspector is hidden behind another tab. - Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. diff --git a/com.unity.cinemachine/Editor/Utility/InspectorUtility.cs b/com.unity.cinemachine/Editor/Utility/InspectorUtility.cs index cfab9a700..9cc5cfa2c 100644 --- a/com.unity.cinemachine/Editor/Utility/InspectorUtility.cs +++ b/com.unity.cinemachine/Editor/Utility/InspectorUtility.cs @@ -419,9 +419,12 @@ public static string GetAssignableBehaviourNames(Type inputType) public static void TrackAnyUserActivity( this VisualElement owner, EditorApplication.CallbackFunction callback) { - UserDidSomething += callback; - owner.OnInitialGeometry(callback); - owner.RegisterCallback(_ => UserDidSomething -= callback); + owner.RegisterCallback(_ => + { + UserDidSomething += callback; + owner.OnInitialGeometry(callback); + owner.RegisterCallback(_ => UserDidSomething -= callback); + }); } /// From f626f4e4eeef60d78f176b84f5623748b7865463 Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Tue, 18 Jul 2023 13:10:27 -0400 Subject: [PATCH 09/21] addendum to previous commit --- com.unity.cinemachine/Editor/Utility/InspectorUtility.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/com.unity.cinemachine/Editor/Utility/InspectorUtility.cs b/com.unity.cinemachine/Editor/Utility/InspectorUtility.cs index 9cc5cfa2c..fef386c42 100644 --- a/com.unity.cinemachine/Editor/Utility/InspectorUtility.cs +++ b/com.unity.cinemachine/Editor/Utility/InspectorUtility.cs @@ -434,9 +434,12 @@ public static void TrackAnyUserActivity( public static void ContinuousUpdate( this VisualElement owner, EditorApplication.CallbackFunction callback) { - owner.OnInitialGeometry(callback); - EditorApplication.update += callback; - owner.RegisterCallback(_ => EditorApplication.update -= callback); + owner.RegisterCallback(_ => + { + owner.OnInitialGeometry(callback); + EditorApplication.update += callback; + owner.RegisterCallback(_ => EditorApplication.update -= callback); + }); } /// From efa45da437d72389dc45a1af66f4eeb3a248dd52 Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Tue, 18 Jul 2023 14:36:42 -0400 Subject: [PATCH 10/21] extensions dropdown disables already-added extensions (#889) --- .../Utility/CmCameraInspectorUtility.cs | 76 +++++++++++-------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/com.unity.cinemachine/Editor/Utility/CmCameraInspectorUtility.cs b/com.unity.cinemachine/Editor/Utility/CmCameraInspectorUtility.cs index b6aba2cc2..43e1b18ee 100644 --- a/com.unity.cinemachine/Editor/Utility/CmCameraInspectorUtility.cs +++ b/com.unity.cinemachine/Editor/Utility/CmCameraInspectorUtility.cs @@ -234,34 +234,48 @@ static int GetTypeIndexFromSelection(string selection, int stage) /// Draw the Extensions dropdown in the inspector public static void AddExtensionsDropdown(this UnityEditor.Editor editor, VisualElement ux) { - var targets = editor.targets; - var dropdown = new DropdownField - { - name = "extensions selector", - label = "Add Extension", - choices = PipelineStageMenu.s_ExtentionNames, - index = 0, - }; - dropdown.AddToClassList(InspectorUtility.kAlignFieldClass); - dropdown.RegisterValueChangedCallback(evt => + var row = new InspectorUtility.LabeledRow( + "Add Extension", "Extensions are behaviours that inject themselves into " + + "the Cinemachine pipeline to alter the camera's behaviour."); + + var menu = new ContextualMenuManipulator((evt) => { - Type extType = PipelineStageMenu.s_ExtentionTypes[GetTypeIndexFromSelection(evt.newValue)]; - for (int i = 0; i < targets.Length; i++) + for (int i = 0; i < PipelineStageMenu.s_ExtensionTypes.Count; ++i) { - var targetGO = (targets[i] as CinemachineVirtualCameraBase).gameObject; - if (targetGO != null && targetGO.GetComponent(extType) == null) - Undo.AddComponent(targetGO, extType); + var type = PipelineStageMenu.s_ExtensionTypes[i]; + if (type == null) + continue; + var name = PipelineStageMenu.s_ExtensionNames[i]; + evt.menu.AppendAction(name, + (action) => + { + var target = editor.target as CinemachineVirtualCameraBase; + Undo.AddComponent(target.gameObject, type); + }, + (status) => + { + var target = editor.target as CinemachineVirtualCameraBase; + var disable = target == null || target.GetComponent(type) != null; + return disable ? DropdownMenuAction.Status.Disabled : DropdownMenuAction.Status.Normal; + } + ); } - - static int GetTypeIndexFromSelection(string selection) - { - for (var j = 0; j < PipelineStageMenu.s_ExtentionNames.Count; ++j) - if (PipelineStageMenu.s_ExtentionNames[j].Equals(selection)) - return j; - return 0; + }); + var button = row.Contents.AddChild(new Button + { + text = "(select)", + style = + { + flexGrow = 1, marginRight = 0, marginLeft = 3, + paddingTop = 0, paddingBottom = 0, paddingLeft = 1, + height = InspectorUtility.SingleLineHeight + 2, + unityTextAlign = TextAnchor.MiddleLeft } }); - ux.Add(dropdown); + menu.activators.Clear(); + menu.activators.Add(new ManipulatorActivationFilter { button = MouseButton.LeftMouse }); + button.AddManipulator(menu); + ux.Add(row); } [InitializeOnLoad] @@ -278,8 +292,8 @@ public struct StageData public static StageData[] s_StageData = null; // Extensions - public static List s_ExtentionTypes; - public static List s_ExtentionNames; + public static List s_ExtensionTypes; + public static List s_ExtensionNames; public static int GetSelectedComponent(int stage, CinemachineComponentBase component) { @@ -325,10 +339,10 @@ static PipelineStageMenu() } // Populate the extension list - s_ExtentionTypes = new List(); - s_ExtentionNames = new List(); - s_ExtentionTypes.Add(null); - s_ExtentionNames.Add("(select)"); + s_ExtensionTypes = new List(); + s_ExtensionNames = new List(); + s_ExtensionTypes.Add(null); + s_ExtensionNames.Add("(select)"); var allExtensions = ReflectionHelpers.GetTypesInAllDependentAssemblies( (Type t) => typeof(CinemachineExtension).IsAssignableFrom(t) @@ -337,8 +351,8 @@ var allExtensions while (iter2.MoveNext()) { var t = iter2.Current; - s_ExtentionTypes.Add(t); - s_ExtentionNames.Add(t.Name); + s_ExtensionTypes.Add(t); + s_ExtensionNames.Add(t.Name); } } } From fdd3daa105fd14074ab546b09a5dfc84f2037cfc Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Tue, 18 Jul 2023 16:29:32 -0400 Subject: [PATCH 11/21] multiplayer sample missing input action assets (#890) --- .../PlayerWithCameraRig.prefab | 92 ++++------- .../Split Screen Multiplayer.unity | 152 ++++++++---------- 2 files changed, 96 insertions(+), 148 deletions(-) diff --git a/com.unity.cinemachine/Samples~/Input System Samples/Split Screen Multiplayer/PlayerWithCameraRig.prefab b/com.unity.cinemachine/Samples~/Input System Samples/Split Screen Multiplayer/PlayerWithCameraRig.prefab index 1977e4565..1fbd5b953 100644 --- a/com.unity.cinemachine/Samples~/Input System Samples/Split Screen Multiplayer/PlayerWithCameraRig.prefab +++ b/com.unity.cinemachine/Samples~/Input System Samples/Split Screen Multiplayer/PlayerWithCameraRig.prefab @@ -25,13 +25,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1021246722323271792} + serializedVersion: 2 m_LocalRotation: {x: 0.20474699, y: -1e-45, z: -0, w: 0.97881496} m_LocalPosition: {x: 0, y: 2.25, z: -4} m_LocalScale: {x: 1.7499995, y: 1.75, z: 1.7499998} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8899812594330443549} - m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!20 &7614250291158188761 Camera: @@ -144,13 +144,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 6240644171936335887} - m_LocalRotation: {x: 0.20474699, y: -1e-45, z: -0, w: 0.97881496} + serializedVersion: 2 + m_LocalRotation: {x: 0.20474693, y: -1e-45, z: -0, w: 0.97881496} m_LocalPosition: {x: 0, y: 2.25, z: -4} m_LocalScale: {x: 1.7499995, y: 1.75, z: 1.7499998} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 8899812594330443549} - m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &7387135027659488260 MonoBehaviour: @@ -167,9 +167,7 @@ MonoBehaviour: Priority: Enabled: 0 m_Value: 0 - OutputChannel: - Enabled: 1 - m_Value: 2 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -228,6 +226,7 @@ MonoBehaviour: Radius: 2.5 Height: 0.1 SplineCurvature: 0.5 + RecenteringTarget: 2 HorizontalAxis: Value: 0 Center: 0 @@ -323,8 +322,7 @@ MonoBehaviour: Owner: {fileID: 536667594111509029} Enabled: 1 Input: - Input: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + Input: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} InputValue: 0 Driver: AccelTime: 0 @@ -333,8 +331,7 @@ MonoBehaviour: Owner: {fileID: 536667594111509029} Enabled: 1 Input: - Input: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + Input: {fileID: -5630151704836100654, guid: ba1679fafe8a545948be71b9557ead1a, type: 3} InputValue: 0 Driver: AccelTime: 0 @@ -373,6 +370,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8899812594330443548} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -382,7 +380,6 @@ Transform: - {fileID: 337923160760063250} - {fileID: 132640765952549006} m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1150526723863172992 MonoBehaviour: @@ -406,68 +403,55 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 8899812594330443549} m_Modifications: - - target: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_Name value: Player objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} propertyPath: CameraOverride value: objectReference: {fileID: 7614250291158188761} @@ -476,19 +460,16 @@ PrefabInstance: m_RemovedGameObjects: [] m_AddedGameObjects: [] m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - targetCorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} insertIndex: -1 addedObject: {fileID: 8899812594144203027} - - targetCorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + - targetCorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} insertIndex: -1 addedObject: {fileID: 8899812594144203026} m_SourcePrefab: {fileID: 100100000, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} --- !u!114 &836224694118566995 stripped MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + m_CorrespondingSourceObject: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} m_PrefabInstance: {fileID: 8899812594144203054} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5430380358557990733} @@ -499,14 +480,12 @@ MonoBehaviour: m_EditorClassIdentifier: --- !u!4 &4618237487212078583 stripped Transform: - m_CorrespondingSourceObject: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + m_CorrespondingSourceObject: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} m_PrefabInstance: {fileID: 8899812594144203054} m_PrefabAsset: {fileID: 0} --- !u!1 &5430380358557990733 stripped GameObject: - m_CorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, - type: 3} + m_CorrespondingSourceObject: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} m_PrefabInstance: {fileID: 8899812594144203054} m_PrefabAsset: {fileID: 0} --- !u!114 &8899812594144203027 @@ -521,7 +500,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c44cc6a630eeb47eeb696895e8db466b, type: 3} m_Name: m_EditorClassIdentifier: - ScanRecursively: 0 + ScanRecursively: 1 SuppressInputWhileBlending: 1 m_ControllerManager: Controllers: @@ -529,8 +508,7 @@ MonoBehaviour: Owner: {fileID: 836224694118566995} Enabled: 1 Input: - Input: {fileID: -1680190386980627800, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + Input: {fileID: -1680190386980627800, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} InputValue: 0 Driver: AccelTime: 0 @@ -539,8 +517,7 @@ MonoBehaviour: Owner: {fileID: 836224694118566995} Enabled: 1 Input: - Input: {fileID: -1680190386980627800, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + Input: {fileID: -1680190386980627800, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} InputValue: 0 Driver: AccelTime: 0 @@ -549,8 +526,7 @@ MonoBehaviour: Owner: {fileID: 836224694118566995} Enabled: 1 Input: - Input: {fileID: 6539296782897260151, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + Input: {fileID: 6539296782897260151, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} InputValue: 0 Driver: AccelTime: 0 @@ -559,13 +535,12 @@ MonoBehaviour: Owner: {fileID: 836224694118566995} Enabled: 1 Input: - Input: {fileID: -3285510275856705445, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + Input: {fileID: -3285510275856705445, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} InputValue: 0 Driver: AccelTime: 0 DecelTime: 0 - PlayerInput: {fileID: 8899812594144203026} + PlayerInput: {fileID: 0} --- !u!114 &8899812594144203026 MonoBehaviour: m_ObjectHideFlags: 0 @@ -578,8 +553,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 62899f850307741f2a39c98a8b639597, type: 3} m_Name: m_EditorClassIdentifier: - m_Actions: {fileID: -944628639613478452, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} + m_Actions: {fileID: -944628639613478452, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} m_NotificationBehavior: 3 m_UIInputModule: {fileID: 0} m_DeviceLostEvent: diff --git a/com.unity.cinemachine/Samples~/Input System Samples/Split Screen Multiplayer/Split Screen Multiplayer.unity b/com.unity.cinemachine/Samples~/Input System Samples/Split Screen Multiplayer/Split Screen Multiplayer.unity index f0259aefa..b44998764 100644 --- a/com.unity.cinemachine/Samples~/Input System Samples/Split Screen Multiplayer/Split Screen Multiplayer.unity +++ b/com.unity.cinemachine/Samples~/Input System Samples/Split Screen Multiplayer/Split Screen Multiplayer.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657844, g: 0.49641222, b: 0.57481676, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -180,13 +180,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2314367} - m_LocalRotation: {x: 0.25339165, y: 0.008441689, z: -0.0022113097, w: 0.96732444} + serializedVersion: 2 + m_LocalRotation: {x: 0.25339165, y: 0.008441684, z: -0.0022113083, w: 0.96732444} m_LocalPosition: {x: -11.734394, y: 2.2498055, z: -5.2688923} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1101093750} - m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!20 &2314370 Camera: @@ -338,13 +338,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 65334556} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2, y: 0, z: 0} m_LocalScale: {x: 1, y: 0.5, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &122939468 GameObject: @@ -445,13 +445,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 122939468} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 6, y: 0, z: 0} m_LocalScale: {x: 1, y: 0.5, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &387383892 GameObject: @@ -552,13 +552,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 387383892} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 4, y: 0, z: 0} m_LocalScale: {x: 1, y: 0.5, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &822025655 GameObject: @@ -583,13 +583,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 822025655} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -11.664585, y: -0.00019454956, z: -1.2695013} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1101093750} - m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1101093749 GameObject: @@ -614,6 +614,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1101093749} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 16.664585, y: 0.00019454956, z: 1.2695013} m_LocalScale: {x: 1, y: 1, z: 1} @@ -623,7 +624,6 @@ Transform: - {fileID: 1846637274} - {fileID: 822025656} m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1340089506 PrefabInstance: @@ -633,63 +633,51 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: HelpText value: "This is a sample split-screen game with Cinemachine and the Input package. Press the left mouse button or the right trigger on a controller to add a @@ -697,58 +685,47 @@ PrefabInstance: Cinemachine Brain and a Cinemachine Camera.\n- How to create a custom Input handler that works with the Player Input Component.\n" objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: HelpTitle value: objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: VisibleAtStart value: 0 objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.size value: 1 objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_Mode value: 6 objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 1823073127} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_CallState value: 2 objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName value: SetActive objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName value: UnityEngine.GameObject, UnityEngine objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_BoolArgument value: 1 objectReference: {fileID: 0} - - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} - - target: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, - type: 3} + - target: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} propertyPath: m_Name value: HelpUI objectReference: {fileID: 0} @@ -765,63 +742,51 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_LocalEulerAnglesHint.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4436525663902916670, guid: c97e1248c10cd3549b3d18c1eb1c3722, - type: 3} + - target: {fileID: 4436525663902916670, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} propertyPath: m_Name value: Checkerboard Stage objectReference: {fileID: 0} @@ -855,13 +820,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1823073127} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1823073130 MonoBehaviour: @@ -944,10 +909,8 @@ MonoBehaviour: m_Interactions: m_SingletonActionBindings: [] m_Flags: 0 - m_Reference: {fileID: 1120369429361536294, guid: ba1679fafe8a545948be71b9557ead1a, - type: 3} - m_PlayerPrefab: {fileID: 8899812594330443548, guid: 33f863ca3153d440d84eccc416174573, - type: 3} + m_Reference: {fileID: 1120369429361536294, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_PlayerPrefab: {fileID: 8899812594330443548, guid: 33f863ca3153d440d84eccc416174573, type: 3} m_SplitScreen: 1 m_MaintainAspectRatioInSplitScreen: 0 m_FixedNumberOfSplitScreens: -1 @@ -1066,6 +1029,7 @@ MonoBehaviour: Radius: 2.5 Height: 0.1 SplineCurvature: 0.5 + RecenteringTarget: 2 HorizontalAxis: Value: 1 Center: 0 @@ -1111,9 +1075,7 @@ MonoBehaviour: Priority: Enabled: 1 m_Value: 0 - OutputChannel: - Enabled: 0 - m_Value: 1 + OutputChannel: 1 StandbyUpdate: 2 m_StreamingVersion: 20230301 m_LegacyPriority: 10 @@ -1148,13 +1110,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1846637268} - m_LocalRotation: {x: 0.25339165, y: 0.008441689, z: -0.0022113097, w: 0.96732444} + serializedVersion: 2 + m_LocalRotation: {x: 0.25339165, y: 0.008441684, z: -0.0022113083, w: 0.96732444} m_LocalPosition: {x: -11.734394, y: 2.2498055, z: -5.2688923} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1101093750} - m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1846637275 MonoBehaviour: @@ -1269,11 +1231,23 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2082728274} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 8, y: 0, z: 0} m_LocalScale: {x: 1, y: 0.5, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1340089506} + - {fileID: 1641029698} + - {fileID: 1101093750} + - {fileID: 1823073129} + - {fileID: 65334560} + - {fileID: 387383896} + - {fileID: 122939472} + - {fileID: 2082728278} From 0687141c2bbf80575120f696a9823f849730c78e Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Wed, 19 Jul 2023 07:19:21 -0400 Subject: [PATCH 12/21] Removed CinemachineToolSettings overlay --- com.unity.cinemachine/CHANGELOG.md | 1 + .../Editor/Editors/CinemachineOrbitalFollowEditor.cs | 8 ++++---- .../Editor/Overlays/CinemachineToolbarOverlay.cs | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index 442555586..18f604d76 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Renamed CinemachineSplineDolly.CameraUp to CameraRotation, which more accurately reflects what it does. - Renamed InputAxis.DoRecentering() to InputAxis.UpdateRecentering() - Added API in Deoccluder and ThirdPersonFollow to access which collision objects are impacting the camera position. +- Removed CinemachineToolSettings overlay. ## [3.0.0-pre.7] - 2023-05-04 diff --git a/com.unity.cinemachine/Editor/Editors/CinemachineOrbitalFollowEditor.cs b/com.unity.cinemachine/Editor/Editors/CinemachineOrbitalFollowEditor.cs index 74644fdf4..295ab89b1 100644 --- a/com.unity.cinemachine/Editor/Editors/CinemachineOrbitalFollowEditor.cs +++ b/com.unity.cinemachine/Editor/Editors/CinemachineOrbitalFollowEditor.cs @@ -14,13 +14,13 @@ class CinemachineOrbitalFollowEditor : UnityEditor.Editor void OnEnable() { CinemachineSceneToolUtility.RegisterTool(typeof(FollowOffsetTool)); - CinemachineSceneToolUtility.RegisterTool(typeof(OrbitalFollowOrbitSelection)); + //CinemachineSceneToolUtility.RegisterTool(typeof(OrbitalFollowOrbitSelection)); } void OnDisable() { CinemachineSceneToolUtility.UnregisterTool(typeof(FollowOffsetTool)); - CinemachineSceneToolUtility.UnregisterTool(typeof(OrbitalFollowOrbitSelection)); + //CinemachineSceneToolUtility.UnregisterTool(typeof(OrbitalFollowOrbitSelection)); } public override VisualElement CreateInspectorGUI() @@ -46,7 +46,6 @@ public override VisualElement CreateInspectorGUI() var recenteringProp = serializedObject.FindProperty(() => Target.HorizontalAxis).FindPropertyRelative( "Recentering").FindPropertyRelative("Enabled"); - ux.AddSpace(); this.AddInputControllerHelp(ux, "Orbital Follow has no input axis controller behaviour."); ux.Add(new PropertyField(serializedObject.FindProperty(() => Target.HorizontalAxis))); @@ -64,6 +63,7 @@ public override VisualElement CreateInspectorGUI() return ux; } +#if false // We disable the tool settings window, because it has only one thing in it, which isn't so useful and is a bit confusing tbh static GUIContent[] s_OrbitNames = { new GUIContent("Top"), @@ -71,7 +71,7 @@ public override VisualElement CreateInspectorGUI() new GUIContent("Bottom") }; internal static GUIContent[] orbitNames => s_OrbitNames; - +#endif bool m_UpdateCache = true; float m_VerticalAxisCache; diff --git a/com.unity.cinemachine/Editor/Overlays/CinemachineToolbarOverlay.cs b/com.unity.cinemachine/Editor/Overlays/CinemachineToolbarOverlay.cs index ee135d790..9913e79cb 100644 --- a/com.unity.cinemachine/Editor/Overlays/CinemachineToolbarOverlay.cs +++ b/com.unity.cinemachine/Editor/Overlays/CinemachineToolbarOverlay.cs @@ -139,6 +139,7 @@ protected override GUIContent GetIcon() => }; } +#if false // We disable this tool window, because it has only one thing in it, which isn't so useful and is a bit confusing tbh /// /// To add your custom tools (EditorToolbarElement) to the Cinemachine Tool Settings toolbar, /// set CinemachineToolSettingsOverlay.customToolbarItems with your custom tools' IDs. @@ -260,4 +261,5 @@ void OrbitalFollowOrbitSelectionMenu() menu.DropDown(worldBound); } } +#endif } From cb24e4d9d6eb5c057c16d7d66496ca2e208d47db Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Wed, 19 Jul 2023 07:41:21 -0400 Subject: [PATCH 13/21] Update handles.md --- com.unity.cinemachine/Documentation~/handles.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/com.unity.cinemachine/Documentation~/handles.md b/com.unity.cinemachine/Documentation~/handles.md index 941d149b3..796c11abc 100644 --- a/com.unity.cinemachine/Documentation~/handles.md +++ b/com.unity.cinemachine/Documentation~/handles.md @@ -48,15 +48,3 @@ This starts from where the camera is placed. You can drag the points to increase For more information on the Tracked object offset property see, [Rotation Composer properties](CinemachineRotationComposer.md). -## Cinemachine tool settings - -The Cinemachine tool settings are automatically displayed when a FreeLook camera is selected. These settings allow you to adjust the position of the three separate camera rigs: **Top**, **Middle**, and **Bottom**. - -![overlays-menu](images/overlays-menu.png) - -For more information, see [Cinemachine FreeLook Camera](FreeLookCameras.md). - -To deactivate the Cinemachine tool settings for a FreeLook camera: - -* Right-click on the **Scene** tab in the Scene view. -* Select **Overlays** and then **Cinemachine tools** from the pop-up menu. From 69309ea81dbfe8f1cfc0147d4930df447a3c6b67 Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Thu, 3 Aug 2023 16:59:37 -0400 Subject: [PATCH 14/21] CMCL-1505: Incorrect warning in Group Framing inspector, and no way to set screen position (#892) * fix incorrect warning in group framing inspector * Add Framing Offset setting to Group Framing extension --- com.unity.cinemachine/CHANGELOG.md | 2 ++ .../Documentation~/CinemachineGroupFraming.md | 9 ++--- .../Editors/CinemachineGroupFramingEditor.cs | 1 + .../CmPipelineComponentInspectorUtility.cs | 7 ++-- .../Behaviours/CinemachineGroupFraming.cs | 35 ++++++++++++++++--- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index 18f604d76..0a603d980 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Bugfix: CinemachineDeoccluder was causing a pop when OnTargetObjectWarped was called. - Bugfix: Spurious camera cut events were being issued, especially in HDRP. - Bugfix: Mull reference exceptions when inspector is hidden behind another tab. +- Bugfix: Group Framing inspector was displaying incorrect warning when LookAt target is a group. +- Group Framing: Added a setting to control framing offset, allowing groups to be not centered on the screen. - Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. diff --git a/com.unity.cinemachine/Documentation~/CinemachineGroupFraming.md b/com.unity.cinemachine/Documentation~/CinemachineGroupFraming.md index 2dca67e2b..f06a7a2e8 100644 --- a/com.unity.cinemachine/Documentation~/CinemachineGroupFraming.md +++ b/com.unity.cinemachine/Documentation~/CinemachineGroupFraming.md @@ -1,6 +1,6 @@ # Group Framing -This CinemachineCamera extension adds the ability to frame multiple targets when they are members of a CinemachineTargetGroup. It can be used to dynamically adjust the zoom or to move the camera closer to or farther from the targets, to keep them in the frame. +This CinemachineCamera extension adds the ability to frame one or more targets when they are members of a CinemachineTargetGroup. It can be used to dynamically adjust the zoom or to move the camera closer to or farther from the targets, to keep them in the frame at the desired size. For this to work, the CinemachineCamera's Tracking Target must be a CinemachineTargetGroup, with at least one member, and having a nonzero size. @@ -18,12 +18,13 @@ For this to work, the CinemachineCamera's Tracking Target must be a CinemachineT | | _Dolly Then Zoom_ | Move the camera as much as permitted by the ranges, then adjust the FOV if necessary to make the shot. | | __Lateral Adjustment__ || How to adjust the camera horizontally and vertically to get the desired framing. You can change position to reframe, or rotate the camera to reframe. | | | _Change Position_ | Camera is moved horizontally and vertically until the desired framing is achieved. | -| | _Dolly Only_ | Camera is rotated to achieve the desired framing. | +| | _Change Rotation_ | Camera is rotated to achieve the desired framing. | | __Framing Size__ || The screen-space bounding box that the targets should occupy. Use 1 to fill the whole screen, 0.5 to fill half the screen, and so on. | +| __Framing Offset__ || How to offset the group's bounding shape on the screen, so that the group is not necessarily presented at screen center. 0 is screen center, 1 and -1 are the edges of the screen. | | __Damping__ || How gradually to make the framing adjustment. A larger number gives a slower response, smaller numbers a snappier one. | | __Dolly Range__ || The allowable range that the camera may be moved in order to achieve the desired framing. A negative distance is towards the target, and a positive distance is away from the target. | -| __FOV Range__ || If adjusting FOV, do not set the FOV outside of this range. | -| __Ortho Size Range__ || If adjusting Orthographic Size, do not set it outside of this range. | +| __FOV Range__ || If adjusting FOV, it will be clamped to this range. | +| __Ortho Size Range__ || If adjusting Orthographic Size, it will be clamped to this range. | diff --git a/com.unity.cinemachine/Editor/Editors/CinemachineGroupFramingEditor.cs b/com.unity.cinemachine/Editor/Editors/CinemachineGroupFramingEditor.cs index 362bdf8bc..89ec03d18 100644 --- a/com.unity.cinemachine/Editor/Editors/CinemachineGroupFramingEditor.cs +++ b/com.unity.cinemachine/Editor/Editors/CinemachineGroupFramingEditor.cs @@ -35,6 +35,7 @@ public override VisualElement CreateInspectorGUI() ux.Add(new PropertyField(serializedTarget.FindProperty(() => Target.FramingMode))); ux.Add(new PropertyField(serializedTarget.FindProperty(() => Target.FramingSize))); ux.Add(new PropertyField(serializedTarget.FindProperty(() => Target.Damping))); + ux.Add(new PropertyField(serializedTarget.FindProperty(() => Target.FramingOffset))); var perspectiveControls = ux.AddChild(new VisualElement()); diff --git a/com.unity.cinemachine/Editor/Utility/CmPipelineComponentInspectorUtility.cs b/com.unity.cinemachine/Editor/Utility/CmPipelineComponentInspectorUtility.cs index 6f7ea304d..26d7f3d7c 100644 --- a/com.unity.cinemachine/Editor/Utility/CmPipelineComponentInspectorUtility.cs +++ b/com.unity.cinemachine/Editor/Utility/CmPipelineComponentInspectorUtility.cs @@ -17,7 +17,7 @@ public enum RequiredTargets { None, Tracking, LookAt, Group }; const string k_NeedTarget = "A Tracking Target is required in the CinemachineCamera."; const string k_NeedLookAt = "A LookAt Tracking Target is required in the CinemachineCamera."; - const string k_NeedGroup = "The Tracking Target in the CinemachineCamera must be a Target Group."; + const string k_NeedGroup = "The Tracking or LookAt Target in the CinemachineCamera must be a Target Group."; const string k_NeedCamera = "This component is intended to be used only with a CinemachineCamera."; const string k_AddCamera = "Add\nCinemachineCamera"; @@ -61,7 +61,7 @@ public static void AddMissingCmCameraHelpBox( { case RequiredTargets.Tracking: noTarget |= c.FollowTarget == null; break; case RequiredTargets.LookAt: noTarget |= c.LookAtTarget == null; break; - case RequiredTargets.Group: noTarget |= c.FollowTargetAsGroup == null; break; + case RequiredTargets.Group: noTarget |= c.FollowTargetAsGroup == null && c.LookAtTargetAsGroup == null; break; } } else if (targets[i] is CinemachineExtension x) @@ -71,7 +71,8 @@ public static void AddMissingCmCameraHelpBox( { case RequiredTargets.Tracking: noTarget |= noCamera || x.ComponentOwner.Follow == null; break; case RequiredTargets.LookAt: noTarget |= noCamera || x.ComponentOwner.LookAt == null; break; - case RequiredTargets.Group: noTarget |= noCamera || x.ComponentOwner.FollowTargetAsGroup == null; break; + case RequiredTargets.Group: noTarget |= noCamera + || (x.ComponentOwner.FollowTargetAsGroup == null && x.ComponentOwner.LookAtTargetAsGroup == null); break; } } else if (targets[i] is MonoBehaviour b) diff --git a/com.unity.cinemachine/Runtime/Behaviours/CinemachineGroupFraming.cs b/com.unity.cinemachine/Runtime/Behaviours/CinemachineGroupFraming.cs index 28391c8bb..0572f7533 100644 --- a/com.unity.cinemachine/Runtime/Behaviours/CinemachineGroupFraming.cs +++ b/com.unity.cinemachine/Runtime/Behaviours/CinemachineGroupFraming.cs @@ -43,6 +43,12 @@ public enum FramingModes + "rapidly adjusting the camera to keep the group in the frame. Larger numbers give a heavier " + "more slowly responding camera.")] public float Damping = 2f; + + /// + /// Offset from screen center at which to place the group center. X is left/right, Y is up/down. + /// + [Tooltip("Offset from screen center at which to place the group center. X is left/right, Y is up/down")] + public Vector2 FramingOffset = Vector2.zero; /// How to adjust the camera to get the desired framing size public enum SizeAdjustmentModes @@ -111,6 +117,7 @@ void Reset() LateralAdjustment = LateralAdjustmentModes.ChangePosition; FramingSize = 0.8f; Damping = 2; + FramingOffset = Vector2.zero; DollyRange = new Vector2(-100, 100); FovRange = new Vector2(1, 100); OrthoSizeRange = new Vector2(1, 1000); @@ -185,18 +192,22 @@ void OrthoFraming( var camPos = GroupBounds.center; camPos.z = 0; // don't change the camera's distance from the group - extra.PosAdjustment += vcam.DetachedFollowTargetDamp(camPos - extra.PosAdjustment, damping, deltaTime); - state.RawPosition += state.RawOrientation * extra.PosAdjustment; - // Ortho size adjustment - var targetHeight = GetFrameHeight(GroupBounds.size / FramingSize, state.Lens.Aspect) * 0.5f; + var lens = state.Lens; + var targetHeight = GetFrameHeight(GroupBounds.size / FramingSize, lens.Aspect) * 0.5f; targetHeight = Mathf.Clamp(targetHeight, OrthoSizeRange.x, OrthoSizeRange.y); - var lens = state.Lens; + extra.PosAdjustment += vcam.DetachedFollowTargetDamp(camPos - extra.PosAdjustment, damping, deltaTime); + state.PositionCorrection += state.RawOrientation * extra.PosAdjustment; + var deltaFov = targetHeight - lens.OrthographicSize; extra.FovAdjustment += vcam.DetachedFollowTargetDamp(deltaFov - extra.FovAdjustment, damping, deltaTime); lens.OrthographicSize += extra.FovAdjustment; state.Lens = lens; + + // Apply framing offset + state.PositionCorrection -= state.RawOrientation * new Vector3( + lens.OrthographicSize * lens.Aspect * FramingOffset.x, lens.OrthographicSize * FramingOffset.y, 0); } void PerspectiveFraming( @@ -249,6 +260,20 @@ void PerspectiveFraming( var deltaPos = Quaternion.Inverse(state.RawOrientation) * (camPos - state.RawPosition); extra.PosAdjustment += vcam.DetachedFollowTargetDamp(deltaPos - extra.PosAdjustment, damping, deltaTime); state.PositionCorrection += state.RawOrientation * extra.PosAdjustment; + + // Apply framing offset + if (moveCamera) + { + var h = Mathf.Tan(Mathf.Deg2Rad * lens.FieldOfView * 0.5f) * GroupBounds.center.z; + state.PositionCorrection -= state.RawOrientation * new Vector3( + h * lens.Aspect * FramingOffset.x, h * FramingOffset.y, 0); + } + else + { + state.OrientationCorrection = state.OrientationCorrection.ApplyCameraRotation(new Vector2( + lens.FieldOfView * lens.Aspect * FramingOffset.y * 0.5f, + lens.FieldOfView * FramingOffset.x * -0.5f), Quaternion.Inverse(state.GetFinalOrientation()) * state.ReferenceUp); + } } void AdjustSize( From 34f220146fca179edcd8cfeceef31bb1469f0735 Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Tue, 8 Aug 2023 08:21:06 -0400 Subject: [PATCH 15/21] group framing: nullrefs, remove FramingOffset, improve gameview indicator (#893) --- com.unity.cinemachine/CHANGELOG.md | 8 +- .../Documentation~/CinemachineGroupFraming.md | 1 - .../Editors/CinemachineGroupFramingEditor.cs | 39 +++++--- .../CinemachinePositionComposerEditor.cs | 5 +- .../CinemachineRotationComposerEditor.cs | 5 +- .../Obsolete/CinemachineComposerEditor.cs | 5 +- .../CinemachineFramingTransposerEditor.cs | 11 +-- .../CinemachineGroupComposerEditor.cs | 4 +- .../Editor/Upgrader/UpgradeObjectToCm3.cs | 2 +- .../CmPipelineComponentInspectorUtility.cs | 97 ++++++++++++------- .../Behaviours/CinemachineGroupFraming.cs | 27 +----- .../Behaviours/CinemachineTargetGroup.cs | 8 ++ .../Core/CinemachineVirtualCameraBase.cs | 2 +- .../Runtime/Core/UnityVectorExtensions.cs | 2 +- .../CinemachineFramingTransposer.cs | 2 +- .../Deprecated/CinemachineGroupComposer.cs | 2 +- 16 files changed, 114 insertions(+), 106 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index 0a603d980..c8fa851bc 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -12,14 +12,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Bugfix: CinemachineDeoccluder was causing a pop when OnTargetObjectWarped was called. - Bugfix: Spurious camera cut events were being issued, especially in HDRP. - Bugfix: Mull reference exceptions when inspector is hidden behind another tab. -- Bugfix: Group Framing inspector was displaying incorrect warning when LookAt target is a group. -- Group Framing: Added a setting to control framing offset, allowing groups to be not centered on the screen. -- Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow +- Bugfix: GroupFraming inspector was displaying incorrect warning when LookAt target is a group. +- Bugfix: GroupFraming displays more accurate group size indicator in the game view. +- Bugfix: nullrefs in log when target group was deleted but was still being referenced by vcams. +- Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow. - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. - Renamed CinemachineSplineDolly.CameraUp to CameraRotation, which more accurately reflects what it does. - Renamed InputAxis.DoRecentering() to InputAxis.UpdateRecentering() - Added API in Deoccluder and ThirdPersonFollow to access which collision objects are impacting the camera position. +- Added ICinemachineTargetGroup.IsValid property to detect deleted groups. - Removed CinemachineToolSettings overlay. diff --git a/com.unity.cinemachine/Documentation~/CinemachineGroupFraming.md b/com.unity.cinemachine/Documentation~/CinemachineGroupFraming.md index f06a7a2e8..1e8460267 100644 --- a/com.unity.cinemachine/Documentation~/CinemachineGroupFraming.md +++ b/com.unity.cinemachine/Documentation~/CinemachineGroupFraming.md @@ -20,7 +20,6 @@ For this to work, the CinemachineCamera's Tracking Target must be a CinemachineT | | _Change Position_ | Camera is moved horizontally and vertically until the desired framing is achieved. | | | _Change Rotation_ | Camera is rotated to achieve the desired framing. | | __Framing Size__ || The screen-space bounding box that the targets should occupy. Use 1 to fill the whole screen, 0.5 to fill half the screen, and so on. | -| __Framing Offset__ || How to offset the group's bounding shape on the screen, so that the group is not necessarily presented at screen center. 0 is screen center, 1 and -1 are the edges of the screen. | | __Damping__ || How gradually to make the framing adjustment. A larger number gives a slower response, smaller numbers a snappier one. | | __Dolly Range__ || The allowable range that the camera may be moved in order to achieve the desired framing. A negative distance is towards the target, and a positive distance is away from the target. | | __FOV Range__ || If adjusting FOV, it will be clamped to this range. | diff --git a/com.unity.cinemachine/Editor/Editors/CinemachineGroupFramingEditor.cs b/com.unity.cinemachine/Editor/Editors/CinemachineGroupFramingEditor.cs index 89ec03d18..76f624e1a 100644 --- a/com.unity.cinemachine/Editor/Editors/CinemachineGroupFramingEditor.cs +++ b/com.unity.cinemachine/Editor/Editors/CinemachineGroupFramingEditor.cs @@ -27,26 +27,24 @@ void OnDisable() public override VisualElement CreateInspectorGUI() { - var serializedTarget = new SerializedObject(Target); var ux = new VisualElement(); this.AddMissingCmCameraHelpBox(ux, CmPipelineComponentInspectorUtility.RequiredTargets.Group); var groupSizeIsZeroHelp = ux.AddChild(new HelpBox("Group size is zero, cannot frame.", HelpBoxMessageType.Warning)); - ux.Add(new PropertyField(serializedTarget.FindProperty(() => Target.FramingMode))); - ux.Add(new PropertyField(serializedTarget.FindProperty(() => Target.FramingSize))); - ux.Add(new PropertyField(serializedTarget.FindProperty(() => Target.Damping))); - ux.Add(new PropertyField(serializedTarget.FindProperty(() => Target.FramingOffset))); + ux.Add(new PropertyField(serializedObject.FindProperty(() => Target.FramingMode))); + ux.Add(new PropertyField(serializedObject.FindProperty(() => Target.FramingSize))); + ux.Add(new PropertyField(serializedObject.FindProperty(() => Target.Damping))); var perspectiveControls = ux.AddChild(new VisualElement()); - var sizeAdjustmentProperty = serializedTarget.FindProperty(() => Target.SizeAdjustment); + var sizeAdjustmentProperty = serializedObject.FindProperty(() => Target.SizeAdjustment); perspectiveControls.Add(new PropertyField(sizeAdjustmentProperty)); - perspectiveControls.AddChild(new PropertyField(serializedTarget.FindProperty(() => Target.LateralAdjustment))); - var fovRange = perspectiveControls.AddChild(new PropertyField(serializedTarget.FindProperty(() => Target.FovRange))); - var dollyRange = perspectiveControls.AddChild(new PropertyField(serializedTarget.FindProperty(() => Target.DollyRange))); + perspectiveControls.AddChild(new PropertyField(serializedObject.FindProperty(() => Target.LateralAdjustment))); + var fovRange = perspectiveControls.AddChild(new PropertyField(serializedObject.FindProperty(() => Target.FovRange))); + var dollyRange = perspectiveControls.AddChild(new PropertyField(serializedObject.FindProperty(() => Target.DollyRange))); var orthoControls = ux.AddChild(new VisualElement()); - orthoControls.Add(new PropertyField(serializedTarget.FindProperty(() => Target.OrthoSizeRange))); + orthoControls.Add(new PropertyField(serializedObject.FindProperty(() => Target.OrthoSizeRange))); ux.TrackPropertyValue(sizeAdjustmentProperty, (prop) => { @@ -67,7 +65,11 @@ public override VisualElement CreateInspectorGUI() { var vcam = (targets[i] as CinemachineGroupFraming).ComponentOwner; if (vcam != null) + { group = vcam.FollowTargetAsGroup; + if (group != null && !group.IsValid) + group = null; + } } groupSizeIsZeroHelp.SetVisible(group != null && group.Sphere.radius < 0.01f); @@ -88,23 +90,28 @@ protected virtual void OnGuiHandler(CinemachineBrain brain) return; var vcam = Target.ComponentOwner; - if (!brain.IsValidChannel(vcam)) + if (!brain.IsValidChannel(vcam) || !brain.IsLiveChild(vcam)) return; var group = vcam.LookAtTargetAsGroup; - if (group == null) + group ??= vcam.FollowTargetAsGroup; + if (group == null || !group.IsValid) return; CmPipelineComponentInspectorUtility.OnGUI_DrawOnscreenTargetMarker( - group, group.Sphere.position, - vcam.State.GetFinalOrientation(), brain.OutputCamera); + group.Sphere.position, brain.OutputCamera); + CmPipelineComponentInspectorUtility.OnGUI_DrawOnscreenGroupSizeMarker( + Target.GroupBounds, Target.GroupBoundsMatrix, brain.OutputCamera); } [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy, typeof(CinemachineGroupFraming))] static void DrawGroupComposerGizmos(CinemachineGroupFraming target, GizmoType selectionType) { // Show the group bounding box, as viewed from the camera position - if (target.enabled && target.ComponentOwner != null && target.ComponentOwner.FollowTargetAsGroup != null) + var vcam = target.ComponentOwner; + if (!target.enabled && vcam != null + && (vcam.FollowTargetAsGroup != null && vcam.FollowTargetAsGroup.IsValid) + || (vcam.LookAtTargetAsGroup != null && vcam.LookAtTargetAsGroup.IsValid)) { var oldM = Gizmos.matrix; var oldC = Gizmos.color; @@ -112,7 +119,7 @@ static void DrawGroupComposerGizmos(CinemachineGroupFraming target, GizmoType se Gizmos.matrix = target.GroupBoundsMatrix; Bounds b = target.GroupBounds; Gizmos.color = Color.yellow; - if (target.ComponentOwner.State.Lens.Orthographic) + if (vcam.State.Lens.Orthographic) Gizmos.DrawWireCube(b.center, b.size); else { diff --git a/com.unity.cinemachine/Editor/Editors/CinemachinePositionComposerEditor.cs b/com.unity.cinemachine/Editor/Editors/CinemachinePositionComposerEditor.cs index 47cc1880a..83176426d 100644 --- a/com.unity.cinemachine/Editor/Editors/CinemachinePositionComposerEditor.cs +++ b/com.unity.cinemachine/Editor/Editors/CinemachinePositionComposerEditor.cs @@ -76,11 +76,8 @@ protected virtual void OnGuiHandler(CinemachineBrain brain) // Draw an on-screen gizmo for the target if (Target.FollowTarget != null && isLive) - { CmPipelineComponentInspectorUtility.OnGUI_DrawOnscreenTargetMarker( - null, Target.TrackedPoint, - vcam.State.GetFinalOrientation(), brain.OutputCamera); - } + Target.TrackedPoint, brain.OutputCamera); } void OnSceneGUI() diff --git a/com.unity.cinemachine/Editor/Editors/CinemachineRotationComposerEditor.cs b/com.unity.cinemachine/Editor/Editors/CinemachineRotationComposerEditor.cs index 7c301ee67..ffbd8a4e9 100644 --- a/com.unity.cinemachine/Editor/Editors/CinemachineRotationComposerEditor.cs +++ b/com.unity.cinemachine/Editor/Editors/CinemachineRotationComposerEditor.cs @@ -74,11 +74,8 @@ protected virtual void OnGuiHandler(CinemachineBrain brain) // Draw an on-screen gizmo for the target if (Target.LookAtTarget != null && isLive) - { CmPipelineComponentInspectorUtility.OnGUI_DrawOnscreenTargetMarker( - null, Target.TrackedPoint, - vcam.State.GetFinalOrientation(), brain.OutputCamera); - } + Target.TrackedPoint, brain.OutputCamera); } void OnSceneGUI() diff --git a/com.unity.cinemachine/Editor/Obsolete/CinemachineComposerEditor.cs b/com.unity.cinemachine/Editor/Obsolete/CinemachineComposerEditor.cs index 933114046..c94917147 100644 --- a/com.unity.cinemachine/Editor/Obsolete/CinemachineComposerEditor.cs +++ b/com.unity.cinemachine/Editor/Obsolete/CinemachineComposerEditor.cs @@ -74,11 +74,8 @@ protected virtual void OnGuiHandler(CinemachineBrain brain) // Draw an on-screen gizmo for the target if (Target.LookAtTarget != null && isLive) - { CmPipelineComponentInspectorUtility.OnGUI_DrawOnscreenTargetMarker( - Target.LookAtTargetAsGroup, Target.TrackedPoint, - vcam.State.GetFinalOrientation(), brain.OutputCamera); - } + Target.TrackedPoint, brain.OutputCamera); } void OnSceneGUI() diff --git a/com.unity.cinemachine/Editor/Obsolete/CinemachineFramingTransposerEditor.cs b/com.unity.cinemachine/Editor/Obsolete/CinemachineFramingTransposerEditor.cs index 15e0161d8..f2d6efc53 100644 --- a/com.unity.cinemachine/Editor/Obsolete/CinemachineFramingTransposerEditor.cs +++ b/com.unity.cinemachine/Editor/Obsolete/CinemachineFramingTransposerEditor.cs @@ -25,7 +25,7 @@ protected override void GetExcludedPropertiesInInspector(List excluded) excluded.Add(FieldPath(x => x.m_BiasY)); } ICinemachineTargetGroup group = Target.FollowTargetAsGroup; - if (group == null || Target.m_GroupFramingMode == CinemachineFramingTransposer.FramingMode.None) + if (group == null || !group.IsValid || Target.m_GroupFramingMode == CinemachineFramingTransposer.FramingMode.None) { excluded.Add(FieldPath(x => x.m_GroupFramingSize)); excluded.Add(FieldPath(x => x.m_AdjustmentMode)); @@ -37,7 +37,7 @@ protected override void GetExcludedPropertiesInInspector(List excluded) excluded.Add(FieldPath(x => x.m_MaximumFOV)); excluded.Add(FieldPath(x => x.m_MinimumOrthoSize)); excluded.Add(FieldPath(x => x.m_MaximumOrthoSize)); - if (group == null) + if (group == null || !group.IsValid) excluded.Add(FieldPath(x => x.m_GroupFramingMode)); } else @@ -143,18 +143,15 @@ protected virtual void OnGuiHandler(CinemachineBrain brain) // Draw an on-screen gizmo for the target if (Target.FollowTarget != null && isLive) - { CmPipelineComponentInspectorUtility.OnGUI_DrawOnscreenTargetMarker( - Target.LookAtTargetAsGroup, Target.TrackedPoint, - vcam.State.GetFinalOrientation(), brain.OutputCamera); - } + Target.TrackedPoint, brain.OutputCamera); } [DrawGizmo(GizmoType.Active | GizmoType.InSelectionHierarchy, typeof(CinemachineFramingTransposer))] private static void DrawGroupComposerGizmos(CinemachineFramingTransposer target, GizmoType selectionType) { // Show the group bounding box, as viewed from the camera position - if (target.FollowTargetAsGroup != null + if (target.FollowTargetAsGroup != null && target.FollowTargetAsGroup.IsValid && target.m_GroupFramingMode != CinemachineFramingTransposer.FramingMode.None) { Matrix4x4 m = Gizmos.matrix; diff --git a/com.unity.cinemachine/Editor/Obsolete/CinemachineGroupComposerEditor.cs b/com.unity.cinemachine/Editor/Obsolete/CinemachineGroupComposerEditor.cs index 4a58ec0ba..1ca817b95 100644 --- a/com.unity.cinemachine/Editor/Obsolete/CinemachineGroupComposerEditor.cs +++ b/com.unity.cinemachine/Editor/Obsolete/CinemachineGroupComposerEditor.cs @@ -60,7 +60,7 @@ protected override void GetExcludedPropertiesInInspector(List excluded) public override void OnInspectorGUI() { - if (MyTarget.IsValid && MyTarget.LookAtTargetAsGroup == null) + if (MyTarget.IsValid && (MyTarget.LookAtTargetAsGroup == null || !MyTarget.LookAtTargetAsGroup.IsValid)) EditorGUILayout.HelpBox( "The Framing settings will be ignored because the LookAt target is not a kind of ICinemachineTargetGroup", MessageType.Info); @@ -72,7 +72,7 @@ public override void OnInspectorGUI() static void DrawGroupComposerGizmos(CinemachineGroupComposer target, GizmoType selectionType) { // Show the group bounding box, as viewed from the camera position - if (target.LookAtTargetAsGroup != null) + if (target.LookAtTargetAsGroup != null && target.LookAtTargetAsGroup.IsValid) { Matrix4x4 m = Gizmos.matrix; Bounds b = target.LastBounds; diff --git a/com.unity.cinemachine/Editor/Upgrader/UpgradeObjectToCm3.cs b/com.unity.cinemachine/Editor/Upgrader/UpgradeObjectToCm3.cs index 26ee4d784..7016ade9a 100644 --- a/com.unity.cinemachine/Editor/Upgrader/UpgradeObjectToCm3.cs +++ b/com.unity.cinemachine/Editor/Upgrader/UpgradeObjectToCm3.cs @@ -78,7 +78,7 @@ public GameObject UpgradeComponents(GameObject go) { var ft = go.GetComponent(); ft.UpgradeToCm3(go.GetComponent()); - if (ft.FollowTargetAsGroup != null + if (ft.FollowTargetAsGroup != null && ft.FollowTargetAsGroup.IsValid && ft.m_GroupFramingMode != CinemachineFramingTransposer.FramingMode.None && !go.TryGetComponent(out var _)) { diff --git a/com.unity.cinemachine/Editor/Utility/CmPipelineComponentInspectorUtility.cs b/com.unity.cinemachine/Editor/Utility/CmPipelineComponentInspectorUtility.cs index 26d7f3d7c..1d8b3753c 100644 --- a/com.unity.cinemachine/Editor/Utility/CmPipelineComponentInspectorUtility.cs +++ b/com.unity.cinemachine/Editor/Utility/CmPipelineComponentInspectorUtility.cs @@ -56,23 +56,32 @@ public static void AddMissingCmCameraHelpBox( { if (targets[i] is CinemachineComponentBase c) { - noCamera |= c.VirtualCamera == null || c.VirtualCamera is CinemachineCameraManagerBase; + var vcam = c.VirtualCamera; + noCamera |= vcam == null || vcam is CinemachineCameraManagerBase; + if (vcam != null) + vcam.UpdateTargetCache(); switch (requiredTargets) { case RequiredTargets.Tracking: noTarget |= c.FollowTarget == null; break; case RequiredTargets.LookAt: noTarget |= c.LookAtTarget == null; break; - case RequiredTargets.Group: noTarget |= c.FollowTargetAsGroup == null && c.LookAtTargetAsGroup == null; break; + case RequiredTargets.Group: noTarget |= + (c.FollowTargetAsGroup == null || !c.FollowTargetAsGroup.IsValid) + && (c.LookAtTargetAsGroup == null || !c.LookAtTargetAsGroup.IsValid); break; } } else if (targets[i] is CinemachineExtension x) { - noCamera |= x.ComponentOwner == null; + var vcam = x.ComponentOwner; + noCamera |= vcam == null; + if (vcam != null) + vcam.UpdateTargetCache(); switch (requiredTargets) { - case RequiredTargets.Tracking: noTarget |= noCamera || x.ComponentOwner.Follow == null; break; - case RequiredTargets.LookAt: noTarget |= noCamera || x.ComponentOwner.LookAt == null; break; + case RequiredTargets.Tracking: noTarget |= noCamera || vcam.Follow == null; break; + case RequiredTargets.LookAt: noTarget |= noCamera || vcam.LookAt == null; break; case RequiredTargets.Group: noTarget |= noCamera - || (x.ComponentOwner.FollowTargetAsGroup == null && x.ComponentOwner.LookAtTargetAsGroup == null); break; + || ((vcam.FollowTargetAsGroup == null || !vcam.FollowTargetAsGroup.IsValid) + && (vcam.LookAtTargetAsGroup == null || !vcam.LookAtTargetAsGroup.IsValid)); break; } } else if (targets[i] is MonoBehaviour b) @@ -175,40 +184,50 @@ void AddController(Type controllerType) }; } - - public static void OnGUI_DrawOnscreenTargetMarker( - ICinemachineTargetGroup group, Vector3 worldPoint, - Quaternion vcamRotation, Camera camera) + public static void OnGUI_DrawOnscreenTargetMarker(Vector3 worldPoint, Camera camera) { var c = camera.WorldToScreenPoint(worldPoint); c.y = Screen.height - c.y; + if (c.z > 0) + { + var oldColor = GUI.color; + var r = new Rect(c, Vector2.zero).Inflated(Vector2.one * CinemachineComposerPrefs.TargetSize.Value); + GUI.color = new Color(0, 0, 0, CinemachineComposerPrefs.OverlayOpacity.Value); + GUI.DrawTexture(r.Inflated(new Vector2(1, 1)), Texture2D.whiteTexture, ScaleMode.StretchToFill); + var color = CinemachineComposerPrefs.TargetColour.Value; + GUI.color = color; + GUI.DrawTexture(r, Texture2D.whiteTexture, ScaleMode.StretchToFill); + GUI.color = oldColor; + } + } + + public static void OnGUI_DrawOnscreenGroupSizeMarker( + Bounds groupBounds, Matrix4x4 cameraViewMatrix, Camera camera) + { + var c = groupBounds.center; c.z -= groupBounds.extents.z; groupBounds.center = c; + var e = groupBounds.extents; e.z = 0; groupBounds.extents = e; + + c = camera.WorldToScreenPoint(cameraViewMatrix.MultiplyPoint3x4(c)); if (c.z < 0) return; + e = camera.WorldToScreenPoint(cameraViewMatrix.MultiplyPoint3x4(groupBounds.center + e)); + var groupSize = new Vector2(Mathf.Abs(e.x - c.x), Mathf.Abs(e.y - c.y)); - var oldColor = GUI.color; - float radius = 0; - if (group != null) - { - var p2 = camera.WorldToScreenPoint( - worldPoint + vcamRotation * new Vector3(group.Sphere.radius, 0, 0)); - radius = Mathf.Abs(p2.x - c.x); - } - var r = new Rect(c, Vector2.zero).Inflated(Vector2.one * CinemachineComposerPrefs.TargetSize.Value); - GUI.color = new Color(0, 0, 0, CinemachineComposerPrefs.OverlayOpacity.Value); - GUI.DrawTexture(r.Inflated(new Vector2(1, 1)), Texture2D.whiteTexture, ScaleMode.StretchToFill); - var color = CinemachineComposerPrefs.TargetColour.Value; - GUI.color = color; - GUI.DrawTexture(r, Texture2D.whiteTexture, ScaleMode.StretchToFill); + var radius = Mathf.Max(groupSize.x, groupSize.y); if (radius > CinemachineComposerPrefs.TargetSize.Value) { - color.a = Mathf.Lerp(1f, CinemachineComposerPrefs.OverlayOpacity.Value, (radius - 10f) / 50f); + var oldColor = GUI.color; + var color = CinemachineComposerPrefs.TargetColour.Value; + color.a = Mathf.Lerp(1f, CinemachineComposerPrefs.OverlayOpacity.Value, (radius - 10f) / 100f); GUI.color = color; - GUI.DrawTexture(r.Inflated(new Vector2(radius, radius)), - GetTargetMarkerTex(), ScaleMode.StretchToFill); + c.y = camera.pixelHeight - c.y; + var r = new Rect(c, Vector2.zero).Inflated(groupSize); + GUI.DrawTexture(r, GetTargetMarkerTex(), ScaleMode.StretchToFill); + GUI.color = oldColor; } - GUI.color = oldColor; } + static Texture2D s_TargetMarkerTex = null; static Texture2D GetTargetMarkerTex() { @@ -249,22 +268,32 @@ public static void IMGUI_DrawMissingCmCameraHelpBox( { if (targets[i] is CinemachineComponentBase c) { - noCamera |= c.VirtualCamera == null || c.VirtualCamera is CinemachineCameraManagerBase; + var vcam = c.VirtualCamera; + noCamera |= vcam == null || vcam is CinemachineCameraManagerBase; + if (vcam != null) + vcam.UpdateTargetCache(); switch (requiredTargets) { case RequiredTargets.Tracking: noTarget |= c.FollowTarget == null; break; case RequiredTargets.LookAt: noTarget |= c.LookAtTarget == null; break; - case RequiredTargets.Group: noTarget |= c.FollowTargetAsGroup == null; break; + case RequiredTargets.Group: noTarget |= + (c.FollowTargetAsGroup == null || !c.FollowTargetAsGroup.IsValid) + && (c.LookAtTargetAsGroup == null || !c.LookAtTargetAsGroup.IsValid); break; } } else if (targets[i] is CinemachineExtension x) { - noCamera |= x.ComponentOwner == null; + var vcam = x.ComponentOwner; + noCamera |= vcam == null; + if (vcam != null) + vcam.UpdateTargetCache(); switch (requiredTargets) { - case RequiredTargets.Tracking: noTarget |= noCamera || x.ComponentOwner.Follow == null; break; - case RequiredTargets.LookAt: noTarget |= noCamera || x.ComponentOwner.LookAt == null; break; - case RequiredTargets.Group: noTarget |= noCamera || x.ComponentOwner.FollowTargetAsGroup == null; break; + case RequiredTargets.Tracking: noTarget |= noCamera || vcam.Follow == null; break; + case RequiredTargets.LookAt: noTarget |= noCamera || vcam.LookAt == null; break; + case RequiredTargets.Group: noTarget |= noCamera + || ((vcam.FollowTargetAsGroup == null || !vcam.FollowTargetAsGroup.IsValid) + && (vcam.LookAtTargetAsGroup == null || !vcam.LookAtTargetAsGroup.IsValid)); break; } } } diff --git a/com.unity.cinemachine/Runtime/Behaviours/CinemachineGroupFraming.cs b/com.unity.cinemachine/Runtime/Behaviours/CinemachineGroupFraming.cs index 0572f7533..e21c65907 100644 --- a/com.unity.cinemachine/Runtime/Behaviours/CinemachineGroupFraming.cs +++ b/com.unity.cinemachine/Runtime/Behaviours/CinemachineGroupFraming.cs @@ -43,12 +43,6 @@ public enum FramingModes + "rapidly adjusting the camera to keep the group in the frame. Larger numbers give a heavier " + "more slowly responding camera.")] public float Damping = 2f; - - /// - /// Offset from screen center at which to place the group center. X is left/right, Y is up/down. - /// - [Tooltip("Offset from screen center at which to place the group center. X is left/right, Y is up/down")] - public Vector2 FramingOffset = Vector2.zero; /// How to adjust the camera to get the desired framing size public enum SizeAdjustmentModes @@ -117,7 +111,6 @@ void Reset() LateralAdjustment = LateralAdjustmentModes.ChangePosition; FramingSize = 0.8f; Damping = 2; - FramingOffset = Vector2.zero; DollyRange = new Vector2(-100, 100); FovRange = new Vector2(1, 100); OrthoSizeRange = new Vector2(1, 1000); @@ -167,7 +160,7 @@ protected override void PostPipelineStageCallback( var group = vcam.LookAtTargetAsGroup; group ??= vcam.FollowTargetAsGroup; - if (group == null) + if (group == null || !group.IsValid) return; var extra = GetExtraState(vcam); @@ -204,10 +197,6 @@ void OrthoFraming( extra.FovAdjustment += vcam.DetachedFollowTargetDamp(deltaFov - extra.FovAdjustment, damping, deltaTime); lens.OrthographicSize += extra.FovAdjustment; state.Lens = lens; - - // Apply framing offset - state.PositionCorrection -= state.RawOrientation * new Vector3( - lens.OrthographicSize * lens.Aspect * FramingOffset.x, lens.OrthographicSize * FramingOffset.y, 0); } void PerspectiveFraming( @@ -260,20 +249,6 @@ void PerspectiveFraming( var deltaPos = Quaternion.Inverse(state.RawOrientation) * (camPos - state.RawPosition); extra.PosAdjustment += vcam.DetachedFollowTargetDamp(deltaPos - extra.PosAdjustment, damping, deltaTime); state.PositionCorrection += state.RawOrientation * extra.PosAdjustment; - - // Apply framing offset - if (moveCamera) - { - var h = Mathf.Tan(Mathf.Deg2Rad * lens.FieldOfView * 0.5f) * GroupBounds.center.z; - state.PositionCorrection -= state.RawOrientation * new Vector3( - h * lens.Aspect * FramingOffset.x, h * FramingOffset.y, 0); - } - else - { - state.OrientationCorrection = state.OrientationCorrection.ApplyCameraRotation(new Vector2( - lens.FieldOfView * lens.Aspect * FramingOffset.y * 0.5f, - lens.FieldOfView * FramingOffset.x * -0.5f), Quaternion.Inverse(state.GetFinalOrientation()) * state.ReferenceUp); - } } void AdjustSize( diff --git a/com.unity.cinemachine/Runtime/Behaviours/CinemachineTargetGroup.cs b/com.unity.cinemachine/Runtime/Behaviours/CinemachineTargetGroup.cs index 5ee17cbb0..327a9404c 100644 --- a/com.unity.cinemachine/Runtime/Behaviours/CinemachineTargetGroup.cs +++ b/com.unity.cinemachine/Runtime/Behaviours/CinemachineTargetGroup.cs @@ -11,6 +11,11 @@ namespace Unity.Cinemachine /// public interface ICinemachineTargetGroup { + /// + /// Returns true if object has not been deleted. + /// + bool IsValid { get; } + /// /// Get the MonoBehaviour's Transform /// @@ -193,6 +198,9 @@ public Target[] m_Targets /// public Transform Transform => transform; + /// + public bool IsValid => this != null; + /// The axis-aligned bounding box of the group, computed using the /// targets positions and radii public Bounds BoundingBox diff --git a/com.unity.cinemachine/Runtime/Core/CinemachineVirtualCameraBase.cs b/com.unity.cinemachine/Runtime/Core/CinemachineVirtualCameraBase.cs index a6f2452b1..28a840e16 100644 --- a/com.unity.cinemachine/Runtime/Core/CinemachineVirtualCameraBase.cs +++ b/com.unity.cinemachine/Runtime/Core/CinemachineVirtualCameraBase.cs @@ -725,7 +725,7 @@ static OnDomainReload() /// targets and update the target cache. This is needed for tracking /// when a target object changes. /// - protected void UpdateTargetCache() + public void UpdateTargetCache() { var target = ResolveFollow(Follow); FollowTargetChanged = target != m_CachedFollowTarget; diff --git a/com.unity.cinemachine/Runtime/Core/UnityVectorExtensions.cs b/com.unity.cinemachine/Runtime/Core/UnityVectorExtensions.cs index 5a44f248b..ce76316fd 100644 --- a/com.unity.cinemachine/Runtime/Core/UnityVectorExtensions.cs +++ b/com.unity.cinemachine/Runtime/Core/UnityVectorExtensions.cs @@ -398,7 +398,7 @@ public static class UnityRectExtensions { /// Inflate a rect /// - /// x and y are added/subtracted fto/from the edges of + /// x and y are added/subtracted to/from the edges of /// the rect, inflating it in all directions /// The inflated rect public static Rect Inflated(this Rect r, Vector2 delta) diff --git a/com.unity.cinemachine/Runtime/Deprecated/CinemachineFramingTransposer.cs b/com.unity.cinemachine/Runtime/Deprecated/CinemachineFramingTransposer.cs index e5c3843d8..69172bf12 100644 --- a/com.unity.cinemachine/Runtime/Deprecated/CinemachineFramingTransposer.cs +++ b/com.unity.cinemachine/Runtime/Deprecated/CinemachineFramingTransposer.cs @@ -439,7 +439,7 @@ public override void MutateCameraState(ref CameraState curState, float deltaTime // Compute group bounds and adjust follow target for group framing ICinemachineTargetGroup group = FollowTargetAsGroup; - bool isGroupFraming = group != null && m_GroupFramingMode != FramingMode.None && !group.IsEmpty; + bool isGroupFraming = group != null && group.IsValid && m_GroupFramingMode != FramingMode.None && !group.IsEmpty; if (isGroupFraming) followTargetPosition = ComputeGroupBounds(group, ref curState); diff --git a/com.unity.cinemachine/Runtime/Deprecated/CinemachineGroupComposer.cs b/com.unity.cinemachine/Runtime/Deprecated/CinemachineGroupComposer.cs index 5584865eb..012ccb63f 100644 --- a/com.unity.cinemachine/Runtime/Deprecated/CinemachineGroupComposer.cs +++ b/com.unity.cinemachine/Runtime/Deprecated/CinemachineGroupComposer.cs @@ -146,7 +146,7 @@ public override void MutateCameraState(ref CameraState curState, float deltaTime { // Can't do anything without a group to look at ICinemachineTargetGroup group = LookAtTargetAsGroup; - if (group == null) + if (group == null || !group.IsValid) { base.MutateCameraState(ref curState, deltaTime); return; From 57c342f0c42260f2f71c87436db4f8fe869b7718 Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Wed, 16 Aug 2023 15:07:08 -0400 Subject: [PATCH 16/21] Added player rotation mode to 3rdPerson aim sample controller --- .../3D Samples/ThirdPerson Shooter.unity | 34 ++++++--- .../Scripts/SimplePlayerAimController.cs | 76 +++++++++++++++---- 2 files changed, 82 insertions(+), 28 deletions(-) diff --git a/com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity b/com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity index a080f5f36..69741726b 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity @@ -146,6 +146,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 91789085} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -160,7 +161,6 @@ Transform: - {fileID: 899464901} - {fileID: 1499453004} m_Father: {fileID: 0} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &176892992 GameObject: @@ -247,13 +247,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 176892992} + serializedVersion: 2 m_LocalRotation: {x: -0.000000004474823, y: -0.0000000134244695, z: -6.0072126e-17, w: 1} m_LocalPosition: {x: 1.703536, y: 0.9815994, z: -2.8200002} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &176892996 MonoBehaviour: @@ -1098,16 +1098,12 @@ MonoBehaviour: Owner: {fileID: 1370871612} Enabled: 1 Input: - InputAction: {fileID: 689394316002774636, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} - Gain: 1 LegacyInput: Cancel LegacyGain: 1 InputValue: 0 Driver: AccelTime: 0 DecelTime: 0 - PlayerIndex: -1 - AutoEnableInputs: 1 --- !u!114 &1370871612 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1191,13 +1187,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1370871610} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1499453001 PrefabInstance: @@ -1370,13 +1366,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1525634690} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0.50499994, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1802572048} - m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1525634693 MonoBehaviour: @@ -1390,7 +1386,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5232368c753c54e419e00665fe96a8e1, type: 3} m_Name: m_EditorClassIdentifier: - LockPlayerToCamera: 0 + PlayerRotation: 1 RotationDamping: 0.2 HorizontalLook: Value: 0 @@ -3074,13 +3070,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2076565716644322336} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1.559051, y: 0.77348024, z: -3.1799998} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2076565717059590787} - m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &2076565716644322342 MonoBehaviour: @@ -3227,6 +3223,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2076565717059590909} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} @@ -3235,7 +3232,6 @@ Transform: - {fileID: 8511452450538986272} - {fileID: 2076565716644322341} m_Father: {fileID: 0} - m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2076565717059590909 GameObject: @@ -3360,13 +3356,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8511452450538986274} + serializedVersion: 2 m_LocalRotation: {x: -0.000000004474823, y: -0.0000000134244695, z: -6.0072126e-17, w: 1} m_LocalPosition: {x: 1.703536, y: 0.9815994, z: -2.8200002} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 2076565717059590787} - m_RootOrder: -1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &8511452450538986274 GameObject: @@ -3432,3 +3428,17 @@ MonoBehaviour: CameraRadius: 0.2 DampingIntoCollision: 0 DampingFromCollision: 0.5 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1810972772} + - {fileID: 1722462835} + - {fileID: 1370871613} + - {fileID: 176892995} + - {fileID: 3691321984223930902} + - {fileID: 1802572047} + - {fileID: 834799665} + - {fileID: 178274580} + - {fileID: 91789086} + - {fileID: 2076565717059590787} diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs index 01bd2b041..5287702b5 100644 --- a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs +++ b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs @@ -10,7 +10,9 @@ namespace Unity.Cinemachine.Samples /// public class SimplePlayerAimController : MonoBehaviour, IInputAxisOwner { - public bool LockPlayerToCamera; + public enum CouplingMode { Coupled, CoupledWhenMoving, Decoupled } + public CouplingMode PlayerRotation; + public float RotationDamping = 0.2f; [Tooltip("Horizontal Rotation.")] @@ -21,6 +23,7 @@ public class SimplePlayerAimController : MonoBehaviour, IInputAxisOwner SimplePlayerController m_Controller; + Quaternion m_DesiredWorldRotation; /// Report the available input axes to the input axis controller. /// We use the Input Axis Controller because it works with both the Input package @@ -40,7 +43,7 @@ void OnValidate() VerticalLook.Validate(); } - void Start() + void OnEnable() { m_Controller = GetComponentInParent(); if (m_Controller == null) @@ -48,12 +51,29 @@ void Start() else { m_Controller.Strafe = true; - m_Controller.PreUpdate += UpdateRotation; + m_Controller.PreUpdate -= UpdatePlayerRotation; + m_Controller.PreUpdate += UpdatePlayerRotation; + m_Controller.PostUpdate -= PostUpdate; + m_Controller.PostUpdate += PostUpdate; + } + } + + void OnDisable() + { + if (m_Controller != null) + { + m_Controller.PreUpdate -= UpdatePlayerRotation; + m_Controller.PostUpdate -= PostUpdate; } } + /// Recenters the player to match my rotation + /// How long the recentering should take public void RecenterPlayer(float damping = 0) { + if (m_Controller == null) + return; + var rot = transform.rotation.eulerAngles; var parentRot = m_Controller.transform.rotation.eulerAngles; var delta = rot.y - parentRot.y; @@ -69,26 +89,50 @@ public void RecenterPlayer(float damping = 0) transform.rotation = Quaternion.Euler(rot); } - void UpdateRotation() + void UpdatePlayerRotation() { transform.localRotation = Quaternion.Euler(VerticalLook.Value, HorizontalLook.Value, 0); - if (LockPlayerToCamera) + m_DesiredWorldRotation = transform.rotation; + switch (PlayerRotation) { - var yaw = transform.rotation.eulerAngles.y; - var parentRot = m_Controller.transform.rotation.eulerAngles; - HorizontalLook.Value = 0; - m_Controller.transform.rotation = Quaternion.Euler(new Vector3(parentRot.x, yaw, parentRot.z)); - } - else - { - // If the player is moving, rotate its yaw to match the camera direction, - // otherwise let the camera orbit - if (m_Controller.IsMoving) - RecenterPlayer(RotationDamping); + case CouplingMode.Coupled: + { + var yaw = transform.rotation.eulerAngles.y; + var parentRot = m_Controller.transform.rotation.eulerAngles; + HorizontalLook.Value = 0; + m_Controller.transform.rotation = Quaternion.Euler(new Vector3(parentRot.x, yaw, parentRot.z)); + break; + } + case CouplingMode.CoupledWhenMoving: + { + // If the player is moving, rotate its yaw to match the camera direction, + // otherwise let the camera orbit + if (m_Controller.IsMoving) + RecenterPlayer(RotationDamping); + break; + } + case CouplingMode.Decoupled: break; } var gotInput = VerticalLook.TrackValueChange() | HorizontalLook.TrackValueChange(); VerticalLook.UpdateRecentering(Time.deltaTime, gotInput); HorizontalLook.UpdateRecentering(Time.deltaTime, gotInput); } + + void PostUpdate(Vector3 vel, float speed) + { + if (PlayerRotation == CouplingMode.Decoupled) + { + // After player has been rotated, we subtract any rotation change + // from our own transform, to maintain our world rotation + var delta = (Quaternion.Inverse(m_Controller.transform.rotation) * m_DesiredWorldRotation).eulerAngles; + transform.rotation = m_DesiredWorldRotation; + if (delta.x > 180) + delta.x -= 360; + if (delta.y > 180) + delta.y -= 360; + VerticalLook.Value = delta.x; + HorizontalLook.Value = delta.y; + } + } } } \ No newline at end of file From da591071f36c09693e37fe06a1004ac220346e88 Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Wed, 23 Aug 2023 16:29:12 -0400 Subject: [PATCH 17/21] Update CameraUpdateManager.cs --- com.unity.cinemachine/Runtime/Core/CameraUpdateManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/com.unity.cinemachine/Runtime/Core/CameraUpdateManager.cs b/com.unity.cinemachine/Runtime/Core/CameraUpdateManager.cs index 3e22909c4..c533f456c 100644 --- a/com.unity.cinemachine/Runtime/Core/CameraUpdateManager.cs +++ b/com.unity.cinemachine/Runtime/Core/CameraUpdateManager.cs @@ -194,7 +194,7 @@ internal static void UpdateVirtualCamera( deltaTime *= frameDelta; // try to catch up if multiple frames } -//Debug.Log((vcam.ParentCamera == null ? "" : vcam.ParentCamera.Name + ".") + vcam.Name + ": frame " + Time.frameCount + "/" + status.lastUpdateFixedFrame + ", " + CurrentUpdateFilter + ", deltaTime = " + deltaTime); +//Debug.Log((vcam.ParentCamera == null ? "" : vcam.ParentCamera.Name + ".") + vcam.Name + ": frame " + Time.frameCount + "/" + status.lastUpdateFixedFrame + ", " + s_CurrentUpdateFilter + ", deltaTime = " + deltaTime); vcam.InternalUpdateCameraState(worldUp, deltaTime); status.lastUpdateFrame = Time.frameCount; status.lastUpdateFixedFrame = s_FixedFrameCount; From e2bf51887f081a1300a63d3671405d400924cb19 Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Thu, 24 Aug 2023 21:33:47 -0400 Subject: [PATCH 18/21] Improved OrbitalFollow's ForceCameraPosition algorithm --- com.unity.cinemachine/CHANGELOG.md | 1 + .../Components/CinemachineOrbitalFollow.cs | 45 +++++++++++-------- .../Runtime/Core/InputAxis.cs | 7 +-- .../Runtime/Core/UnityVectorExtensions.cs | 11 +++++ .../Runtime/Deprecated/CinemachineFreeLook.cs | 41 ++++++++++------- .../Runtime/FreelookForcePositionTests.cs | 8 ++-- 6 files changed, 73 insertions(+), 40 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index c8fa851bc..e7cadd424 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Bugfix: GroupFraming displays more accurate group size indicator in the game view. - Bugfix: nullrefs in log when target group was deleted but was still being referenced by vcams. - Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow. +- Improved OrbitalFollow's ForceCameraPosition algorithm. - Deoccluder accommodates camera radius in all modes. - StateDrivenCamera: child camera enabled status and priority are now taken into account when choosing the current active camera. - Renamed CinemachineSplineDolly.CameraUp to CameraRotation, which more accurately reflects what it does. diff --git a/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs b/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs index 2825dc9be..199dc90ae 100644 --- a/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs +++ b/com.unity.cinemachine/Runtime/Components/CinemachineOrbitalFollow.cs @@ -262,8 +262,9 @@ void InferAxesFromPosition_Sphere(Vector3 dir, float distance) var orient = m_TargetTracker.GetReferenceOrientation(this, TrackerSettings.BindingMode, up); var localDir = Quaternion.Inverse(orient) * dir; var r = UnityVectorExtensions.SafeFromToRotation(Vector3.back, localDir, up).eulerAngles; - VerticalAxis.Value = VerticalAxis.ClampValue(TrackerSettings.BindingMode == BindingMode.LazyFollow ? 0 : r.x); - HorizontalAxis.Value = HorizontalAxis.ClampValue(r.y); + VerticalAxis.Value = VerticalAxis.ClampValue(TrackerSettings.BindingMode == BindingMode.LazyFollow + ? 0 : UnityVectorExtensions.NormalizeAngle(r.x)); + HorizontalAxis.Value = HorizontalAxis.ClampValue(UnityVectorExtensions.NormalizeAngle(r.y)); RadialAxis.Value = RadialAxis.ClampValue(distance / Radius); } @@ -308,9 +309,9 @@ float GetVerticalAxisClosestValue(out Vector3 splinePoint) // local functions float SteepestDescent(Vector3 cameraOffset) { - const int maxIteration = 10; - const float epsilon = 0.00005f; - var x = InitialGuess(cameraOffset); + const int maxIteration = 5; + const float epsilon = 0.005f; + var x = InitialGuess(); for (var i = 0; i < maxIteration; ++i) { var angle = AngleFunction(x); @@ -336,22 +337,30 @@ float SlopeOfAngleFunction(float input) return (angleAfter - angleBehind) / (2f * epsilon); } - // initial guess based on closest line (approximating spline) to point - float InitialGuess(Vector3 cameraPosInRigSpace) + float InitialGuess() { if (m_OrbitCache.SettingsChanged(Orbits)) m_OrbitCache.UpdateOrbitCache(Orbits); - - var pb = m_OrbitCache.SplineValue(0f); // point at the bottom of spline - var pm = m_OrbitCache.SplineValue(0.5f); // point in the middle of spline - var pt = m_OrbitCache.SplineValue(1f); // point at the top of spline - var t1 = cameraPosInRigSpace.ClosestPointOnSegment(pb, pm); - var d1 = Vector3.SqrMagnitude(Vector3.Lerp(pb, pm, t1) - cameraPosInRigSpace); - var t2 = cameraPosInRigSpace.ClosestPointOnSegment(pm, pt); - var d2 = Vector3.SqrMagnitude(Vector3.Lerp(pm, pt, t2) - cameraPosInRigSpace); - - // [0,0.5] represent bottom to mid, and [0.5,1] represents mid to top - return d1 < d2 ? Mathf.Lerp(0f, 0.5f, t1) : Mathf.Lerp(0.5f, 1f, t2); // represents mid to top + + const float step = 1.0f / 10; + float best = 0.5f; + float bestAngle = AngleFunction(best); + for (int j = 0; j <= 5; ++j) + { + var t = j * step; + ChooseBestAngle(0.5f + t); + ChooseBestAngle(0.5f - t); + void ChooseBestAngle(float x) + { + var a = AngleFunction(x); + if (a < bestAngle) + { + bestAngle = a; + best = x; + } + } + } + return best; } } diff --git a/com.unity.cinemachine/Runtime/Core/InputAxis.cs b/com.unity.cinemachine/Runtime/Core/InputAxis.cs index b7c53cffc..a2d592e02 100644 --- a/com.unity.cinemachine/Runtime/Core/InputAxis.cs +++ b/com.unity.cinemachine/Runtime/Core/InputAxis.cs @@ -165,11 +165,12 @@ public enum RestrictionFlags public float ClampValue(float v) { float r = Range.y - Range.x; + if (!Wrap || r < UnityVectorExtensions.Epsilon) + return Mathf.Clamp(v, Range.x, Range.y); + var v1 = (v - Range.x) % r; v1 += v1 < 0 ? r : 0; - v1 += Range.x; - v1 = (Wrap && r > UnityVectorExtensions.Epsilon) ? v1 : v; - return Mathf.Clamp(v1, Range.x, Range.y); + return v1 + Range.x; } /// Clamp and scale the value to range 0...1, taking wrap into account diff --git a/com.unity.cinemachine/Runtime/Core/UnityVectorExtensions.cs b/com.unity.cinemachine/Runtime/Core/UnityVectorExtensions.cs index ce76316fd..6fbfd330b 100644 --- a/com.unity.cinemachine/Runtime/Core/UnityVectorExtensions.cs +++ b/com.unity.cinemachine/Runtime/Core/UnityVectorExtensions.cs @@ -291,6 +291,17 @@ public static Vector3 SlerpWithReferenceUp( Vector3 dir = q * Vector3.forward; return dir * Mathf.Lerp(dA, dB, t); } + + /// + /// Put euler angle in the range of -180...180 + /// + /// The angle to normalize + /// The angle expressed as a value -180...180 + public static float NormalizeAngle(float angle) + { + angle %= 360; + return angle > 180 ? angle -360 : angle; + } } /// Extensions to the Quaternion class, used in various places by Cinemachine diff --git a/com.unity.cinemachine/Runtime/Deprecated/CinemachineFreeLook.cs b/com.unity.cinemachine/Runtime/Deprecated/CinemachineFreeLook.cs index 4a2caf7bc..0b532a3d9 100644 --- a/com.unity.cinemachine/Runtime/Deprecated/CinemachineFreeLook.cs +++ b/com.unity.cinemachine/Runtime/Deprecated/CinemachineFreeLook.cs @@ -484,9 +484,9 @@ float GetYAxisClosestValue(Vector3 cameraPos, Vector3 up) float SteepestDescent(Vector3 cameraOffset) { - const int maxIteration = 10; - const float epsilon = 0.00005f; - var x = InitialGuess(cameraOffset); + const int maxIteration = 5; + const float epsilon = 0.005f; + var x = InitialGuess(); for (var i = 0; i < maxIteration; ++i) { var angle = AngleFunction(x); @@ -503,6 +503,7 @@ float AngleFunction(float input) var point = GetLocalPositionForCameraFromInput(input); return Mathf.Abs(UnityVectorExtensions.SignedAngle(cameraOffset, point, Vector3.right)); } + // approximating derivative using symmetric difference quotient (finite diff) float SlopeOfAngleFunction(float input) { @@ -510,20 +511,30 @@ float SlopeOfAngleFunction(float input) var angleAfter = AngleFunction(input + epsilon); return (angleAfter - angleBehind) / (2f * epsilon); } - // initial guess based on closest line (approximating spline) to point - float InitialGuess(Vector3 cameraPosInRigSpace) + + float InitialGuess() { UpdateCachedSpline(); - var pb = m_CachedKnots[1]; // point at the bottom of spline - var pm = m_CachedKnots[2]; // point in the middle of spline - var pt = m_CachedKnots[3]; // point at the top of spline - var t1 = cameraPosInRigSpace.ClosestPointOnSegment(pb, pm); - var d1 = Vector3.SqrMagnitude(Vector3.Lerp(pb, pm, t1) - cameraPosInRigSpace); - var t2 = cameraPosInRigSpace.ClosestPointOnSegment(pm, pt); - var d2 = Vector3.SqrMagnitude(Vector3.Lerp(pm, pt, t2) - cameraPosInRigSpace); - - // [0,0.5] represent bottom to mid, and [0.5,1] represents mid to top - return d1 < d2 ? Mathf.Lerp(0f, 0.5f, t1) : Mathf.Lerp(0.5f, 1f, t2); + + const float step = 1.0f / 10; + float best = 0.5f; + float bestAngle = AngleFunction(best); + for (int j = 0; j <= 5; ++j) + { + var t = j * step; + ChooseBestAngle(0.5f + t); + ChooseBestAngle(0.5f - t); + void ChooseBestAngle(float x) + { + var a = AngleFunction(x); + if (a < bestAngle) + { + bestAngle = a; + best = x; + } + } + } + return best; } } diff --git a/com.unity.cinemachine/Tests/Runtime/FreelookForcePositionTests.cs b/com.unity.cinemachine/Tests/Runtime/FreelookForcePositionTests.cs index f13f0dd72..13b73dc21 100644 --- a/com.unity.cinemachine/Tests/Runtime/FreelookForcePositionTests.cs +++ b/com.unity.cinemachine/Tests/Runtime/FreelookForcePositionTests.cs @@ -61,7 +61,7 @@ static IEnumerable RigSetups Center = new Cinemachine3OrbitRig.Orbit { Height = -3, Radius = 8}, Bottom = new Cinemachine3OrbitRig.Orbit { Height = -5, Radius = 5} }, - Precision = 0.01f // this does not have difficult edge cases + Precision = 0.5f }).SetName("3Ring-Centered").Returns(null); yield return new TestCaseData( @@ -70,10 +70,10 @@ static IEnumerable RigSetups OrbitStyle = CinemachineOrbitalFollow.OrbitStyles.ThreeRing, Orbits = new Cinemachine3OrbitRig.Settings { Top = new Cinemachine3OrbitRig.Orbit { Height = 5, Radius = 3}, - Center = new Cinemachine3OrbitRig.Orbit { Height = 3, Radius = 1}, + Center = new Cinemachine3OrbitRig.Orbit { Height = 3, Radius = 4}, Bottom = new Cinemachine3OrbitRig.Orbit { Height = 1, Radius = 2} }, - Precision = 0.5f // this has a few difficult cases to resolve and thus error is expected + Precision = 0.5f }).SetName("3Ring-Above").Returns(null); yield return new TestCaseData( @@ -85,7 +85,7 @@ static IEnumerable RigSetups Center = new Cinemachine3OrbitRig.Orbit { Height = -3, Radius = 8}, Bottom = new Cinemachine3OrbitRig.Orbit { Height = -5, Radius = 3} }, - Precision = 0.5f // this has a few difficult cases to resolve and thus error is expected + Precision = 0.5f }).SetName("3Ring-Below").Returns(null); yield return new TestCaseData( From 1e97f1baeff0633916214c03b163cf245fd29261 Mon Sep 17 00:00:00 2001 From: Greg Labute Date: Fri, 25 Aug 2023 12:35:06 -0400 Subject: [PATCH 19/21] fix an incorrect sample input in SplitScreenCar --- .../Samples~/3D Samples/SplitScreenCar.unity | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/com.unity.cinemachine/Samples~/3D Samples/SplitScreenCar.unity b/com.unity.cinemachine/Samples~/3D Samples/SplitScreenCar.unity index 675cf8b7d..cfc256f8d 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/SplitScreenCar.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/SplitScreenCar.unity @@ -231,13 +231,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 435228071} + serializedVersion: 2 m_LocalRotation: {x: 0.048943356, y: -0.84074587, z: 0.077105284, w: 0.5336719} m_LocalPosition: {x: 1.121963, y: 2.1499999, z: 12.315761} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &491555735 GameObject: @@ -356,13 +356,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 491555735} + serializedVersion: 2 m_LocalRotation: {x: 0.048943356, y: -0.84074587, z: 0.077105284, w: 0.5336719} m_LocalPosition: {x: 1.121963, y: 2.1499999, z: 12.315761} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &598891874 PrefabInstance: @@ -503,7 +503,7 @@ PrefabInstance: - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} propertyPath: m_ControllerManager.Controllers.Array.data[1].Input.InputAction value: - objectReference: {fileID: 1120369429361536294, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + objectReference: {fileID: 1120369429361536294, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} - target: {fileID: 878341184440332471, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} propertyPath: m_ControllerManager.Controllers.Array.data[1].Input.LegacyInput value: Fire1 @@ -630,13 +630,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1254209701} + serializedVersion: 2 m_LocalRotation: {x: -0.036060482, y: 0.91490656, z: -0.08390658, w: -0.39319885} m_LocalPosition: {x: 4.8683195, y: 2.1499999, z: 14.077745} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1254209705 MonoBehaviour: @@ -917,13 +917,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1967210314} + serializedVersion: 2 m_LocalRotation: {x: -0.036060482, y: 0.91490656, z: -0.08390658, w: -0.39319885} m_LocalPosition: {x: 4.8683195, y: 2.1499999, z: 14.077745} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1570214456050329275 PrefabInstance: @@ -995,3 +995,15 @@ Transform: m_CorrespondingSourceObject: {fileID: 875930279785709979, guid: 1ae780fa68e1a2d4fbf8ccd042067f66, type: 3} m_PrefabInstance: {fileID: 1570214456050329275} m_PrefabAsset: {fileID: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1380885699} + - {fileID: 1317662639} + - {fileID: 1254209704} + - {fileID: 1967210318} + - {fileID: 435228075} + - {fileID: 491555739} + - {fileID: 1570214456050329275} + - {fileID: 598891874} From f07bc68727dc4385127433be7554de7f60dfadd4 Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Fri, 25 Aug 2023 14:51:30 -0400 Subject: [PATCH 20/21] CMCL-0000: Add ThirdPersonWithAimMode sample (#894) * Add ThirdPersonWithAimMode sample * typo --- com.unity.cinemachine/CHANGELOG.md | 1 + ...inemachineDefaultInputActions.inputactions | 31 + .../3D Samples/ThirdPersonWithAimMode.unity | 3373 +++++++++++++++++ ...meta => ThirdPersonWithAimMode.unity.meta} | 0 ...r.unity => ThirdPersonWithRoadieRun.unity} | 22 +- .../ThirdPersonWithRoadieRun.unity.meta | 7 + .../Shared Assets/Scripts/AimCameraRig.cs | 83 + .../Scripts/AimCameraRig.cs.meta | 11 + ...argetAndReticle.cs => AimTargetManager.cs} | 36 +- ...ticle.cs.meta => AimTargetManager.cs.meta} | 0 .../Scripts/SimplePlayerAimController.cs | 44 +- .../Scripts/SimplePlayerController.cs | 3 +- .../Scripts/SimplePlayerShoot.cs | 36 +- 13 files changed, 3624 insertions(+), 23 deletions(-) create mode 100644 com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithAimMode.unity rename com.unity.cinemachine/Samples~/3D Samples/{ThirdPerson Shooter.unity.meta => ThirdPersonWithAimMode.unity.meta} (100%) rename com.unity.cinemachine/Samples~/3D Samples/{ThirdPerson Shooter.unity => ThirdPersonWithRoadieRun.unity} (99%) create mode 100644 com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithRoadieRun.unity.meta create mode 100644 com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimCameraRig.cs create mode 100644 com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimCameraRig.cs.meta rename com.unity.cinemachine/Samples~/Shared Assets/Scripts/{PositionAimTargetAndReticle.cs => AimTargetManager.cs} (56%) rename com.unity.cinemachine/Samples~/Shared Assets/Scripts/{PositionAimTargetAndReticle.cs.meta => AimTargetManager.cs.meta} (100%) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index e7cadd424..931919e9d 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Added API in Deoccluder and ThirdPersonFollow to access which collision objects are impacting the camera position. - Added ICinemachineTargetGroup.IsValid property to detect deleted groups. - Removed CinemachineToolSettings overlay. +- New sample: ThirdPersonWithAimMode showing how to implement a FreeLook camera with Aim mode. ## [3.0.0-pre.7] - 2023-05-04 diff --git a/com.unity.cinemachine/Runtime/Input/CinemachineDefaultInputActions.inputactions b/com.unity.cinemachine/Runtime/Input/CinemachineDefaultInputActions.inputactions index 159b49742..f73c6c0e5 100644 --- a/com.unity.cinemachine/Runtime/Input/CinemachineDefaultInputActions.inputactions +++ b/com.unity.cinemachine/Runtime/Input/CinemachineDefaultInputActions.inputactions @@ -32,6 +32,15 @@ "interactions": "", "initialStateCheck": false }, + { + "name": "Fire2", + "type": "Button", + "id": "caf0a6a7-6ff5-4678-9347-6988204f62b2", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false + }, { "name": "Sprint", "type": "Button", @@ -342,6 +351,28 @@ "action": "Cancel", "isComposite": false, "isPartOfComposite": false + }, + { + "name": "", + "id": "0de2d160-7c26-4efe-b690-36901853abe8", + "path": "/leftTrigger", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Fire2", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "d07d9857-1855-4490-b583-e8bd45a34c9e", + "path": "/rightButton", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Fire2", + "isComposite": false, + "isPartOfComposite": false } ] } diff --git a/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithAimMode.unity b/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithAimMode.unity new file mode 100644 index 000000000..3c99bfe88 --- /dev/null +++ b/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithAimMode.unity @@ -0,0 +1,3373 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &91789085 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 91789086} + m_Layer: 0 + m_Name: Enemies + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &91789086 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 91789085} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1768537930} + - {fileID: 1589685679} + - {fileID: 1972898892} + - {fileID: 896949125} + - {fileID: 1100132518} + - {fileID: 843814276} + - {fileID: 899464901} + - {fileID: 1499453004} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &176892992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 176892995} + - component: {fileID: 176892994} + - component: {fileID: 176892993} + - component: {fileID: 176892996} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &176892993 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 176892992} + m_Enabled: 1 +--- !u!20 &176892994 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 176892992} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 5000 + field of view: 40 + orthographic: 0 + orthographic size: 10 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &176892995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 176892992} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.15, y: 1.7315993, z: -8.34} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &176892996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 176892992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72ece51f2901e7445ab60da3685d6b5f, type: 3} + m_Name: + m_EditorClassIdentifier: + ShowDebugText: 1 + ShowCameraFrustum: 1 + IgnoreTimeScale: 0 + WorldUpOverride: {fileID: 0} + ChannelMask: 1 + UpdateMethod: 2 + BlendUpdateMethod: 1 + LensModeOverride: + Enabled: 0 + DefaultMode: 2 + DefaultBlend: + Style: 1 + Time: 2 + CustomCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + CustomBlends: {fileID: 0} +--- !u!1001 &178274580 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7632911616693521422, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_Name + value: Wall Section (1) + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_RootOrder + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalPosition.z + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalRotation.y + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} +--- !u!114 &334051332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8511452450538986274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 68bb026fafb42b14791938953eaace77, type: 3} + m_Name: + m_EditorClassIdentifier: + NoiseProfile: {fileID: 11400000, guid: 46965f9cbaf525742a6da4c2172a99cd, type: 2} + PivotOffset: {x: 0, y: 0, z: 1} + AmplitudeGain: 1 + FrequencyGain: 1 + mNoiseOffsets: {x: -765.3436, y: 412.4553, z: 513.0689} +--- !u!114 &334051334 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8511452450538986274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + m_Name: + m_EditorClassIdentifier: + Priority: + Enabled: 0 + m_Value: 0 + OutputChannel: 1 + StandbyUpdate: 2 + m_StreamingVersion: 20230301 + m_LegacyPriority: 10 + Target: + TrackingTarget: {fileID: 1525634691} + LookAtTarget: {fileID: 0} + CustomLookAtTarget: 0 + Lens: + FieldOfView: 40 + OrthographicSize: 10 + NearClipPlane: 0.1 + FarClipPlane: 5000 + Dutch: 0 + ModeOverride: 0 + PhysicalProperties: + GateFit: 2 + SensorSize: {x: 21.946, y: 16.002} + LensShift: {x: 0, y: 0} + FocusDistance: 10 + Iso: 200 + ShutterSpeed: 0.005 + Aperture: 16 + BladeCount: 5 + Curvature: {x: 2, y: 11} + BarrelClipping: 0.25 + Anamorphism: 0 + BlendHint: 8 +--- !u!1001 &834799665 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7632911616693521422, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_Name + value: Wall Section + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalPosition.x + value: -9 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7632911616693521423, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8378e2b869340464a8ff1531d24726e8, type: 3} +--- !u!1001 &843814273 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 91789086} + m_Modifications: + - target: {fileID: 534997562, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 534997565, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1445711056, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 1445711058, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.98874176 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000044703487 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.14963222 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_RootOrder + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.x + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.z + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.x + value: -9.05 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.y + value: 1.45 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.z + value: -2.49 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8036313 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: 0.59512746 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 77.772 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Name + value: Boss Enemy Variant (4) + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_TagString + value: Untagged + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + insertIndex: -1 + addedObject: {fileID: 843814275} + m_SourcePrefab: {fileID: 100100000, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} +--- !u!1 &843814274 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 843814273} + m_PrefabAsset: {fileID: 0} +--- !u!136 &843814275 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 843814274} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0.4, z: 0} +--- !u!4 &843814276 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 843814273} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &896949122 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 91789086} + m_Modifications: + - target: {fileID: 534997562, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 534997565, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1445711056, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 1445711058, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.99474764 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.0000000037252903 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.10235861 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_RootOrder + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.x + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.x + value: 2.95 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.z + value: 15.36 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.06072007 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: 0.9981549 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Name + value: Boss Enemy Variant (3) + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_TagString + value: Untagged + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + insertIndex: -1 + addedObject: {fileID: 896949124} + m_SourcePrefab: {fileID: 100100000, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} +--- !u!1 &896949123 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 896949122} + m_PrefabAsset: {fileID: 0} +--- !u!136 &896949124 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 896949123} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0.4, z: 0} +--- !u!4 &896949125 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 896949122} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &899464898 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 91789086} + m_Modifications: + - target: {fileID: 534997562, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 534997565, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1445711056, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 1445711058, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.9981358 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000005401671 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.0610331 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.000000029802322 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_RootOrder + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.x + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.z + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.x + value: -7.66 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.z + value: -11.64 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.95185983 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: 0.3065336 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 41.036 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Name + value: Boss Enemy Variant (7) + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_TagString + value: Untagged + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + insertIndex: -1 + addedObject: {fileID: 899464900} + m_SourcePrefab: {fileID: 100100000, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} +--- !u!1 &899464899 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 899464898} + m_PrefabAsset: {fileID: 0} +--- !u!136 &899464900 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899464899} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0.4, z: 0} +--- !u!4 &899464901 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 899464898} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1100132515 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 91789086} + m_Modifications: + - target: {fileID: 534997562, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 534997565, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1445711056, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 1445711058, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.9823122 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000012665988 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.18725069 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00000005960465 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_RootOrder + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.x + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.z + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.x + value: -9.02 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.z + value: 7.48 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.46946412 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: 0.88295156 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 73.569 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Name + value: Boss Enemy Variant (6) + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_TagString + value: Untagged + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + insertIndex: -1 + addedObject: {fileID: 1100132517} + m_SourcePrefab: {fileID: 100100000, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} +--- !u!1 &1100132516 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1100132515} + m_PrefabAsset: {fileID: 0} +--- !u!136 &1100132517 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100132516} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0.4, z: 0} +--- !u!4 &1100132518 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1100132515} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1207775193 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + m_PrefabInstance: {fileID: 1722462835} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722462836} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: be49d5e8cf7024d6b8f8d5b9872c0f91, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1370871610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1370871613} + - component: {fileID: 1370871612} + - component: {fileID: 1370871611} + m_Layer: 0 + m_Name: CursorLock Manager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1370871611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370871610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 89875cdc57c54474a8a74efd9b2a3b5d, type: 3} + m_Name: + m_EditorClassIdentifier: + ScanRecursively: 1 + SuppressInputWhileBlending: 1 + m_ControllerManager: + Controllers: + - Name: CursorLock + Owner: {fileID: 1370871612} + Enabled: 1 + Input: + InputAction: {fileID: 0} + Gain: 1 + LegacyInput: Cancel + LegacyGain: 1 + InputValue: 0 + Driver: + AccelTime: 0 + DecelTime: 0 + PlayerIndex: -1 + AutoEnableInputs: 1 +--- !u!114 &1370871612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370871610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 84bbe8a9281f49f9801ffc0203bee6df, type: 3} + m_Name: + m_EditorClassIdentifier: + CursorLock: + Value: 0 + Center: 0 + Range: {x: -1, y: 1} + Wrap: 0 + Recentering: + Enabled: 0 + Wait: 0 + Time: 0 + Restrictions: 6 + OnCursorLocked: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1802572053} + m_TargetAssemblyTypeName: UnityEngine.Behaviour, UnityEngine + m_MethodName: set_enabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1722462836} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + OnCursorUnlocked: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1802572053} + m_TargetAssemblyTypeName: UnityEngine.Behaviour, UnityEngine + m_MethodName: set_enabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1722462836} + m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 +--- !u!4 &1370871613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370871610} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1499453001 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 91789086} + m_Modifications: + - target: {fileID: 534997562, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 534997565, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1445711056, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 1445711058, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.99728143 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.00000002235174 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.073687166 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0.000000029802319 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_RootOrder + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.x + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.z + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.x + value: -14.17 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.z + value: 14.67 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.40255508 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: 0.9153958 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 87.974 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Name + value: Boss Enemy Variant (5) + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_TagString + value: Untagged + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + insertIndex: -1 + addedObject: {fileID: 1499453003} + m_SourcePrefab: {fileID: 100100000, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} +--- !u!1 &1499453002 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1499453001} + m_PrefabAsset: {fileID: 0} +--- !u!136 &1499453003 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1499453002} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0.4, z: 0} +--- !u!4 &1499453004 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1499453001} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1516615958 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1516615963} + - component: {fileID: 1516615959} + - component: {fileID: 1516615962} + - component: {fileID: 1516615960} + m_Layer: 0 + m_Name: Free Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1516615959 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1516615958} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + m_Name: + m_EditorClassIdentifier: + Priority: + Enabled: 0 + m_Value: 0 + OutputChannel: 1 + StandbyUpdate: 2 + m_StreamingVersion: 20230301 + m_LegacyPriority: 10 + Target: + TrackingTarget: {fileID: 1525634691} + LookAtTarget: {fileID: 0} + CustomLookAtTarget: 0 + Lens: + FieldOfView: 40 + OrthographicSize: 10 + NearClipPlane: 0.1 + FarClipPlane: 5000 + Dutch: 0 + ModeOverride: 0 + PhysicalProperties: + GateFit: 2 + SensorSize: {x: 21.946, y: 16.002} + LensShift: {x: 0, y: 0} + FocusDistance: 10 + Iso: 200 + ShutterSpeed: 0.005 + Aperture: 16 + BladeCount: 5 + Curvature: {x: 2, y: 11} + BarrelClipping: 0.25 + Anamorphism: 0 + BlendHint: 8 +--- !u!114 &1516615960 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1516615958} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 68bb026fafb42b14791938953eaace77, type: 3} + m_Name: + m_EditorClassIdentifier: + NoiseProfile: {fileID: 11400000, guid: 46965f9cbaf525742a6da4c2172a99cd, type: 2} + PivotOffset: {x: 0, y: 0, z: 1} + AmplitudeGain: 0.5 + FrequencyGain: 0.5 + mNoiseOffsets: {x: -765.3436, y: 412.4553, z: 513.0689} +--- !u!114 &1516615962 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1516615958} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 625c14eee3ad46c99df7c7c891ef668a, type: 3} + m_Name: + m_EditorClassIdentifier: + Damping: {x: 0.1, y: 0.5, z: 0.3} + ShoulderOffset: {x: 0.553536, y: -0.20215046, z: 0} + VerticalArmLength: 1.05 + CameraSide: 0.5 + CameraDistance: 8.96 + AvoidObstacles: + Enabled: 1 + CollisionFilter: + serializedVersion: 2 + m_Bits: 1 + IgnoreTag: Player + CameraRadius: 0.2 + DampingIntoCollision: 0 + DampingFromCollision: 0.5 +--- !u!4 &1516615963 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1516615958} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9.772932, y: -0.6604099, z: -9.050761} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1889537706} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1525634690 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1525634691} + - component: {fileID: 1525634693} + - component: {fileID: 1525634694} + - component: {fileID: 1525634695} + m_Layer: 0 + m_Name: Player Aiming Core + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1525634691 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525634690} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.50499994, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1802572048} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1525634693 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525634690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5232368c753c54e419e00665fe96a8e1, type: 3} + m_Name: + m_EditorClassIdentifier: + PlayerRotation: 2 + RotationDamping: 0.2 + HorizontalLook: + Value: 0 + Center: 0 + Range: {x: -180, y: 180} + Wrap: 1 + Recentering: + Enabled: 0 + Wait: 1 + Time: 2 + Restrictions: 0 + VerticalLook: + Value: 0 + Center: 0 + Range: {x: -70, y: 70} + Wrap: 0 + Recentering: + Enabled: 0 + Wait: 1 + Time: 2 + Restrictions: 0 +--- !u!114 &1525634694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525634690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a98e5e4b17784592b9725e8cfc063, type: 3} + m_Name: + m_EditorClassIdentifier: + BulletPrefab: {fileID: 3056719325741855433, guid: 31d678dfd458ff84d95d644dd3730cca, type: 3} + MaxBulletsPerSec: 6 + PlayerRotationTime: 0.2 + Fire: + Value: 0 + Center: 0 + Range: {x: -1, y: 1} + Wrap: 0 + Recentering: + Enabled: 0 + Wait: 0 + Time: 0 + Restrictions: 6 + AimTargetManager: {fileID: 2058541316} + FireEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1525634695} + m_TargetAssemblyTypeName: Cinemachine.CinemachineImpulseSource, com.unity.cinemachine + m_MethodName: GenerateImpulse + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1525634695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1525634690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 180ecf9b41d478f468eb3e9083753217, type: 3} + m_Name: + m_EditorClassIdentifier: + ImpulseDefinition: + ImpulseChannel: 1 + ImpulseShape: 1 + CustomImpulseShape: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ImpulseDuration: 0.2 + ImpulseType: 0 + DissipationRate: 0.25 + RawSignal: {fileID: 0} + AmplitudeGain: 1 + FrequencyGain: 1 + RepeatMode: 0 + Randomize: 1 + TimeEnvelope: + AttackShape: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + DecayShape: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AttackTime: 0 + SustainTime: 0.2 + DecayTime: 0.7 + ScaleWithImpact: 1 + HoldForever: 0 + ImpactRadius: 100 + DirectionMode: 0 + DissipationMode: 2 + DissipationDistance: 100 + PropagationSpeed: 343 + DefaultVelocity: {x: 0, y: 0, z: -1} +--- !u!1001 &1589685676 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 91789086} + m_Modifications: + - target: {fileID: 534997562, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 534997565, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1445711056, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 1445711058, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.9898593 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: 0.000000014901161 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.14205165 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_RootOrder + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.x + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.z + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.x + value: -3.1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.y + value: 1.45 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.z + value: 11.06 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.19209938 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: 0.98137546 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Name + value: Boss Enemy Variant (1) + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_TagString + value: Untagged + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + insertIndex: -1 + addedObject: {fileID: 1589685678} + m_SourcePrefab: {fileID: 100100000, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} +--- !u!1 &1589685677 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1589685676} + m_PrefabAsset: {fileID: 0} +--- !u!136 &1589685678 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589685677} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0.4, z: 0} +--- !u!4 &1589685679 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1589685676} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1722462835 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2451271811042757136, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: HelpText + value: 'This scene shows a third person shooter game. Use WASD to move, Spacebar + to jump, Shift to sprint. Mouse left click to fire projectiles. The mouse + rotates the Player Aiming Core object, which controls the player direction + and aim. The camera is dirven by that - for this style of controller, there + is no direct independent control of the camera direction. + + + + The + camera is managed by a custom AimCameraRig camera manager, which activates + the Aim camera when the right mouse button is down. It also changes the + player rotation mode when aiming. + + + + The crosshair indicates + where the player is aiming. The red dot indicates the actual hit location + if a ray would be fired from the Player Aiming Core. When the crosshair + and the red dot do not align, this means there is an object between the player + and the aim point indicated by the crosshair. The crosshair is pulled apart + to indicate this. + + + + The cursor will be locked upon closing + the help window. To unlock, press the Escape key.' + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: VisibleAtStart + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[1].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[2].m_Mode + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1370871612} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[1].m_Target + value: + objectReference: {fileID: 1370871610} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[2].m_Target + value: + objectReference: {fileID: 1207775193} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[1].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[2].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: LockCursor + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[1].m_MethodName + value: LockCursor + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[2].m_MethodName + value: set_enabled + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: Unity.Cinemachine.Samples.CursorLockManager, Assembly-CSharp + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[1].m_TargetAssemblyTypeName + value: Unity.Cinemachine.Samples.CursorLockManager, Assembly-CSharp + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[2].m_TargetAssemblyTypeName + value: UnityEngine.Behaviour, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_BoolArgument + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[1].m_Arguments.m_BoolArgument + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[2].m_Arguments.m_BoolArgument + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[1].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6668015293666917239, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: OnHelpDismissed.m_PersistentCalls.m_Calls.Array.data[2].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + propertyPath: m_Name + value: HelpUI + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + insertIndex: -1 + addedObject: {fileID: 1722462837} + m_SourcePrefab: {fileID: 100100000, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} +--- !u!1 &1722462836 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 9138370430051789472, guid: d7425ed2047e64d8ea6ff79f20bd46f6, type: 3} + m_PrefabInstance: {fileID: 1722462835} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1722462837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722462836} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7950c6f52d74a4772bb69c03fe19a19b, type: 3} + m_Name: + m_EditorClassIdentifier: + Buttons: + - Name: Resume Game + IsToggle: + Enabled: 0 + Value: 0 + OnValueChanged: + m_PersistentCalls: + m_Calls: [] + OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1370871612} + m_TargetAssemblyTypeName: Unity.Cinemachine.Samples.CursorLockManager, + Assembly-CSharp + m_MethodName: LockCursor + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 +--- !u!1001 &1768537927 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 91789086} + m_Modifications: + - target: {fileID: 534997562, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 534997565, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1445711056, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 1445711058, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.97614825 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.2171049 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0.000000029802319 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_RootOrder + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.x + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.z + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.x + value: 0.18475437 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.z + value: 10.945825 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: 0.046587124 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: 0.99891424 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Name + value: Boss Enemy Variant + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_TagString + value: Untagged + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + insertIndex: -1 + addedObject: {fileID: 1768537929} + m_SourcePrefab: {fileID: 100100000, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} +--- !u!1 &1768537928 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1768537927} + m_PrefabAsset: {fileID: 0} +--- !u!136 &1768537929 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768537928} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0.4, z: 0} +--- !u!4 &1768537930 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1768537927} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &1802572047 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3521509573382385251, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_Name + value: Player + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalPosition.x + value: 1.15 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalPosition.z + value: 0.62 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.size + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[0].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[1].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[2].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[3].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Name + value: Horizontal Look + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Gain + value: -4 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Name + value: Vertical Look + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Name + value: Fire + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Owner + value: + objectReference: {fileID: 1525634693} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Owner + value: + objectReference: {fileID: 1525634693} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Owner + value: + objectReference: {fileID: 1525634694} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].LegacyGain + value: -200 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[3].InputAction + value: + objectReference: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[3].LegacyInput + value: Fire3 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].InputAction + value: + objectReference: {fileID: -5630151704836100654, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].LegacyInput + value: Mouse X + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].InputAction + value: + objectReference: {fileID: -5630151704836100654, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].LegacyInput + value: Mouse Y + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].InputAction + value: + objectReference: {fileID: 1120369429361536294, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].LegacyInput + value: Fire1 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[2].Recentering.Time + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[3].Recentering.Time + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[3].Recentering.Wait + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Recentering.Time + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Recentering.Wait + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Recentering.Time + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Recentering.Wait + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[2].Control.AccelTime + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[2].Control.DecelTime + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Control.AccelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Control.DecelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Control.AccelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Control.DecelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[3].Recentering.Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4417643423713582276, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Recentering.Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.size + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Name + value: Horizontal Look + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Name + value: Vertical Look + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Name + value: Fire + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Owner + value: + objectReference: {fileID: 1525634693} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Owner + value: + objectReference: {fileID: 1525634693} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Owner + value: + objectReference: {fileID: 1525634694} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Input.Gain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Input.Gain + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Input.Gain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Driver.AccelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Driver.DecelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Input.LegacyGain + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Driver.AccelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Driver.DecelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Input.LegacyGain + value: -100 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Input.LegacyGain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.size + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Input.InputAction + value: + objectReference: {fileID: -5630151704836100654, guid: cb572737576f6df4182085d6bbea2294, type: 3} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[4].Input.LegacyInput + value: Mouse X + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Input.InputAction + value: + objectReference: {fileID: -5630151704836100654, guid: cb572737576f6df4182085d6bbea2294, type: 3} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[5].Input.LegacyInput + value: Mouse Y + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Input.InputAction + value: + objectReference: {fileID: 1120369429361536294, guid: cb572737576f6df4182085d6bbea2294, type: 3} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Controllers.Array.data[6].Input.LegacyInput + value: Fire1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[0].Name + value: Move X + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[1].Name + value: Move Z + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[2].Name + value: Jump + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[3].Name + value: Sprint + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[4].Name + value: Horizontal Look + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[5].Name + value: Vertical Look + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[6].Name + value: Fire + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[0].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[1].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[2].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[3].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[4].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[5].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[6].Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[0].Input.Gain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[1].Input.Gain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[2].Input.Gain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[3].Input.Gain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[4].Input.Gain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[5].Input.Gain + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[6].Input.Gain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[0].Input.LegacyGain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[1].Input.LegacyGain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[2].Input.LegacyGain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[3].Input.LegacyGain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[4].Driver.AccelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[4].Driver.DecelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[4].Input.LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[5].Driver.AccelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[5].Driver.DecelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[5].Input.LegacyGain + value: -200 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[6].Input.LegacyGain + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[0].Input.LegacyInput + value: Horizontal + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[1].Input.LegacyInput + value: Vertical + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[2].Input.LegacyInput + value: Jump + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[3].Input.LegacyInput + value: Fire3 + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[4].Input.LegacyInput + value: Mouse X + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[5].Input.LegacyInput + value: Mouse Y + objectReference: {fileID: 0} + - target: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: m_ControllerManager.Controllers.Array.data[6].Input.LegacyInput + value: Fire1 + objectReference: {fileID: 0} + - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: Strafe + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8077383552022060413, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + propertyPath: SprintSpeed + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.size + value: 7 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].Gain + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].Name + value: Horizontal Look + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].Gain + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].Name + value: Vertical Look + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[6].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[6].Name + value: Fire + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[7].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[7].Name + value: Move Z + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[8].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[8].Name + value: Jump + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[9].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[9].Name + value: Sprint + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[10].Gain + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[10].Name + value: Fire + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].Owner + value: + objectReference: {fileID: 1525634693} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].Owner + value: + objectReference: {fileID: 1525634693} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[6].Owner + value: + objectReference: {fileID: 1525634694} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[7].Owner + value: + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[8].Owner + value: + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[9].Owner + value: + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[10].Owner + value: + objectReference: {fileID: 1525634694} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].LegacyGain + value: -200 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[6].LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[7].LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[8].LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[9].LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[10].LegacyGain + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[3].InputAction + value: + objectReference: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[3].LegacyInput + value: Fire3 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].InputAction + value: + objectReference: {fileID: -5630151704836100654, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].LegacyInput + value: Mouse X + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].InputAction + value: + objectReference: {fileID: -5630151704836100654, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].LegacyInput + value: Mouse Y + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[6].InputAction + value: + objectReference: {fileID: 1120369429361536294, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[6].LegacyInput + value: Fire1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[7].InputAction + value: + objectReference: {fileID: -1680190386980627800, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[7].LegacyInput + value: Vertical + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[8].InputAction + value: + objectReference: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[8].LegacyInput + value: Jump + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[10].InputAction + value: + objectReference: {fileID: 1120369429361536294, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[10].LegacyInput + value: Fire + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].Recentering.Time + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].Recentering.Wait + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].Recentering.Time + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].Recentering.Wait + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].Control.AccelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[4].Control.DecelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].Control.AccelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[5].Control.DecelTime + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[6].Recentering.Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[7].Recentering.Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[8].Recentering.Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[9].Recentering.Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935428, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Controllers.Array.data[10].Recentering.Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935429, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: Strafe + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5995860984952935429, guid: 7f3bfd07f0528a94d8f6e1d503f7bb61, type: 3} + propertyPath: LockCursor + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: + - targetCorrespondingSourceObject: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + insertIndex: -1 + addedObject: {fileID: 1525634691} + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} +--- !u!4 &1802572048 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4293402553517372633, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + m_PrefabInstance: {fileID: 1802572047} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1802572053 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 7804758404662293724, guid: 4d8d7a9a98d3f4ac2967d48094ea010f, type: 3} + m_PrefabInstance: {fileID: 1802572047} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 89875cdc57c54474a8a74efd9b2a3b5d, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1810972772 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916665, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4436525663902916670, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} + propertyPath: m_Name + value: Checkerboard Stage + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c97e1248c10cd3549b3d18c1eb1c3722, type: 3} +--- !u!1 &1889537704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1889537706} + - component: {fileID: 1889537705} + - component: {fileID: 1889537707} + m_Layer: 0 + m_Name: Camera Rig + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1889537705 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1889537704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c8861e25f312f0a4ea14b26b40531fa4, type: 3} + m_Name: + m_EditorClassIdentifier: + Priority: + Enabled: 0 + m_Value: 0 + OutputChannel: 1 + StandbyUpdate: 2 + m_StreamingVersion: 0 + m_LegacyPriority: 10 + DefaultTarget: + Enabled: 0 + Target: + TrackingTarget: {fileID: 0} + LookAtTarget: {fileID: 0} + CustomLookAtTarget: 0 + DefaultBlend: + Style: 4 + Time: 0.2 + CustomCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + CustomBlends: {fileID: 0} + AimMode: + Value: 0 + Center: 0 + Range: {x: -1, y: 1} + Wrap: 0 + Recentering: + Enabled: 0 + Wait: 0 + Time: 0 + Restrictions: 6 +--- !u!4 &1889537706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1889537704} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -8.622932, y: 2.3920093, z: 0.710761} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1516615963} + - {fileID: 8511452450538986272} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1889537707 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1889537704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 89875cdc57c54474a8a74efd9b2a3b5d, type: 3} + m_Name: + m_EditorClassIdentifier: + ScanRecursively: 1 + SuppressInputWhileBlending: 1 + m_ControllerManager: + Controllers: + - Name: Aim + Owner: {fileID: 1889537705} + Enabled: 1 + Input: + InputAction: {fileID: 5938265918650678409, guid: 1d6e640e716dc4ff6989b73d02023f2b, type: 3} + Gain: 1 + LegacyInput: Fire2 + LegacyGain: 1 + InputValue: 0 + Driver: + AccelTime: 0 + DecelTime: 0 + PlayerIndex: -1 + AutoEnableInputs: 1 +--- !u!1001 &1972898889 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 91789086} + m_Modifications: + - target: {fileID: 534997562, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 534997565, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1445711056, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 1445711058, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: Target + value: + objectReference: {fileID: 1802572048} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.99778986 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0.00000028684732 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: -0.066447966 + objectReference: {fileID: 0} + - target: {fileID: 358930478127896550, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0.000000029802319 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_RootOrder + value: -1 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.x + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.y + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalScale.z + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.x + value: 10.49 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalPosition.z + value: 10.85 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.w + value: -0.36159304 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.y + value: 0.93233603 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_Name + value: Boss Enemy Variant (2) + objectReference: {fileID: 0} + - target: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + propertyPath: m_TagString + value: Untagged + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + insertIndex: -1 + addedObject: {fileID: 1972898891} + m_SourcePrefab: {fileID: 100100000, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} +--- !u!1 &1972898890 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 358930478696116478, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1972898889} + m_PrefabAsset: {fileID: 0} +--- !u!136 &1972898891 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972898890} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.2 + m_Height: 1 + m_Direction: 1 + m_Center: {x: 0, y: 0.4, z: 0} +--- !u!4 &1972898892 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} + m_PrefabInstance: {fileID: 1972898889} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2058541316 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3691321986282369810, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + m_PrefabInstance: {fileID: 3691321984223930902} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 512059070b04a4ca6b07b64f00733c27, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &3691321984223930902 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3691321985918014318, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_Name + value: Aim Target Manager + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3691321985918014319, guid: 0f86c2826e1739146a853e769a639a57, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0f86c2826e1739146a853e769a639a57, type: 3} +--- !u!4 &8511452450538986272 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8511452450538986274} + serializedVersion: 2 + m_LocalRotation: {x: -0.000000004474823, y: -0.0000000134244695, z: -6.0072126e-17, w: 1} + m_LocalPosition: {x: 10.326468, y: -1.4104099, z: -3.5307612} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1889537706} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8511452450538986274 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8511452450538986272} + - component: {fileID: 334051334} + - component: {fileID: 8511452450538986279} + - component: {fileID: 8511452450538986278} + - component: {fileID: 334051332} + m_Layer: 0 + m_Name: Aim Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &8511452450538986278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8511452450538986274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2588cc5dedbb75e49a44aada63f7b939, type: 3} + m_Name: + m_EditorClassIdentifier: + AimCollisionFilter: + serializedVersion: 2 + m_Bits: 1 + IgnoreTag: Player + AimDistance: 200 + NoiseCancellation: 1 +--- !u!114 &8511452450538986279 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8511452450538986274} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 625c14eee3ad46c99df7c7c891ef668a, type: 3} + m_Name: + m_EditorClassIdentifier: + Damping: {x: 0.1, y: 0.5, z: 0.3} + ShoulderOffset: {x: 0.553536, y: -0.20215046, z: 0} + VerticalArmLength: 0.3 + CameraSide: 1 + CameraDistance: 3.44 + AvoidObstacles: + Enabled: 1 + CollisionFilter: + serializedVersion: 2 + m_Bits: 1 + IgnoreTag: Player + CameraRadius: 0.2 + DampingIntoCollision: 0 + DampingFromCollision: 0.5 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1810972772} + - {fileID: 1722462835} + - {fileID: 1370871613} + - {fileID: 176892995} + - {fileID: 3691321984223930902} + - {fileID: 1802572047} + - {fileID: 834799665} + - {fileID: 178274580} + - {fileID: 91789086} + - {fileID: 1889537706} diff --git a/com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity.meta b/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithAimMode.unity.meta similarity index 100% rename from com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity.meta rename to com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithAimMode.unity.meta diff --git a/com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity b/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithRoadieRun.unity similarity index 99% rename from com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity rename to com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithRoadieRun.unity index 69741726b..729f970ca 100644 --- a/com.unity.cinemachine/Samples~/3D Samples/ThirdPerson Shooter.unity +++ b/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithRoadieRun.unity @@ -362,8 +362,8 @@ MonoBehaviour: m_EditorClassIdentifier: NoiseProfile: {fileID: 11400000, guid: 46965f9cbaf525742a6da4c2172a99cd, type: 2} PivotOffset: {x: 0, y: 0, z: 1} - AmplitudeGain: 1 - FrequencyGain: 1 + AmplitudeGain: 0.5 + FrequencyGain: 0.5 mNoiseOffsets: {x: -765.3436, y: 412.4553, z: 513.0689} --- !u!114 &334051334 MonoBehaviour: @@ -1098,12 +1098,16 @@ MonoBehaviour: Owner: {fileID: 1370871612} Enabled: 1 Input: + InputAction: {fileID: 0} + Gain: 1 LegacyInput: Cancel LegacyGain: 1 InputValue: 0 Driver: AccelTime: 0 DecelTime: 0 + PlayerIndex: -1 + AutoEnableInputs: 1 --- !u!114 &1370871612 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1433,7 +1437,7 @@ MonoBehaviour: Wait: 0 Time: 0 Restrictions: 6 - AimTarget: {fileID: 2058541315} + AimTargetManager: {fileID: 2058541316} FireEvent: m_PersistentCalls: m_Calls: @@ -2995,11 +2999,17 @@ Transform: m_CorrespondingSourceObject: {fileID: 358930478696116476, guid: a93965bc906a245c49b8905bf8b48fec, type: 3} m_PrefabInstance: {fileID: 1972898889} m_PrefabAsset: {fileID: 0} ---- !u!4 &2058541315 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 3691321986282369813, guid: 0f86c2826e1739146a853e769a639a57, type: 3} +--- !u!114 &2058541316 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 3691321986282369810, guid: 0f86c2826e1739146a853e769a639a57, type: 3} m_PrefabInstance: {fileID: 3691321984223930902} m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 512059070b04a4ca6b07b64f00733c27, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &2076565716644322336 GameObject: m_ObjectHideFlags: 0 diff --git a/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithRoadieRun.unity.meta b/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithRoadieRun.unity.meta new file mode 100644 index 000000000..d97912947 --- /dev/null +++ b/com.unity.cinemachine/Samples~/3D Samples/ThirdPersonWithRoadieRun.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5c0817c13dcee9a489ef55dc4912493c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimCameraRig.cs b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimCameraRig.cs new file mode 100644 index 000000000..33490cfde --- /dev/null +++ b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimCameraRig.cs @@ -0,0 +1,83 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace Unity.Cinemachine.Samples +{ + /// + /// This is a custom camera manager that selects between an aiming camera child and a + /// non-aiming camera child, depending on the value of some user input. + /// + /// The Aiming child is expected to have ThirdPersonFollow and ThirdPersonAim components, + /// and to have a player as its Follow target. The player is expected to have a + /// SimplePlayerAimController behaviour on one of its children, to decouple aiminag and + /// player rotation. + /// + [ExecuteAlways] + public class AimCameraRig : CinemachineCameraManagerBase, IInputAxisOwner + { + public InputAxis AimMode = InputAxis.DefaultMomentary; + + SimplePlayerAimController AimController; + CinemachineVirtualCameraBase AimCamera; + CinemachineVirtualCameraBase FreeCamera; + + bool IsAiming => AimMode.Value > 0.5f; + + /// Report the available input axes to the input axis controller. + /// We use the Input Axis Controller because it works with both the Input package + /// and the Legacy input system. This is sample code and we + /// want it to work everywhere. + void IInputAxisOwner.GetInputAxes(List axes) + { + axes.Add(new () { DrivenAxis = () => ref AimMode, Name = "Aim" }); + } + + protected override void Start() + { + base.Start(); + + // Find the player and the aiming camera. + // We expect to have one camera with a CinemachineThirdPersonAim component + // whose Follow target is a player with a SimplePlayerAimController child. + for (int i = 0; i < ChildCameras.Count; ++i) + { + var cam = ChildCameras[i]; + if (!cam.isActiveAndEnabled) + continue; + if (AimCamera == null + && cam.TryGetComponent(out var aim) + && aim.NoiseCancellation) + { + AimCamera = cam; + var player = AimCamera.Follow; + if (player != null) + AimController = player.GetComponentInChildren(); + } + else if (FreeCamera == null) + FreeCamera = cam; + } + if (AimCamera == null) + Debug.LogError("AimCameraRig: no valid CinemachineThirdPersonAim camera found among children"); + if (AimController == null) + Debug.LogError("AimCameraRig: no valid SimplePlayerAimController target found"); + if (FreeCamera == null) + Debug.LogError("AimCameraRig: no valid non-aiming camera found among children"); + } + + protected override CinemachineVirtualCameraBase ChooseCurrentCamera(Vector3 worldUp, float deltaTime) + { + var oldCam = (CinemachineVirtualCameraBase)LiveChild; + var newCam = IsAiming ? AimCamera : FreeCamera; + if (AimController != null && oldCam != newCam) + { + // Set the mode of the player aim controller. + // We want the player rotation to be copuled to the camera when aiming, otherwise not. + AimController.PlayerRotation = IsAiming + ? SimplePlayerAimController.CouplingMode.Coupled + : SimplePlayerAimController.CouplingMode.Decoupled; + AimController.RecenterPlayer(); + } + return newCam; + } + } +} diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimCameraRig.cs.meta b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimCameraRig.cs.meta new file mode 100644 index 000000000..0d885bb98 --- /dev/null +++ b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimCameraRig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8861e25f312f0a4ea14b26b40531fa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/PositionAimTargetAndReticle.cs b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimTargetManager.cs similarity index 56% rename from com.unity.cinemachine/Samples~/Shared Assets/Scripts/PositionAimTargetAndReticle.cs rename to com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimTargetManager.cs index 71ba3b9d8..d267154f4 100644 --- a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/PositionAimTargetAndReticle.cs +++ b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimTargetManager.cs @@ -2,7 +2,11 @@ namespace Unity.Cinemachine.Samples { - public class PositionAimTargetAndReticle : MonoBehaviour + /// + /// When there is an active ThirdPersonFollow camera with noise cancellation, + /// the position of this object is the aim target for the ThirdPersonAim camera. + /// + public class AimTargetManager : MonoBehaviour { [Tooltip("This canvas will be enabled when there is a 3rdPersoAim camera active")] public Canvas ReticleCanvas; @@ -10,6 +14,8 @@ public class PositionAimTargetAndReticle : MonoBehaviour [Tooltip("If non-null, this target will pe positioned on the screen over the actual aim target")] public RectTransform AimTargetIndicator; + bool m_HaveAimTarget; + // We add a CameraUpdatedEvent listener so that we are guaranteed to update after the // Brain has positioned the camera void OnEnable() @@ -22,9 +28,13 @@ void OnDisable() CinemachineCore.CameraUpdatedEvent.RemoveListener(SetAimTarget); } + // This is called after the Brain has positioned the camera. If the camera has a + // ThirdPersonAim component with noise cancellation, then we set the aim target + // position to be precisely what the camera is indicating onscreen. + // Otherwise, we disable the reticle and aim target indicator. void SetAimTarget(CinemachineBrain brain) { - var enableReticle = false; + m_HaveAimTarget = false; if (brain == null || brain.OutputCamera == null) CinemachineCore.CameraUpdatedEvent.RemoveListener(SetAimTarget); else @@ -40,7 +50,7 @@ void SetAimTarget(CinemachineBrain brain) if (liveCam.TryGetComponent(out var aim) && aim.enabled) { // Set the worldspace aim target position so that we can know what gets hit - enableReticle = aim.NoiseCancellation; + m_HaveAimTarget = aim.NoiseCancellation; transform.position = aim.AimTarget; // Set the screen-space hit target indicator position @@ -50,7 +60,25 @@ void SetAimTarget(CinemachineBrain brain) } } if (ReticleCanvas != null) - ReticleCanvas.enabled = enableReticle; + ReticleCanvas.enabled = m_HaveAimTarget; + } + + /// + /// Called by the player's shooting object to get the aim direction override, in case + /// there is an active ThirdPersonFollow camera with noise cancellation. + /// + /// Where the firing will come from. + /// The intended firing direction. + /// The direction in which to fire + public Vector3 GetAimDirection(Vector3 firingOrigin, Vector3 firingDirection) + { + if (m_HaveAimTarget) + { + var dir = transform.position - firingOrigin; + if (dir.sqrMagnitude > 0.01f) + return dir; + } + return firingDirection; } } } diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/PositionAimTargetAndReticle.cs.meta b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimTargetManager.cs.meta similarity index 100% rename from com.unity.cinemachine/Samples~/Shared Assets/Scripts/PositionAimTargetAndReticle.cs.meta rename to com.unity.cinemachine/Samples~/Shared Assets/Scripts/AimTargetManager.cs.meta diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs index 5287702b5..b1d9d317c 100644 --- a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs +++ b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerAimController.cs @@ -5,8 +5,21 @@ namespace Unity.Cinemachine.Samples { /// /// Add-on for SimplePlayerController that controls the player's Aiming Core. - /// This component expects to be in a child object of the player, to decouple player aiming from player rotation. + /// + /// This component expects to be in a child object of a player that has a SimplePlayerController + /// behaviour, to decouple camera and player aiming from player rotation. + /// /// This only works in worlds where CharacterController is valid, ie when up is world up. + /// + /// This component can operate in any of 3 modes: + /// - Coupled: the player's rotation is coupled to the camera's rotation. + /// The player rotates with the camera. Sideways movement will result in strafing + /// - CoupledWhenMoving: the player's rotation is coupled to the camera's rotation, + /// but only when the player is moving. Camera can rotate freely around the player when + /// the player is stationary, but the player will rotate to face camera forward when it starts moving. + /// - Decoupled: the player's rotation is independent of the camera's rotation. + /// + /// The mode can be changed dynamically /// public class SimplePlayerAimController : MonoBehaviour, IInputAxisOwner { @@ -21,7 +34,6 @@ public enum CouplingMode { Coupled, CoupledWhenMoving, Decoupled } [Tooltip("Vertical Rotation.")] public InputAxis VerticalLook = new () { Range = new Vector2(-70, 70), Recentering = InputAxis.RecenteringSettings.Default }; - SimplePlayerController m_Controller; Quaternion m_DesiredWorldRotation; @@ -50,7 +62,6 @@ void OnEnable() Debug.LogError("SimplePlayerController not found on parent object"); else { - m_Controller.Strafe = true; m_Controller.PreUpdate -= UpdatePlayerRotation; m_Controller.PreUpdate += UpdatePlayerRotation; m_Controller.PostUpdate -= PostUpdate; @@ -89,6 +100,22 @@ public void RecenterPlayer(float damping = 0) transform.rotation = Quaternion.Euler(rot); } + /// + /// Set my rotation to look in this direction, without changing player rotation. + /// Here we only set the axis values, we let the player controller do the actual rotation. + /// + /// Direction to look in, in worldspace + public void SetLookDirection(Vector3 worldspaceDirection) + { + if (m_Controller == null) + return; + var rot = (Quaternion.Inverse(m_Controller.transform.rotation) + * Quaternion.LookRotation(worldspaceDirection, Vector3.up)).eulerAngles; + HorizontalLook.Value = HorizontalLook.ClampValue(rot.y); + VerticalLook.Value = VerticalLook.ClampValue(rot.x > 180 ? rot.x - 360 : rot.x); + } + + // This is called by the player controller before it updates its own rotation. void UpdatePlayerRotation() { transform.localRotation = Quaternion.Euler(VerticalLook.Value, HorizontalLook.Value, 0); @@ -97,6 +124,7 @@ void UpdatePlayerRotation() { case CouplingMode.Coupled: { + m_Controller.Strafe = true; var yaw = transform.rotation.eulerAngles.y; var parentRot = m_Controller.transform.rotation.eulerAngles; HorizontalLook.Value = 0; @@ -107,17 +135,23 @@ void UpdatePlayerRotation() { // If the player is moving, rotate its yaw to match the camera direction, // otherwise let the camera orbit + m_Controller.Strafe = true; if (m_Controller.IsMoving) RecenterPlayer(RotationDamping); break; } - case CouplingMode.Decoupled: break; + case CouplingMode.Decoupled: + { + m_Controller.Strafe = false; + break; + } } var gotInput = VerticalLook.TrackValueChange() | HorizontalLook.TrackValueChange(); VerticalLook.UpdateRecentering(Time.deltaTime, gotInput); HorizontalLook.UpdateRecentering(Time.deltaTime, gotInput); } + // Callback for player controller to update our rotation after it has updated its own. void PostUpdate(Vector3 vel, float speed) { if (PlayerRotation == CouplingMode.Decoupled) @@ -135,4 +169,4 @@ void PostUpdate(Vector3 vel, float speed) } } } -} \ No newline at end of file +} diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerController.cs b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerController.cs index 525ea564b..3b64cac8b 100644 --- a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerController.cs +++ b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerController.cs @@ -70,6 +70,7 @@ public enum UpModes { Player, World }; public bool IsSprinting => m_IsSprinting; public bool IsJumping => m_IsJumping; public bool IsMoving => m_LastInput.sqrMagnitude > 0.01f; + public Camera Camera => CameraOverride == null ? Camera.main : CameraOverride; void Start() => TryGetComponent(out m_Controller); @@ -143,7 +144,7 @@ bool GetInputFrame(out Quaternion inputFrame) var up = UpDirection; var fwd = InputForward switch { - ForwardModes.Camera => CameraOverride == null? Camera.main.transform.forward : CameraOverride.transform.forward, + ForwardModes.Camera => Camera.transform.forward, ForwardModes.Player => transform.forward, _ => Vector3.forward, }; diff --git a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerShoot.cs b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerShoot.cs index 8d62f4666..ee3cd136b 100644 --- a/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerShoot.cs +++ b/com.unity.cinemachine/Samples~/Shared Assets/Scripts/SimplePlayerShoot.cs @@ -4,6 +4,15 @@ namespace Unity.Cinemachine.Samples { + /// + /// This object manages player shooting. It is expected to be on the player object, + /// or on a child SimplePlayerAimController object of the player. + /// + /// If an AimTargetManager is specified, then the player will aim at that target. + /// Otherwise, the player will aim in the forward direction of the player object, + /// or of the SimplePlayerAimController object if it exists and is not decoupled + /// from the player rotation + /// class SimplePlayerShoot : MonoBehaviour, IInputAxisOwner { public GameObject BulletPrefab; @@ -13,12 +22,13 @@ class SimplePlayerShoot : MonoBehaviour, IInputAxisOwner public InputAxis Fire = InputAxis.DefaultMomentary; [Tooltip("Target to Aim towards. If null, the aim is defined by the forward vector of this gameObject.")] - public Transform AimTarget; + public AimTargetManager AimTargetManager; [Tooltip("Event that's triggered when firing.")] public UnityEvent FireEvent; float m_LastFireTime; + SimplePlayerAimController AimController; // We pool the bullets for improved performance readonly List m_BulletPool = new (); @@ -38,6 +48,11 @@ void OnValidate() PlayerRotationTime = Mathf.Max(0, PlayerRotationTime); } + void Start() + { + TryGetComponent(out AimController); + } + void Update() { var now = Time.time; @@ -45,17 +60,24 @@ void Update() && now - m_LastFireTime > 1 / MaxBulletsPerSec && Fire.Value > 0.1f; - // Face the firing direction - if ((fireNow || now - m_LastFireTime <= PlayerRotationTime) && TryGetComponent(out var aim)) - aim.RecenterPlayer(PlayerRotationTime); + // Get the firing direction. Special case: if there is a decoupled AimController, + // firing direction is character forward, not AimController forward. + var fwd = transform.forward; + bool decoupled = AimController != null + && AimController.PlayerRotation == SimplePlayerAimController.CouplingMode.Decoupled; + if (decoupled) + fwd = transform.parent.forward; + + // Face the firing direction if appropriate + if ((fireNow || now - m_LastFireTime <= PlayerRotationTime) && AimController != null && !decoupled) + AimController.RecenterPlayer(PlayerRotationTime); if (fireNow) { m_LastFireTime = now; - var fwd = transform.forward; - if (AimTarget is not null) - fwd = (AimTarget.position - transform.position).normalized; + if (AimTargetManager != null) + fwd = AimTargetManager.GetAimDirection(transform.position, fwd).normalized; GameObject bullet = null; for (var i = 0; bullet == null && i < m_BulletPool.Count; ++i) // Look in the pool if one is available From 197c41cefafb2e7f951333c073a9692ec8b5f922 Mon Sep 17 00:00:00 2001 From: Gregory Labute Date: Tue, 5 Sep 2023 14:11:38 -0400 Subject: [PATCH 21/21] fix NaNs in CMCollider if no target (#897) --- com.unity.cinemachine/CHANGELOG.md | 1 + .../Runtime/Behaviours/CinemachineDeoccluder.cs | 4 ++-- .../Runtime/Deprecated/CinemachineCollider.cs | 9 +++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/com.unity.cinemachine/CHANGELOG.md b/com.unity.cinemachine/CHANGELOG.md index 931919e9d..30a4ef0ad 100644 --- a/com.unity.cinemachine/CHANGELOG.md +++ b/com.unity.cinemachine/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Bugfix: GroupFraming inspector was displaying incorrect warning when LookAt target is a group. - Bugfix: GroupFraming displays more accurate group size indicator in the game view. - Bugfix: nullrefs in log when target group was deleted but was still being referenced by vcams. +- Regression fix: CinemachineCollider generated NaN positions if no target was set. - Added Recentering Target to OrbitalFollow. Recentering is now possible with Lazy Follow. - Improved OrbitalFollow's ForceCameraPosition algorithm. - Deoccluder accommodates camera radius in all modes. diff --git a/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs b/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs index c39df8337..2f0ece047 100644 --- a/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs +++ b/com.unity.cinemachine/Runtime/Behaviours/CinemachineDeoccluder.cs @@ -424,9 +424,9 @@ protected override void PostPipelineStageCallback( cameraPos = state.GetCorrectedPosition(); // Adjust the damping bypass to account for the displacement - if (vcam.PreviousStateIsValid) + if (vcam.PreviousStateIsValid && state.HasLookAt()) { - var dir0 = extra.PreviousCameraPosition - referenceLookAt; + var dir0 = extra.PreviousCameraPosition - state.ReferenceLookAt; var dir1 = cameraPos - state.ReferenceLookAt; if (dir0.sqrMagnitude > Epsilon && dir1.sqrMagnitude > Epsilon) state.RotationDampingBypass = UnityVectorExtensions.SafeFromToRotation( diff --git a/com.unity.cinemachine/Runtime/Deprecated/CinemachineCollider.cs b/com.unity.cinemachine/Runtime/Deprecated/CinemachineCollider.cs index 00713c259..69fa1cce9 100644 --- a/com.unity.cinemachine/Runtime/Deprecated/CinemachineCollider.cs +++ b/com.unity.cinemachine/Runtime/Deprecated/CinemachineCollider.cs @@ -299,7 +299,7 @@ protected override void PostPipelineStageCallback( // Apply distance smoothing - this can artificially hold the camera closer // to the target for a while, to reduce popping in and out on bumpy objects - if (m_SmoothingTime > Epsilon) + if (m_SmoothingTime > Epsilon && state.HasLookAt()) { Vector3 pos = initialCamPos + displacement; Vector3 dir = pos - state.ReferenceLookAt; @@ -319,7 +319,8 @@ protected override void PostPipelineStageCallback( // Apply additional correction due to camera radius var cameraPos = initialCamPos + displacement; - displacement += RespectCameraRadius(cameraPos, state.HasLookAt() ? state.ReferenceLookAt : cameraPos); + var lookAt = state.HasLookAt() ? state.ReferenceLookAt : cameraPos; + displacement += RespectCameraRadius(cameraPos, lookAt); // Apply damping float dampTime = m_DampingWhenOccluded; @@ -341,7 +342,7 @@ protected override void PostPipelineStageCallback( } var prevDisplacement = bodyAfterAim ? extra.previousDisplacement - : state.ReferenceLookAt + dampingBypass * extra.previousCameraOffset - initialCamPos; + : lookAt + dampingBypass * extra.previousCameraOffset - initialCamPos; displacement = prevDisplacement + Damper.Damp(displacement - prevDisplacement, dampTime, deltaTime); } } @@ -358,7 +359,7 @@ protected override void PostPipelineStageCallback( dir0, dir1, state.ReferenceUp); } extra.previousDisplacement = displacement; - extra.previousCameraOffset = cameraPos - state.ReferenceLookAt; + extra.previousCameraOffset = cameraPos - lookAt; extra.previousCameraPosition = cameraPos; extra.previousDampTime = dampTime; }