Помогите портировать управление (Мобилка + ввод мыши) Unity!
Нужно переделать управление под мышку. Скрипт сначала был написан для мобильного, но нужно делать тест и на компьютере. Нужно сделать через #if unity_editor #endif
public Vector2 startPos;
public Vector3 direction;
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
Vector3 touchPosition = Camera.main.ScreenToViewportPoint(touch.position);
switch (touch.phase)
{
case TouchPhase.Began:
parabora.GetComponent<LineRenderer>().enabled = true;
startPos = touch.position;
break;
case TouchPhase.Moved:
direction.x = touch.position.x - startPos.x;
parabolaPoint.position += direction * pointMoovingSpeed;
Shoot();
break;
}
}
Ответы (2 шт):
Автор решения: luvjungle
→ Ссылка
Будет как-то так. Не очень понял, зачем нужна touchPosition, вы к ней нигде не обращаетесь.
Более того, методы Input.GetMouseButton(0) и Input.GetMouseButtonDown(0) прекрасно работают и на мобилках, как тачи, так что можно оставить только их.
Хотя конечно может у TouchPhase.Moved какая-то хитрая проверка на то, что палец действительно двинулся, не помню, тогда придется реализовываться какой-то фильтр и для мышки
#if !UNITY_EDITOR
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
Vector3 touchPosition = Camera.main.ScreenToViewportPoint(touch.position);
switch (touch.phase)
{
case TouchPhase.Began:
parabora.GetComponent<LineRenderer>().enabled = true;
startPos = touch.position;
break;
case TouchPhase.Moved:
direction.x = touch.position.x - startPos.x;
parabolaPoint.position += direction * pointMoovingSpeed;
Shoot();
break;
}
}
#else
if (Input.GetMouseButtonDown(0))
{
parabora.GetComponent<LineRenderer>().enabled = true;
startPos = Input.mousePosition;
}
else if (Input.GetMouseButton(0))
{
Vector3 touchPosition = Camera.main.ScreenToViewportPoint(Input.mousePosition);
direction.x = Input.mousePosition.x - startPos.x;
parabolaPoint.position += direction * pointMoovingSpeed;
Shoot();
}
#endif
Автор решения: Yaroslav
→ Ссылка
Кстати, Input.touches работает в редакторе...
private void Update () {
UpdateInputs();
}
private void UpdateInputs () {
#if UNITY_EDITOR
UpdateMouse();
#else
UpdateTouch();
#endif
}
private void UpdateMouse () {
if (Input.GetMouseButtonDown(0))
InputBegan(Input.mousePosition);
if (Input.GetMouseButton(0))
InputMove(Input.mousePosition);
if (Input.GetMouseButtonUp(0))
InputEnd(Input.mousePosition);
}
private void UpdateTouch () {
if (Input.touchCount > 0)
foreach (Touch touch in Input.touches)
switch (touch.phase) {
case TouchPhase.Began: InputBegan(touch.position); break;
case TouchPhase.Moved: InputMove(touch.position); break;
case TouchPhase.Ended: InputEnd(touch.position); break;
}
}
private void InputBegan (Vector2 position) {
/* ...code... */
}
private void InputMove (Vector2 position) {
/* ...code... */
}
private void InputEnd (Vector2 position) {
/* ...code... */
}