Мое приложение (с использованием Unity 2017.3.1f1) настроено так:
- Перспективная камера находится внутри объекта player (столкновения отключены), а такжеего потомок (чтобы получить вид от первого лица)
- В камере есть скрипт «MouseLook» (я изменил несколько вещей в стандартном Unity), который держит курсор заблокированным и скрытым в середине экрана(
Cursor.lockState = CursorLockMode.Locked
& Cursor.visible = false
) - У «игрока» есть общий сценарий «ввода» и сценарий движения: при нажатии кнопки «wasd» эти клавиши перемещают объект игрока, что также заставляет камеру двигаться
Чего я хочу достичь:
- Используйте колесо прокрутки мыши, чтобы перемещаться в направлении точки, на которую смотрит камера, или от нее.это, независимо, если есть объект.
- Я не хочу менять FOV / scale
- Не нужно использовать
Lerp
, я просто хочу переместить игрока на шаг кцелевое положение каждый кадр, в котором используется колесо мыши
Что я пробовал:
1a.В общем сценарии ввода:
if(Input.GetAxis("Mouse ScrollWheel") != 0) {
transform.Translate(0,0,Input.GetAxis("Mouse ScrollWheel") * 200);
}
1b: В общем сценарии ввода:
if(Input.GetAxis("Mouse ScrollWheel") != 0) {
transform.position += transform.forward * Input.GetAxis("Mouse ScrollWheel") * 200;
}
Оба работают одинаково, но только перемещают игрока/ Камера на том же уровне у, даже если смотреть вниз / вверх.transform.up
всегда выводит «(0.0, 1.0, 0.0)», так что нет смысла включать это.
2.Новый скрипт на камере ( source ):
public class ScrollToZoom : MonoBehaviour {
public GameObject player;
void Update () {
if(Input.GetAxis("Mouse ScrollWheel") != 0) {
RaycastHit hit;
Ray ray = this.transform.GetComponent<Camera>().ScreenPointToRay(Input.mousePosition);
Vector3 desiredPosition;
if(Physics.Raycast(ray,out hit)) {
desiredPosition = hit.point;
} else {
desiredPosition = transform.position;
}
float distance = Vector3.Distance(desiredPosition,transform.position);
Vector3 direction = Vector3.Normalize(desiredPosition - transform.position) * (distance * Input.GetAxis("Mouse ScrollWheel"));
transform.position += direction;
}
}
}
Это не работает вообще, потому что «направление» всегда (0,0,0), потому что курсор мыши заблокирован (что я не могу / не буду менять).
Как включить в это вращение вокруг оси x (я зажимаю его на +/- 90 ° в скрипте "MouseLook")?