Как ограничить движение камеры? [Дубликат]

Добавление #![macro_use] к вершине вашего файла, содержащего макросы, приведет к выталкиванию всех макросов в main.rs.

Например, предположим, что этот файл называется node.rs:

#![macro_use]

macro_rules! test {
    () => { println!("Nuts"); }
}

macro_rules! best {
    () => { println!("Run"); }
}

pub fn fun_times() {
    println!("Is it really?");
}

Ваши main.rs будут выглядеть примерно так:

mod node;  //We're using node.rs
mod toad;  //Also using toad.rs

fn main() {
    test!();
    best!();
    toad::a_thing();
}

Наконец, скажем, у вас есть файл с именем toad.rs, который также требует этих макросов:

use node; //Notice this is 'use' not 'mod'

pub fn a_thing() {
  test!();

  node::fun_times();
}

Обратите внимание, что после того, как файлы втянуты в main.rs с помощью mod, остальные ваши файлы имеют доступ к ним с помощью ключевого слова use.

0
задан Heretic Monkey 11 May 2017 в 18:31
поделиться

3 ответа

Вы пытаетесь ограничить вращение камеры для персонального контроллера персонажа, чтобы камера контролировалась движениями мыши?

0
ответ дан AnneSchmidt 20 August 2018 в 08:33
поделиться

Вы не публикуете то, что вы пробовали, так что это выстрел в темноте, помогая вам. Проверьте Mathf.Clamp Unity's , чтобы ограничить разрешенные углы.

yaw += speedH * Input.GetAxis("Mouse X");
pitch -= speedV * Input.GetAxis("Mouse Y");

yaw = Mathf.Clamp(yaw, -90f, 90f);
pitch = Mathf.Clamp(pitch, -60f, 90f);

transform.eulerAngles = new Vector3(pitch, yaw, 0.0f);
1
ответ дан Chuck Savage 20 August 2018 в 08:33
поделиться
  • 1
    Спасибо за быстрый ответ! Я знал, что это легко, я просто не знал, как это сделать ... – Athdot 11 May 2017 в 17:49
  • 2
    Ваш скрипт не работает, когда родительский игровой объект вращается ... – Athdot 11 May 2017 в 19:30
  • 3
    «Мой сценарий» работает по заданному вопросу. Вы не указали, меняется ли игровой объект. Вы спросили, как ограничить вращение камеры. Отметьте это как ответ, затем задайте новый вопрос. – Chuck Savage 12 May 2017 в 00:39

Нет попытки ограничить любую ось в коде. Используйте временную переменную, чтобы ограничить свою ось, увеличив ее каждый tome Input.GetAxis. Если он достигает минимального или максимального значения, вы хотите ограничить его, чтобы Mathf.Clamp зажать его между этими минимальными и максимальными значениями / углом.

Изменено это , чтобы ограничить ваши FPS на обеих осях вместо обычного у-оси.

public float xMoveThreshold = 1000.0f;
public float yMoveThreshold = 1000.0f;

//Y limit
public float yMaxLimit = 45.0f;
public float yMinLimit = -45.0f;
float yRotCounter = 0.0f;

//X limit
public float xMaxLimit = 45.0f;
public float xMinLimit = -45.0f;
float xRotCounter = 0.0f;

Transform player;

void Start()
{
    player = Camera.main.transform;
}

// Update is called once per frame
void Update()
{
    //Get X value and limit it
    xRotCounter += Input.GetAxis("Mouse X") * xMoveThreshold * Time.deltaTime;
    xRotCounter = Mathf.Clamp(xRotCounter, xMinLimit, xMaxLimit);

    //Get Y value and limit it
    yRotCounter += Input.GetAxis("Mouse Y") * yMoveThreshold * Time.deltaTime;
    yRotCounter = Mathf.Clamp(yRotCounter, yMinLimit, yMaxLimit);
    //xRotCounter = xRotCounter % 360;//Optional
    player.localEulerAngles = new Vector3(-yRotCounter, xRotCounter, 0);
}
1
ответ дан Community 20 August 2018 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: