Character camera and movement fix - maybe
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using UnityEngine;
|
||||
using MegaKoop.Game;
|
||||
|
||||
namespace MegaKoop.Game.Networking
|
||||
{
|
||||
@@ -7,6 +8,7 @@ namespace MegaKoop.Game.Networking
|
||||
{
|
||||
[SerializeField] private SteamCharacterNetworkBridge characterNetwork;
|
||||
[SerializeField] private float sendInterval = 0.05f;
|
||||
[SerializeField] private Transform cameraTransform;
|
||||
|
||||
private float sendTimer;
|
||||
|
||||
@@ -16,6 +18,23 @@ namespace MegaKoop.Game.Networking
|
||||
{
|
||||
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()
|
||||
@@ -32,13 +51,58 @@ namespace MegaKoop.Game.Networking
|
||||
|
||||
sendTimer -= Time.deltaTime;
|
||||
Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
|
||||
moveInput = Vector2.ClampMagnitude(moveInput, 1f);
|
||||
Vector2 planarMove = ConvertToWorldSpace(moveInput);
|
||||
bool jumpPressed = Input.GetButtonDown("Jump");
|
||||
|
||||
if (sendTimer <= 0f || jumpPressed)
|
||||
{
|
||||
characterNetwork.SendLocalInput(moveInput, jumpPressed);
|
||||
characterNetwork.SendLocalInput(planarMove, jumpPressed);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user