修正
我改进了轨道摄像机的1.4节“使焦点居中”,以便更好地实现焦点居中和焦点半径限制的相互作用。调整OrbitCamera.UpdateFocusPoint如下:
void UpdateFocusPoint () {
previousFocusPoint = focusPoint;
Vector3 targetPoint = focus.position;
if (focusRadius > 0f) {
float distance = Vector3.Distance(targetPoint, focusPoint);
float t = 1f;
if (distance > 0.01f && focusCentering > 0f) {
t = Mathf.Pow(1f - focusCentering, Time.unscaledDeltaTime);
}
if (distance > focusRadius) {
t = Mathf.Min€(t, focusRadius / distance);
}
focusPoint = Vector3.Lerp(targetPoint, focusPoint, t);
}
else {
focusPoint = targetPoint;
}
}
我还更改了“移动地面”部分2.3确定运动,因此忽略了质量较轻的连接物体。这样可以防止球体自动跟随其推开的轻物体。如下调整MovingSphere.UpdateState结尾:
if (connectedBody) {
if (connectedBody.isKinematic || connectedBody.mass >= body.mass) {
UpdateConnectionState();
}
}
最后,更改了“攀爬”第2.5节的“可选攀登”,以防止自动粘在动画的可攀爬表面上。这是通过在EvaluateCollision中调节desiresClimbing
而不是在Climbing
属性中完成的:
bool Climbing =>climbContactCount > 0 && stepsSinceLastJump > 2;
…
void EvaluateCollision (Collision collision) {
…
if (
desiresClimbing &&upDot >= minClimbDotProduct &&
(climbMask & (1 << layer)) != 0
) {
climbContactCount += 1;
climbNormal += normal;
lastClimbNormal = normal;
connectedBody = collision.rigidbody;
}
…
}