Character camera and movement fix - maybe
This commit is contained in:
@@ -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}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user