Marek Fix

This commit is contained in:
Dominik G.
2025-10-28 12:04:22 +01:00
parent 0cb9be4070
commit e2fa430d50
6 changed files with 402 additions and 419 deletions

View File

@@ -182,6 +182,7 @@ namespace MegaKoop.Game.Networking
var clone = Instantiate(template, spawnPosition, baseRotation, parent); var clone = Instantiate(template, spawnPosition, baseRotation, parent);
clone.name = BuildPlayerName(info, i); clone.name = BuildPlayerName(info, i);
AdjustSpawnToGround(clone);
ConfigureCloneForPlayer(clone, info, i); ConfigureCloneForPlayer(clone, info, i);
ulong ownerSteamId = ParseSteamId(info.SteamId); ulong ownerSteamId = ParseSteamId(info.SteamId);
@@ -252,6 +253,25 @@ namespace MegaKoop.Game.Networking
return center + offset; return center + offset;
} }
private void AdjustSpawnToGround(GameObject clone)
{
if (clone == null) return;
var t = clone.transform;
var cc = clone.GetComponent<CharacterController>();
Vector3 pos = t.position;
float up = 2.5f;
float down = 10f;
float radius = cc != null ? cc.radius : 0.25f;
Vector3 origin = pos + Vector3.up * up;
if (Physics.SphereCast(origin, Mathf.Max(0.05f, radius * 0.9f), Vector3.down, out RaycastHit hit, up + down, ~0, QueryTriggerInteraction.Ignore))
{
float centerY = cc != null ? cc.center.y : 0f;
float height = cc != null ? cc.height : 2f;
float targetY = hit.point.y + (height * 0.5f) - centerY + 0.02f;
t.position = new Vector3(pos.x, targetY, pos.z);
}
}
private void ConfigureCloneForPlayer(GameObject clone, LobbyPlayerInfo info, int index) private void ConfigureCloneForPlayer(GameObject clone, LobbyPlayerInfo info, int index)
{ {
// Ensure network identity is deterministic across clients. // Ensure network identity is deterministic across clients.

View File

@@ -31,6 +31,7 @@ namespace MegaKoop.Game.Networking
private Quaternion remoteTargetRotation; private Quaternion remoteTargetRotation;
private Vector3 remoteTargetVelocity; private Vector3 remoteTargetVelocity;
private bool haveRemoteState; private bool haveRemoteState;
private SteamCharacterNetworkBridge characterBridge;
private void Awake() private void Awake()
{ {
@@ -54,6 +55,13 @@ namespace MegaKoop.Game.Networking
trackedNavMeshAgent = GetComponent<UnityEngine.AI.NavMeshAgent>(); trackedNavMeshAgent = GetComponent<UnityEngine.AI.NavMeshAgent>();
} }
characterBridge = GetComponent<SteamCharacterNetworkBridge>();
if (characterBridge != null)
{
enabled = false;
return;
}
remoteTargetPosition = targetTransform.position; remoteTargetPosition = targetTransform.position;
remoteTargetRotation = targetTransform.rotation; remoteTargetRotation = targetTransform.rotation;
remoteTargetVelocity = Vector3.zero; remoteTargetVelocity = Vector3.zero;
@@ -62,6 +70,12 @@ namespace MegaKoop.Game.Networking
private void OnEnable() private void OnEnable()
{ {
characterBridge = GetComponent<SteamCharacterNetworkBridge>();
if (characterBridge != null)
{
enabled = false;
return;
}
EnsureNetworkManager(); EnsureNetworkManager();
RegisterHandlers(); RegisterHandlers();
} }

View File

@@ -86,6 +86,7 @@ namespace MegaKoop.Game
{ {
EnsureAnimatorReference(); EnsureAnimatorReference();
InitializeAnimatorHashes(); InitializeAnimatorHashes();
SnapToGroundImmediate();
} }
private void Update() private void Update()
@@ -120,6 +121,31 @@ namespace MegaKoop.Game
UpdateAnimator(); UpdateAnimator();
} }
private void SnapToGroundImmediate()
{
if (characterController == null)
{
characterController = GetComponent<UnityEngine.CharacterController>();
}
Vector3 pos = transform.position;
float up = 2.5f;
float down = 10f;
float radius = characterController != null ? characterController.radius : 0.25f;
Vector3 origin = pos + Vector3.up * up;
if (Physics.SphereCast(origin, Mathf.Max(0.05f, radius * 0.9f), Vector3.down, out RaycastHit hit, up + down, ~0, QueryTriggerInteraction.Ignore))
{
float centerY = characterController != null ? characterController.center.y : 0f;
float height = characterController != null ? characterController.height : 2f;
float bottomToCenter = Mathf.Max(radius, height * 0.5f) - radius;
float targetY = hit.point.y + bottomToCenter - centerY + 0.02f;
transform.position = new Vector3(pos.x, targetY, pos.z);
isGrounded = true;
verticalVelocity = groundedGravity;
lastTimeGrounded = Time.time;
}
}
public void SetInputSource(MegaKoop.Game.Networking.ICharacterInputSource source) public void SetInputSource(MegaKoop.Game.Networking.ICharacterInputSource source)
{ {
inputSource = source; inputSource = source;

File diff suppressed because it is too large Load Diff

View File

@@ -26438,27 +26438,6 @@ GameObject:
m_CorrespondingSourceObject: {fileID: 100000, guid: 4f32dfddb033d3e40b5841bc53cc1689, type: 3} m_CorrespondingSourceObject: {fileID: 100000, guid: 4f32dfddb033d3e40b5841bc53cc1689, type: 3}
m_PrefabInstance: {fileID: 1547596301} m_PrefabInstance: {fileID: 1547596301}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!65 &1101562815
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1101562811}
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: 3
m_Size: {x: 20, y: 0.20000087, z: 20}
m_Center: {x: 0, y: 0.1, z: 0}
--- !u!65 &1101562816 --- !u!65 &1101562816
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -40151,9 +40130,6 @@ PrefabInstance:
m_RemovedGameObjects: [] m_RemovedGameObjects: []
m_AddedGameObjects: [] m_AddedGameObjects: []
m_AddedComponents: m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 100000, guid: 4f32dfddb033d3e40b5841bc53cc1689, type: 3}
insertIndex: -1
addedObject: {fileID: 1101562815}
- targetCorrespondingSourceObject: {fileID: 100000, guid: 4f32dfddb033d3e40b5841bc53cc1689, type: 3} - targetCorrespondingSourceObject: {fileID: 100000, guid: 4f32dfddb033d3e40b5841bc53cc1689, type: 3}
insertIndex: -1 insertIndex: -1
addedObject: {fileID: 1101562816} addedObject: {fileID: 1101562816}
@@ -43612,27 +43588,6 @@ GameObject:
m_PrefabInstance: {fileID: 1803301414} m_PrefabInstance: {fileID: 1803301414}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!65 &1676182022 --- !u!65 &1676182022
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1676182018}
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: 3
m_Size: {x: 19.999998, y: 0.20000087, z: 19.999998}
m_Center: {x: 0, y: 0.1, z: 0}
--- !u!65 &1676182023
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@@ -47240,9 +47195,6 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 100000, guid: cbc86bb57f673ba45a8426789eb0fac0, type: 3} - targetCorrespondingSourceObject: {fileID: 100000, guid: cbc86bb57f673ba45a8426789eb0fac0, type: 3}
insertIndex: -1 insertIndex: -1
addedObject: {fileID: 1676182022} addedObject: {fileID: 1676182022}
- targetCorrespondingSourceObject: {fileID: 100000, guid: cbc86bb57f673ba45a8426789eb0fac0, type: 3}
insertIndex: -1
addedObject: {fileID: 1676182023}
- targetCorrespondingSourceObject: {fileID: 100000, guid: cbc86bb57f673ba45a8426789eb0fac0, type: 3} - targetCorrespondingSourceObject: {fileID: 100000, guid: cbc86bb57f673ba45a8426789eb0fac0, type: 3}
insertIndex: -1 insertIndex: -1
addedObject: {fileID: 1676182027} addedObject: {fileID: 1676182027}

File diff suppressed because one or more lines are too long