Камера Unity Orbit Cinemachine вокруг игрока при перетаскивании мышиC#

Место общения программистов C#
Гость
Камера Unity Orbit Cinemachine вокруг игрока при перетаскивании мыши

Сообщение Гость »


Я пытался реализовать систему управления камерой, подобную Roblox, в единстве, но благодаря встроенному в CinemachineFreeLook сценарию InputProvider, который связан с действиями моей системы ввода, камера перемещается всякий раз, когда я просто перемещаю мышь, и не требует правой мыши кнопку, которую нужно удерживать.
Я хочу, чтобы всякий раз, когда я удерживаю правую кнопку мыши, мышь фиксировалась на месте, и перемещение мыши при удерживании правой кнопки мыши вращало камеру вокруг игрока. Я настроил орбиты в камере FreeLook.
У поставщика ввода Cinemachine есть возможность включить автоматический ввод. Если он включен, сценарий Cinemachines имеет приоритет и контролирует движение камеры всякий раз, когда я выполняю действие, связанное с поставщиком ввода. Я подключил действие просмотра к сценарию поставщика ввода, который выглядит следующим образом:
Система ввода
Поэтому первое, что я попробовал, — это отключить AutoEnableInputs, чтобы можно было редактировать движение камеры. с моим собственным сценарием, но поскольку он основан на обновлении значений оси из сценария InputProvider, он не работает, поскольку эти значения осей обновляются на основе входных данных в InputProvider (которые я отключил). Единственное, что, я думаю, сработает, это либо подойти к этому совершенно по-другому, либо, может быть, я мог бы получить некоторую помощь с моим скриптом CameraController:

Код: Выделить всё

public class CameraController : MonoBehaviour
{
/* [SerializeField] */
/* private float orbitSpeed = 2f; */

private CinemachineInputProvider inputProvider;

public PlayerInputActions playerControls;
private InputAction deltaAction;
private InputAction dragAction;

private Vector2 deltaInput = Vector2.zero;
private bool isDragging = false;

private void Awake()
{
playerControls = new PlayerInputActions();
inputProvider = GetComponent();

deltaAction = playerControls.Player.Look;
dragAction = playerControls.Player.Drag;
}

private void OnEnable()
{
deltaAction.Enable();
dragAction.Enable();

dragAction.performed += OnDrag;
dragAction.canceled += OnDrag;

deltaAction.performed += OnDelta;
}

private void OnDisable()
{
deltaAction.Disable();
dragAction.Disable();
}

private void OnDrag(InputAction.CallbackContext context)
{
isDragging = !isDragging;
}

private void OnDelta(InputAction.CallbackContext context)
{
deltaInput = context.ReadValue();
}

// Update is called once per frame
void Update()
{
float x = inputProvider.GetAxisValue(0);
float y = inputProvider.GetAxisValue(1);
float z = inputProvider.GetAxisValue(2);

if ((x != 0 || y != 0) && isDragging)
{
OrbitPlayer(x, y);
}
}

/* public Vector2 OrbitDirection(float x, float y)
{
Vector2 direction = Vector2.zero;
return direction;
} */

public void OrbitPlayer(float x, float y)
{
Debug.Log("Orbiting");
}
}
OrbitPlayer() is never getting called as the floats x,y,z are never changing from the value 0 as I have disabled the inputs from the input provider as of now, I want this to work with the input provider somehow though.
I have tried looking everywhere for some answers but usually it was either using the old input manager or wasn't applicible in my context. Thanks for reading :)


Источник: https://stackoverflow.com/questions/781 ... ging-mouse

Вернуться в «C#»