Поворот игрока за курсором мыши

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Поворот игрока за курсором мыши

Сообщение Olean 12 авг 2011, 10:15

Приветствую.
Уже бьюсь 2й день, ни как не могу сделать нормальный поворот игрока(кораблик) за курсором мыши в 2д.
Уже и велосипед начал изобретать и геометрию вспоминать...
Получаю координаты курсора вот так
Синтаксис:
Используется java
var mouseCoordinates:Vector3 = Vector3(-Input.GetAxis("Mouse Y"), 0, Input.GetAxis("Mouse X"));
mouseCoordinates *= 10 * Time.deltaTime*12.0; // You can also add a sensivity value here
target.transform.Translate(mouseCoordinates);


Пробовал
Синтаксис:
Используется java
player.transform.LookAt(target);
 

Вертиться подурному.

Пробовал велосипед
Синтаксис:
Используется java
v1=target.transform.position.x;
v2=target.transform.position.y;
a1=player.position.x;
a2=player.position.y;

if (v1>=a1)
{h=v1-a1;}
else
{h=a1-v1;}
if (v2>=a2){w=v2-a2;}else{w=a2-v2;}
angle=Mathf.Sqrt(h*h+w*w);
                       
player.transform.rotation=Quaternion.Euler(angle, 0,0 );               
 

Тоже не то.

Пробовал как из урока с турелью
Синтаксис:
Используется java
var targetRotation = Quaternion.LookRotation(target.position - player.transform.position, Vector3.right);
                player.transform.rotation = Quaternion.Slerp(player.transform.rotation, targetRotation, Time.deltaTime * 1.2);
 

Вроде неплохо только в 3d, крутиться по всем осям.

Подскажите, как сделать правильно, просто поворачивать объект за курсором мыши, проще говоря курсор мыши прицел, ну и игрок за ним поворачивается в 2х координатах. Спасибо.
Olean
UNец
 
Сообщения: 4
Зарегистрирован: 12 авг 2011, 09:50

Re: Поворот игрока за курсором мыши

Сообщение Tolking 12 авг 2011, 12:53

Ты пишешь что нужно поворот делать в 2Д и тут же пишешь что "в 3Д крутится по всем осям"

Если у тебя 2Д, то есть плоскость, по которой летает кораблик, тогда нужно лететь на то место куда указывает курсор на этой плоскости, самый простой вариант сделать объект таргет и ставить его туда, куда нужно лететь(куда курсор показывает), а потом кораблик поворачивать на таргет. Это если нужно, чтобы кораблик летел в курсор, если нужно чтобы кораблик летел в направлении курсора, то нужно вычислить вектор между корабликом и местом на которое указывает курсор и направлять кораблик по этому вектору...

В 3Д, пожалуй, нужно сферу вокруг кораблика навесить и лететь в место куда указывает курсор мыши на сфере. Но в этом случае могут быть и глюки...
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2718
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Поворот игрока за курсором мыши

Сообщение #Test 12 авг 2011, 15:18

Попробуй пустить луч и все-таки использовать LookAt, примерно в таком виде
Синтаксис:
Используется csharp
mouseRay = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(mouseRay, out hit, Mathf.Infinity, ground))
{
        ....transform.LookAt(hit.point);
        ....   
}


Т.к. у тебя 2Д, соответственно выбирай нужные тебе оси, на которые корабль будет реагировать (это в лукат), а остальные обнуляешь.
Аватара пользователя
#Test
UNец
 
Сообщения: 27
Зарегистрирован: 28 июл 2011, 09:31
Откуда: Екатеринбург
  • ICQ

Re: Поворот игрока за курсором мыши

Сообщение Olean 12 авг 2011, 21:41

Спасибо, вот еще нашел Angry bots, там вроде бы похожая схема, поробую там порыться.
Olean
UNец
 
Сообщения: 4
Зарегистрирован: 12 авг 2011, 09:50

Re: Поворот игрока за курсором мыши

Сообщение Armagedron 08 сен 2011, 09:10

Здравтсвуйте. Ну так есть работающий код то? Если да то выложите пожалуйста потому как меня тоже этот вопрос интересует. Спасибо.
Armagedron
UNец
 
Сообщения: 15
Зарегистрирован: 18 апр 2011, 10:02

Re: Поворот игрока за курсором мыши

Сообщение Armagedron 10 сен 2011, 21:23

Вот нашел решение этой задачи. Вроде корректно работает.

Синтаксис:
Используется javascript
  var dx: int = Input.mousePosition.x - Screen.width / 2.0;
  var dy: int = Input.mousePosition.y - Screen.height / 2.0;
  var strawRadians: float = Mathf.Atan2(dx,dy);
  var strawDigrees:float = 360.0 * strawRadians/(2.0*Mathf.PI);
  transform.rotation.eulerAngles.z = -strawDigrees;
Armagedron
UNец
 
Сообщения: 15
Зарегистрирован: 18 апр 2011, 10:02


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32