Character camera and movement fix - maybe

This commit is contained in:
2025-10-12 13:27:37 +02:00
parent 0f716ab4a7
commit 78836c0691
6 changed files with 191 additions and 12 deletions

View File

@@ -24,3 +24,8 @@ MonoBehaviour:
SourcePrefabToOverride: {fileID: 0} SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0 SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0} OverridingTargetPrefab: {fileID: 0}
- Override: 0
Prefab: {fileID: 1170732337855516, guid: b5051c49d05768c73a8c42e1967fe4b2, type: 3}
SourcePrefabToOverride: {fileID: 0}
SourceHashToOverride: 0
OverridingTargetPrefab: {fileID: 0}

View File

@@ -475,6 +475,8 @@ GameObject:
- component: {fileID: 95902137545226380} - component: {fileID: 95902137545226380}
- component: {fileID: 6003919833639142508} - component: {fileID: 6003919833639142508}
- component: {fileID: 2197706699938650528} - component: {fileID: 2197706699938650528}
- component: {fileID: 6042376723608263729}
- component: {fileID: -1978034200425575233}
m_Layer: 8 m_Layer: 8
m_Name: Golem m_Name: Golem
m_TagString: Untagged m_TagString: Untagged
@@ -576,6 +578,77 @@ CapsuleCollider:
m_Height: 1.8835256 m_Height: 1.8835256
m_Direction: 1 m_Direction: 1
m_Center: {x: -0.033632576, y: 0.82399094, z: 0} m_Center: {x: -0.033632576, y: 0.82399094, z: 0}
--- !u!114 &6042376723608263729
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.NetworkObject
GlobalObjectIdHash: 2899175104
InScenePlacedSourceGlobalObjectIdHash: 0
DeferredDespawnTick: 0
Ownership: 1
AlwaysReplicateAsRoot: 0
SynchronizeTransform: 1
ActiveSceneSynchronization: 0
SceneMigrationSynchronization: 1
SpawnWithObservers: 1
DontDestroyWithOwner: 0
AutoObjectParentSync: 1
SyncOwnerTransformWhenParented: 1
AllowOwnerToParent: 0
--- !u!114 &-1978034200425575233
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1170732337855516}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Netcode.Runtime::Unity.Netcode.Components.NetworkTransform
ShowTopMostFoldoutHeaderGroup: 1
NetworkTransformExpanded: 0
AutoOwnerAuthorityTickOffset: 1
PositionInterpolationType: 0
RotationInterpolationType: 0
ScaleInterpolationType: 0
PositionLerpSmoothing: 1
PositionMaxInterpolationTime: 0.1
RotationLerpSmoothing: 1
RotationMaxInterpolationTime: 0.1
ScaleLerpSmoothing: 1
ScaleMaxInterpolationTime: 0.1
AuthorityMode: 0
TickSyncChildren: 0
UseUnreliableDeltas: 0
SyncPositionX: 1
SyncPositionY: 1
SyncPositionZ: 1
SyncRotAngleX: 1
SyncRotAngleY: 1
SyncRotAngleZ: 1
SyncScaleX: 1
SyncScaleY: 1
SyncScaleZ: 1
PositionThreshold: 0.001
RotAngleThreshold: 0.01
ScaleThreshold: 0.01
UseQuaternionSynchronization: 0
UseQuaternionCompression: 0
UseHalfFloatPrecision: 0
InLocalSpace: 0
SwitchTransformSpaceWhenParented: 0
Interpolate: 1
SlerpPosition: 0
--- !u!1 &1186076032050976 --- !u!1 &1186076032050976
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@@ -268,6 +268,12 @@ namespace MegaKoop.Game.Networking
} }
} }
var controller = clone.GetComponent<ThirdPersonCharacterController>();
if (!info.IsLocal && controller != null)
{
controller.SetCameraTransform(null);
}
// Ensure only the local player's camera remains active and is MainCamera // Ensure only the local player's camera remains active and is MainCamera
if (info.IsLocal) if (info.IsLocal)
{ {
@@ -297,7 +303,6 @@ namespace MegaKoop.Game.Networking
} }
// Bind the character controller to this camera for input-relative movement // Bind the character controller to this camera for input-relative movement
var controller = clone.GetComponent<ThirdPersonCharacterController>();
if (controller != null) if (controller != null)
{ {
Transform camTransform = thirdPersonCamera != null ? thirdPersonCamera.transform : (Camera.main != null ? Camera.main.transform : null); Transform camTransform = thirdPersonCamera != null ? thirdPersonCamera.transform : (Camera.main != null ? Camera.main.transform : null);
@@ -306,6 +311,11 @@ namespace MegaKoop.Game.Networking
controller.SetCameraTransform(camTransform); controller.SetCameraTransform(camTransform);
} }
} }
if (inputSender != null && thirdPersonCamera != null)
{
inputSender.SetCameraTransform(thirdPersonCamera.transform);
}
} }
} }

View File

@@ -1,4 +1,5 @@
using UnityEngine; using UnityEngine;
using MegaKoop.Game;
namespace MegaKoop.Game.Networking namespace MegaKoop.Game.Networking
{ {
@@ -7,6 +8,7 @@ namespace MegaKoop.Game.Networking
{ {
[SerializeField] private SteamCharacterNetworkBridge characterNetwork; [SerializeField] private SteamCharacterNetworkBridge characterNetwork;
[SerializeField] private float sendInterval = 0.05f; [SerializeField] private float sendInterval = 0.05f;
[SerializeField] private Transform cameraTransform;
private float sendTimer; private float sendTimer;
@@ -16,6 +18,23 @@ namespace MegaKoop.Game.Networking
{ {
characterNetwork = GetComponent<SteamCharacterNetworkBridge>(); characterNetwork = GetComponent<SteamCharacterNetworkBridge>();
} }
if (cameraTransform == null)
{
var thirdPersonCamera = GetComponentInChildren<ThirdPersonCamera>(true);
if (thirdPersonCamera != null)
{
cameraTransform = thirdPersonCamera.transform;
}
else if (characterNetwork != null && characterNetwork.IsLocalPlayer)
{
Camera mainCamera = Camera.main;
if (mainCamera != null && mainCamera.transform.IsChildOf(transform))
{
cameraTransform = mainCamera.transform;
}
}
}
} }
private void Update() private void Update()
@@ -32,13 +51,58 @@ namespace MegaKoop.Game.Networking
sendTimer -= Time.deltaTime; sendTimer -= Time.deltaTime;
Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
moveInput = Vector2.ClampMagnitude(moveInput, 1f);
Vector2 planarMove = ConvertToWorldSpace(moveInput);
bool jumpPressed = Input.GetButtonDown("Jump"); bool jumpPressed = Input.GetButtonDown("Jump");
if (sendTimer <= 0f || jumpPressed) if (sendTimer <= 0f || jumpPressed)
{ {
characterNetwork.SendLocalInput(moveInput, jumpPressed); characterNetwork.SendLocalInput(planarMove, jumpPressed);
sendTimer = sendInterval; sendTimer = sendInterval;
} }
} }
public void SetCameraTransform(Transform camera)
{
cameraTransform = camera;
}
private Vector2 ConvertToWorldSpace(Vector2 moveInput)
{
if (cameraTransform == null)
{
return moveInput;
}
Vector3 forward = cameraTransform.forward;
Vector3 right = cameraTransform.right;
forward.y = 0f;
right.y = 0f;
float forwardSqr = forward.sqrMagnitude;
float rightSqr = right.sqrMagnitude;
if (forwardSqr < 0.0001f && rightSqr < 0.0001f)
{
return moveInput;
}
if (forwardSqr > 0.0001f)
{
forward.Normalize();
}
if (rightSqr > 0.0001f)
{
right.Normalize();
}
Vector3 desiredMove = forward * moveInput.y + right * moveInput.x;
if (desiredMove.sqrMagnitude > 1f)
{
desiredMove.Normalize();
}
return new Vector2(desiredMove.x, desiredMove.z);
}
} }
} }

View File

@@ -826,7 +826,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!81 &1888194195 --- !u!81 &1888194195
AudioListener: AudioListener:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

File diff suppressed because one or more lines are too long