2015-06-08 2 views
0

Я хочу повернуть объект GameObject через движение мыши между -20 ° и + 20 °.Unity3d get Mouse Input Axis

Я знаю, что есть возможность захватить сглаженный вход через Input.GetAxis("Horizontal"); и Input.GetAxis("Vertical");, которая возвращает значения с плавающей точкой между -1 и 1

Было бы хорошо, если бы существовало что-то вроде Input.GetMouseAxis("Horizontal"); или Input.GetMouseAxis("Horizontal");.

Но на выходе не должно влиять клавиатура. Прошу прощения, что у меня нет большого опыта работы с Unity и его API.

+0

вы пробовали I nput.GetAxisRaw() http://docs.unity3d.com/ScriptReference/Input.GetAxisRaw.html – JonHerbert

+0

Вы также можете попробовать Input.MousePosition() http://docs.unity3d.com/ScriptReference/Input-mousePosition.html – JonHerbert

+0

есть мышь в единстве, «захваченном» в разрешении экрана, или как я должен масштабировать мышечную позицию до значения от -1 до 1? – leAthlon

ответ

1

- мышь в единстве «захвачена» в разрешении экрана или как должна быть масштабировать мышь Позиция до значения от -1 до 1?

В этом случае «normalizedSpeed» будет ваша целевая

public float mouseDistance; 
public Vector2 mouseDown = -Vector2.one; 

public float normalizedSpeed; 

public void Update() 
{ 
    if(Input.GetMouseButtonDown(0)) 
     mouseDown = Input.MousePosition(); 

    if(Input.GetMouseButtonUp(0)) 
     mouseDown = -Vector2.one; 

    if(Input.GetMouseButton(0)) 
     normalizedSpeed = mouseDown != -Vector2.one ? 
     Mathf.Clamp((mouseDown - Input.MousePosition()).sqrMagnitude, 0, (mouseDistance * mouseDistance))/(mouseDistance * mouseDistance) 
     : 0; 
} 

я использовать sqrMagnitude вместо расстояния, потому что SQR корень вызова на расстоянии() занимает много памяти, поэтому он быстрее сравнить квадратичные расстояния против друг друга

также имейте в виду, им wirting это как псевдо-код, чтобы общая идея заключается в том, что им будет за, им оставив вас синтаксически ответственность за осуществление;)