Добавление #![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
.
Вы пытаетесь ограничить вращение камеры для персонального контроллера персонажа, чтобы камера контролировалась движениями мыши?
Вы не публикуете то, что вы пробовали, так что это выстрел в темноте, помогая вам. Проверьте 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);
Нет попытки ограничить любую ось в коде. Используйте временную переменную, чтобы ограничить свою ось, увеличив ее каждый 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);
}