#c# #unity3d #zooming
#c# #unity-игровой движок #масштабирование
Вопрос:
Я использую C #, и я новичок. Я пытаюсь создать функцию масштабирования для игры на Unity. Вот мой код (который у меня есть на данный момент):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Zoom : MonoBehaviour
{
public Camera cam;
public float zoom_speed = 20f;
// Update is called once per frame
void Update ()
{
if(Input.GetAxis("Mouse ScrollWheel"))
{
cam.fieldOfView = zoom_speed;
}
}
}
Однако я получаю сообщение об ошибке «не удается неявно преобразовать тип float в bool при наведении курсора if(Input.GetAxis("Mouse Scrollwheel"))
Также был бы признателен за любые советы о том, как заставить программу масштабирования работать.
Ответ №1:
Input.GetAxis("Mouse ScrollWheel");
Скрипт возвращает значение с плавающей точкой.
Значение будет находиться в диапазоне -1 … 1 для ввода с клавиатуры и джойстика. Если ось настроена на дельта-перемещение мыши, дельта мыши умножается на чувствительность оси, и диапазон не равен -1 … 1.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Zoom : MonoBehaviour
{
public Camera cam;
public float zoom_speed = 20f;
// Update is called once per frame
void Update ()
{
float d = Input.GetAxis("Mouse ScrollWheel");
if (d > 0f)
{
//Positive value
//Scroll up
cam.fieldOfView = zoom_speed;
}
else if (d < 0f)
{
//Negative value
//Scroll down
cam.fieldOfView -= zoom_speed;
}
}
}
Ответ №2:
Дополняя ответ из 0xBFE1A8, вам даже не нужно использовать оператор if … else, потому что значение будет находиться в диапазоне -1 … 1, просто умножьте Input.GetAxis("Mouse ScrollWheel")
значение на zoom_speed. Я также предлагаю вам ограничить поле зрения между минимальным и максимальным значениями, определенными вами.
float scroll = Input.GetAxis("Mouse ScrollWheel");
cam.fieldOfView = Mathf.Clamp(cam.fieldOfView zoom_speed * scroll * Time.deltaTime, minFieldOfView, maxFieldOfView);