joystick для rigidbody2D помогите!!!
| |
licher2008 | Дата: Среда, 21 Мая 2014, 19:12 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| столкнулся с такой проблемой: решил сменить управление с WASD на сенсорное, точнее на джойстик, но все джойстики которые нашел работают только с ChacarterController, тобишь они не видят rigidbody2D, в том числе и из пакета Assets Standart Mobile пробывал создать свой джойстик но перемещение обьекта влево и вправо не работает от нажатия кнопки на экране Подскажите как переделать скрипт или где скачать, может кто подскажет как задать перемещение объекта влево/вправо по кликанию кнопки на экране
Заранее Спасибо!!!
Сообщение отредактировал licher2008 - Среда, 21 Мая 2014, 19:13 |
|
| |
Edison6 | Дата: Среда, 21 Мая 2014, 20:01 | Сообщение # 2 |
TRUE Programmer
Сейчас нет на сайте
| Больше восклицательных знаков!!!!!!!!!!! И такая тема была уже!!!!!!11 Ищи на форуме Заранее пожалуйста!!!
Берил сбрей усы
|
|
| |
allods | Дата: Среда, 21 Мая 2014, 21:12 | Сообщение # 3 |
почти ветеран
Сейчас нет на сайте
| Что за фигня? в 3д там три оси Х Y Z в 2д X Y. В 3д джойстик дает скорость твоему объекту по X и Z а в 2д по X и Y. Просто в скрипте измени Z на Y
Сообщение отредактировал allods - Среда, 21 Мая 2014, 21:12 |
|
| |
licher2008 | Дата: Четверг, 22 Мая 2014, 12:06 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| дак скрипт не работает с обьектом rigidbody2D, хоть что там изменяй, он просит обьект CharacterController. тем более он на яве... вот скрипт тут вообще нету движения по Z, мне нужен такой же скрипт который предназначен для Rigidbody2D Код #pragma strict
@script RequireComponent( CharacterController )
// This script must be attached to a GameObject that has a CharacterController var moveTouchPad : Joystick; var jumpTouchPad : Joystick;
var forwardSpeed : float = 4; var backwardSpeed : float = 4; var jumpSpeed : float = 16; var inAirMultiplier : float = 0.25; // Limiter for ground speed while jumping
private var thisTransform : Transform; private var character : CharacterController; private var velocity : Vector3; // Used for continuing momentum while in air private var canJump = true;
function Start() { // Cache component lookup at startup instead of doing this every frame thisTransform = GetComponent( Transform ); character = GetComponent( CharacterController );
// Move the character to the correct start position in the level, if one exists var spawn = GameObject.Find( "PlayerSpawn" ); if ( spawn ) thisTransform.position = spawn.transform.position; }
function OnEndGame() { // Disable joystick when the game ends moveTouchPad.Disable(); jumpTouchPad.Disable();
// Don't allow any more control changes when the game ends this.enabled = false; }
function Update() { var movement = Vector3.zero;
// Apply movement from move joystick if ( moveTouchPad.position.x > 0 ) movement = Vector3.right * forwardSpeed * moveTouchPad.position.x; else movement = Vector3.right * backwardSpeed * moveTouchPad.position.x; // Check for jump if ( character.isGrounded ) { var jump = false; var touchPad = jumpTouchPad; if ( !touchPad.IsFingerDown() ) canJump = true; if ( canJump && touchPad.IsFingerDown() ) { jump = true; canJump = false; } if ( jump ) { // Apply the current movement to launch velocity velocity = character.velocity; velocity.y = jumpSpeed; } } else { // Apply gravity to our velocity to diminish it over time velocity.y += Physics.gravity.y * Time.deltaTime; // Adjust additional movement while in-air movement.x *= inAirMultiplier; // movement.z *= inAirMultiplier; } movement += velocity; movement += Physics.gravity; movement *= Time.deltaTime; // Actually move the character character.Move( movement ); if ( character.isGrounded ) // Remove any persistent velocity after landing velocity = Vector3.zero; }
Сообщение отредактировал licher2008 - Четверг, 22 Мая 2014, 12:11 |
|
| |
lentinant | Дата: Четверг, 22 Мая 2014, 12:12 | Сообщение # 5 |
ленивый программист
Сейчас нет на сайте
| Цитата Реализация джойстика предельно простая. Припустим, у тебя есть точка на экране, обозначающая центр джойстика - вектор padOrigin. Берем все касания к экрану, и смотрим, есть ли касание, находящееся поблизости этого вектора. Если есть, значит, джойстик нажат. В таком случае, направление геймпада - вектор, полученный вычитанием от точки касания вектора padOrigin. Передвигаем наш объект соответственно к этому вектору (для двухмерной игры со стандартной камерой, для направления можно использовать сразу этот вектор). Длину этого вектора можно использовать для контроля скорости передвижения.
Когда-то тут будут ссылки на крутые проекты. Или нет.
|
|
| |
licher2008 | Дата: Четверг, 22 Мая 2014, 15:52 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| нихрена не помог..
|
|
| |
allods | Дата: Четверг, 22 Мая 2014, 16:50 | Сообщение # 7 |
почти ветеран
Сейчас нет на сайте
| Хочется сказать "Сам напиши это не долго и просто"
|
|
| |
licher2008 | Дата: Четверг, 22 Мая 2014, 17:18 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| я не понял просто напросто что он написал, у меня стоит управление Input.GetAxis("Horizontal"); мне нада сменить эту херню на кнопки GUI.button либо на джойстик, нифига не получается(
|
|
| |
Edison6 | Дата: Четверг, 22 Мая 2014, 18:07 | Сообщение # 9 |
TRUE Programmer
Сейчас нет на сайте
| Цитата allods ( ) Хочется сказать "Сам напиши это не долго и просто" Так и нужно, а то всегда будет скрипты просить будет и не научится нечему.
Берил сбрей усы
|
|
| |
licher2008 | Дата: Четверг, 22 Мая 2014, 18:30 | Сообщение # 10 |
был не раз
Сейчас нет на сайте
| будет скрипты просить будет, и не научится нИ чему русский иди учи умник и зачем тогда этот форум если никто ни у кого не будет тут просить помощи? я не прошу целый скрипт для меня писать просто помогите изменить текущий
|
|
| |
Edison6 | Дата: Четверг, 22 Мая 2014, 20:38 | Сообщение # 11 |
TRUE Programmer
Сейчас нет на сайте
| Цитата licher2008 ( ) и зачем тогда этот форум если никто ни у кого не будет тут просить помощи? сначала на форуме поищи, такая тема уже была, тебе лень поискать
Берил сбрей усы
|
|
| |
Ranger | Дата: Четверг, 22 Мая 2014, 21:12 | Сообщение # 12 |
почти ветеран
Сейчас нет на сайте
| licher2008, lentinant тебе все правильно написал, а ты хамишь: Цитата licher2008 ( ) нихрена не помог..
и еще другому участнику, который знает и умеет много больше чем ты: Цитата licher2008 ( ) русский иди учи умник
С таким подходом тебе вообще никто помогать не будет.
p.s. в unity игры одним драгндропом не создаются
Сообщение отредактировал Ranger - Четверг, 22 Мая 2014, 21:13 |
|
| |
lentinant | Дата: Пятница, 23 Мая 2014, 12:31 | Сообщение # 13 |
ленивый программист
Сейчас нет на сайте
| Цитата licher2008 ( ) нихрена не помог.. Дело в том, что мне проще расписать все с нуля, чем переделывать чей-то чужой скрипт. Я кратко описал, как обычно реализован джойстик, без всяких CharacterController.
Добавлено (23.05.2014, 12:31) --------------------------------------------- Окей, если самому вникать лень, попробую разжевать за тебя.
Что такое джойстик? Это элемент управления, позволяющий выбирать направление, и, в некоторых случаях, некий параметр, например, скорость. Обычно представляет собой два кружка: первый - это непосредственно область джойстика (так и буду называть дальше), второй - фигнюшка, которую мы отклоняем (дальше буду называть непосредственно джойстик). Реализация джойстика - это, по сути, реализация отслеживания отклонения джойстика от центра области джойстика. Если джойстик в центре области джойстика, значит, направление нулевое, и скорость тоже нулевая.
Это было вступление. Теперь непосредственно то, что я сказал выше. Мы рисуем на интерфейсе две текстуры в виде кружков, представляющих область джойстика и сам джойстик. Параметры Rect этих текстур не важны, главное, чтобы изначально их центры совпадали. Припустим, центр области находится в векторе origin, а центр джойстика - в векторе pos (изначально равном вектору origin). Также важно знать радиус области джойстика, припустим, R. Для справки, текстура на интерфейсе рисуется методом GUI.DrawTexture. Радиусом круга можно считать половину стороны текстуры (если она квадратная, и круг ровно в нее вписан).
Теперь непосредственно механика джойстика. Я не буду расписывать сложный вариант, когда нужно нажать непосредственно на джойстик, и уже тогда двигать его в сторону, обойдусь вариантом, когда джойстик просто будет передвигаться к позиции прикосновения к экрану.
Итак, информация о всех прикосновениях к экрану хранится в массиве Input.touches, каждое прикосновение имеет тип Touch. В этом типе есть вектор position, показывающий, где конкретно на экране это касание. Нам надо пересмотреть все касания к экрану с помощью итератора foreach, и проверить, нету ли среди них такого, которое находится в области джойстика, то есть, расстояние между ним и origin будет меньше R. Расстояние можно измерить с помощью метода Vector2.Distance. Если касание внутри области, то мы передвигаем текстуру джойстика таким образом, чтобы ее центр pos совпадал с position касания. Теперь, получается, что направление, в котором мы отклонили джойстик - это вектор Код Vector2 direction = origin - pos Чтобы переместить игровой объект соответственно до этого направления, нам достаточно использовать Код transform.Translate (direction) или, в случае с rigidbody2d, Код rigidbody2d.velocity = direction
Само собой, нам надо сделать так, что, если ни одно касание не находится в области геймпада, то вектору pos надо опять вернуть значение origin, а текстуре джойстика - соответственные координаты.
Я расписал все до самых основ. Для того, чтобы реализовать все это, тебе понадобятся базовые знания математики, английского языка и программирования. Если это тебе не поможет, то, боюсь, лично я тебе точно никак не смогу помочь - моя помощь бесполезна тем, кто не хочет учиться.
Когда-то тут будут ссылки на крутые проекты. Или нет.
Сообщение отредактировал lentinant - Пятница, 23 Мая 2014, 12:34 |
|
| |
licher2008 | Дата: Суббота, 24 Мая 2014, 11:54 | Сообщение # 14 |
был не раз
Сейчас нет на сайте
| теперь помог, спасибо!
|
|
| |
|