Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Regression fix: compilation errors when physics module is not present.
- GameObjects created with Gameobject menu items now follow Unity naming conventions.
- Regression fix: virtual cameras no longer forget that they are targeting groups on domain reload.
- Moved Cinemachine tools into the main Tools overlay (2022.1+), moved Freelook rig selection to a separate overlay, updated icons to support light and dark themes.
- Bugfix: 3rdPersonFollow logged console messages when looking straight up or down.
- BugFix: InputProvider no longer causes a tiny gc alloc every frame.
- Moved Cinemachine tools into the main Tools overlay (2022.1+), moved Freelook rig selection to a separate overlay, updated icons to support light and dark themes


## [2.9.0-pre.1] - 2021-10-26
Expand Down
4 changes: 2 additions & 2 deletions Editor/Editors/Cinemachine3rdPersonFollowEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,11 @@ void DrawSceneTools()
out var armPosition);
var followTargetRotation = thirdPerson.FollowTargetRotation;
var targetForward = followTargetRotation * Vector3.forward;
var heading = Cinemachine3rdPersonFollow.GetHeading(
followTargetRotation, thirdPerson.VirtualCamera.State.ReferenceUp);

EditorGUI.BeginChangeCheck();
// shoulder handle
var heading = Cinemachine3rdPersonFollow.GetHeading(
targetForward, thirdPerson.VirtualCamera.State.ReferenceUp);
var sHandleMinId = GUIUtility.GetControlID(FocusType.Passive); // TODO: KGB workaround until id is exposed
var newShoulderPosition = Handles.PositionHandle(shoulderPosition, heading);
var sHandleMaxId = GUIUtility.GetControlID(FocusType.Passive); // TODO: KGB workaround until id is exposed
Expand Down
13 changes: 7 additions & 6 deletions Runtime/Components/Cinemachine3rdPersonFollow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ void PositionCamera(ref CameraState curState, float deltaTime)
var targetPos = FollowTargetPosition;
var targetRot = FollowTargetRotation;
var targetForward = targetRot * Vector3.forward;
var heading = GetHeading(targetForward, up);
var heading = GetHeading(targetRot, up);

if (deltaTime < 0)
{
Expand Down Expand Up @@ -234,8 +234,7 @@ public void GetRigPositions(out Vector3 root, out Vector3 shoulder, out Vector3
{
var up = VirtualCamera.State.ReferenceUp;
var targetRot = FollowTargetRotation;
var targetForward = targetRot * Vector3.forward;
var heading = GetHeading(targetForward, up);
var heading = GetHeading(targetRot, up);
root = m_PreviousFollowTargetPosition;
GetRawRigPositions(root, targetRot, heading, out shoulder, out hand);
#if CINEMACHINE_PHYSICS
Expand All @@ -244,10 +243,12 @@ public void GetRigPositions(out Vector3 root, out Vector3 shoulder, out Vector3
#endif
}

internal static Quaternion GetHeading(Vector3 targetForward, Vector3 up)
internal static Quaternion GetHeading(Quaternion targetRot, Vector3 up)
{
var planeForward = targetForward.ProjectOntoPlane(up);
planeForward = Vector3.Cross(up, Vector3.Cross(planeForward, up));
var targetForward = targetRot * Vector3.forward;
var planeForward = Vector3.Cross(up, Vector3.Cross(targetForward.ProjectOntoPlane(up), up));
if (planeForward.AlmostZero())
planeForward = Vector3.Cross(targetRot * Vector3.right, up);
return Quaternion.LookRotation(planeForward, up);
}

Expand Down