Управление космическим кораблем
|
|
sinoptis | Дата: Воскресенье, 13 Мая 2012, 17:22 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Здравствуйте, как в Unity можно реализовать управление космическим кораблем? Пока что у меня такая схема: на камере висит скрипт который раегирует на движения мыши и поварачывает камеру и приаттаченую к нему пустышку , а корабль просто летит и поварачивет за этой пустышкой. Так вот хотелось бы услышать ваши предложения по схеме управления.
|
|
| |
SnakeR | Дата: Воскресенье, 13 Мая 2012, 17:29 | Сообщение # 2 |
постоянный участник
Сейчас нет на сайте
| sinoptis, поиграй в Freelancer, серию Х, вот и поймешь как лучше сделать управление. Или ты спрашиваешь как реализовывать кодом?
Unity3D Developer Ваш лучший помощник при разработке в Unity3D
|
|
| |
sinoptis | Дата: Воскресенье, 13 Мая 2012, 17:41 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Кодом набросайте хоть каркас , если не трудно А то у меня получается он как то нелепо поварачивает и бывает почему то начинает кружиться вокруг оси
Сообщение отредактировал sinoptis - Воскресенье, 13 Мая 2012, 17:44 |
|
| |
SnakeR | Дата: Воскресенье, 13 Мая 2012, 17:52 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| sinoptis, ну для начала хотя бы покажи свой код. И примерно что ты хочешь? Какие кнопки, какие действия. Попробуй сам продумать алгоритм работы управления.
Unity3D Developer Ваш лучший помощник при разработке в Unity3D
|
|
| |
sinoptis | Дата: Воскресенье, 13 Мая 2012, 17:58 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Управление как в игре "Призраки Звезд Хроники Тарр" посмотрите видео , поймете. Кстати как в C# получить модуль числа?
Сообщение отредактировал sinoptis - Воскресенье, 13 Мая 2012, 18:01 |
|
| |
SnakeR | Дата: Воскресенье, 13 Мая 2012, 18:31 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Mathf.Round(10.7F) - будет значение типа int = 11. sinoptis, сделать такое управление не сложно) Пробуй писать код сам, задавай вопросы тогда, когда что то не получается у тебя долгое время. Если я напишу тебе код, то ты ничему не научишься сам)
Unity3D Developer Ваш лучший помощник при разработке в Unity3D
|
|
| |
sinoptis | Дата: Воскресенье, 13 Мая 2012, 18:53 | Сообщение # 7 |
почетный гость
Сейчас нет на сайте
| Вот скрипт камеры Code using UnityEngine; using System.Collections;
public class CameraController : MonoBehaviour { //Переменные *************************************************** public float horizontalSpeed = 2.0F; public float verticalSpeed = 2.0F; public float speed = 1f; private Transform myTransform; //************************************************************** void Start(){ myTransform = transform; // оптимизация Screen.showCursor = false; //убрать курсор } void Update() { float h = horizontalSpeed * Input.GetAxis("Mouse X"); float v = verticalSpeed * Input.GetAxis("Mouse Y"); myTransform.Rotate(v, h, 0);
} } а вот самого корабля Code using UnityEngine; using System.Collections;
public class ShipController : MonoBehaviour { //пременные*************************************** public Transform target;//цель public int moveSpeed; //скорость перемещения public int rotationSpeed; //скорость поворота public float rot = 1.0f; private Transform myTransform ;//временная переменная для хранения ссылки //на свойство transform (это оптимизация) //************************************************ void Awake (){ //ссылаемся на свойство transform для того чтобы сократить время //обращения к нему в скрипте myTransform = transform; }
// начальная инициализация void Start () { //ищем обьект по тегу Player GameObject go = GameObject.FindGameObjectWithTag("aim"); //и делаем его целью target = go.transform; } // Update is called once per frame void Update () { //чертим вспомогательную линию от нас к игроку Debug.DrawLine(target.position, myTransform.position, Color.yellow); //поворачивемся в сторону игрока myTransform.rotation = Quaternion.Slerp(myTransform.rotation, Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed * Time.deltaTime); //усли позволяет дистанция двигаемся к игроку if(moveSpeed >0){ //двигаемся к цели myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime; rot = -5*Input.GetAxis("Mouse X"); myTransform.Rotate(0,0,rot); } } } target это кубик приаттаченый к камере стоящый перед кораблем
Помогите что и где нужно исправить или переписатьДобавлено (13.05.2012, 18:53) --------------------------------------------- получилось но толбко как сделать что бы камера не летела за ним как вкопанная? Сейчас она у меня вращается вместе с кораблем
|
|
| |
SnakeR | Дата: Воскресенье, 13 Мая 2012, 19:19 | Сообщение # 8 |
постоянный участник
Сейчас нет на сайте
| Не понял конечно зачем в скрипте корабля(которым как бы управляет игрок) ты его же и ищешь.. Как бы сделал я. Во первых двигать корабль не через транслейт а через силы. Движение транслейтом игнорит коллайдеры, т.е. столкновений не будет (разве что их вручную писать). Поэтому лучше двигать и вращать его через добавление сил - Rigidbody.AddForce Rigidbody.AddTorque для вращения. Тебе лишь нужно заставить при нажатии кнопок лететь вперед/назад и вбок (стрейф). Так же на отдельный кнопки повесить вращение вокруг продольной и поперечной оси. Так ты получишь полный контроль. Используя силы добьешься большего реализма. Во вторых, на камеру вешай стандартный скрипт Smooth Follow и она будет летать за кораблем.
Unity3D Developer Ваш лучший помощник при разработке в Unity3D
|
|
| |
sinoptis | Дата: Понедельник, 14 Мая 2012, 21:24 | Сообщение # 9 |
почетный гость
Сейчас нет на сайте
| Спасибо. Сейчас попробую
Добавлено (14.05.2012, 14:10) --------------------------------------------- Но хотелось бы что бы всётаки управление было мышкой
Добавлено (14.05.2012, 15:29) --------------------------------------------- если делать силами то если зажать кнопку он начинает разгоняться и крутиться постоянно
Добавлено (14.05.2012, 18:38) --------------------------------------------- В хроники тарр он будто за курсором двигается
Добавлено (14.05.2012, 21:24) --------------------------------------------- Вот сделал демку, удобно ли будет играть с таким управлением? Сейчас конечно еще ничего не отрегулированно Управление: R - увеличить скорость F - Уменьшить скорость Web Player Demo
Сообщение отредактировал sinoptis - Понедельник, 14 Мая 2012, 23:50 |
|
| |
Поварёнок | Дата: Понедельник, 14 Мая 2012, 21:48 | Сообщение # 10 |
участник
Сейчас нет на сайте
| Во первых камеру лучше подальше сделать, а то корабль постоянно из кадра выходит. Во вторых, было бы удобнее если бы при движении мышки в право, корабль бы поворачивал на право, а то наоборот не удобно. В третьих, плавнее надо сделать. И будет хорошо.
Прикольно. А космос ты скайбоксом сделал?
Вы можете ненавидеть меня за мою критику, но именно она заставлят вас быть лучше!!
|
|
| |
sinoptis | Дата: Понедельник, 14 Мая 2012, 23:36 | Сообщение # 11 |
почетный гость
Сейчас нет на сайте
| Поварёнок, Спасибо, да космос это скайбок( из одной картинки). А с камерой нужно поэксперементировать настроить растояне максимальный поворот плавность , а то она дёргается при повороте. Кстати почему у вас наоборот? Когда я запускаю у меня всё нормально, поворачиваю мышку влево и корабль влево ну и соответственно вправо. Скрипт конечно нужно еще дорабатывать .
Сообщение отредактировал sinoptis - Понедельник, 14 Мая 2012, 23:37 |
|
| |
MyACT | Дата: Вторник, 15 Мая 2012, 16:07 | Сообщение # 12 |
C# CODERS
Сейчас нет на сайте
| sinoptis, очень неудобное управление,убери управление мышью совсем,оно вообще мешает!А сделай на кнопках,только чтобы повернуть вправо или влево при помощи мыши.
3дэшечки: https://sketchfab.com/myactyindie Курентли воркс он: https://myacty.itch.io/raskopnik
|
|
| |
sinoptis | Дата: Вторник, 15 Мая 2012, 16:34 | Сообщение # 13 |
почетный гость
Сейчас нет на сайте
| MyACT, Мне кажется так намного удобнее будет стрелять, а то пока кнопками подрулишь противник тебя уже убьёт
|
|
| |
MyACT | Дата: Вторник, 15 Мая 2012, 16:48 | Сообщение # 14 |
C# CODERS
Сейчас нет на сайте
| Да почему...........Если нормально настроить то и так нормально будет,на пробел стрелять и быстро на кнопках поворачиваться
3дэшечки: https://sketchfab.com/myactyindie Курентли воркс он: https://myacty.itch.io/raskopnik
|
|
| |
sinoptis | Дата: Вторник, 15 Мая 2012, 16:55 | Сообщение # 15 |
почетный гость
Сейчас нет на сайте
| я хотел сделатть управление как в Этом видео или как в игре хроники тарр. Посмотри видюхи Добавлено (15.05.2012, 16:55) --------------------------------------------- Посоветуйте как сделть такое управление а то правда так как у меня не удобно
|
|
| |
SnakeR | Дата: Вторник, 15 Мая 2012, 17:16 | Сообщение # 16 |
постоянный участник
Сейчас нет на сайте
| sinoptis, вот и попроьуй сделать как в фрилансере )) там самое удобное управление)
Unity3D Developer Ваш лучший помощник при разработке в Unity3D
|
|
| |
sinoptis | Дата: Вторник, 15 Мая 2012, 17:18 | Сообщение # 17 |
почетный гость
Сейчас нет на сайте
| Я еще пока не силен в скриптах. Как привязать обьект или текстуру к мыши?
|
|
| |
SnakeR | Дата: Вторник, 15 Мая 2012, 17:40 | Сообщение # 18 |
постоянный участник
Сейчас нет на сайте
| sinoptis, что значит привязать? что именно тебе нужно?
Unity3D Developer Ваш лучший помощник при разработке в Unity3D
|
|
| |
sinoptis | Дата: Вторник, 15 Мая 2012, 22:01 | Сообщение # 19 |
почетный гость
Сейчас нет на сайте
| Я хочу к курсору привязать прицел( т.е. чтобы прицел имел теже координаты что и курсор), а потом поворачивать корабль за прицелом Добавлено (15.05.2012, 22:01) --------------------------------------------- Так как это осуществить? Через Event.mousePosition не получается
|
|
| |
SnakeR | Дата: Вторник, 15 Мая 2012, 22:44 | Сообщение # 20 |
постоянный участник
Сейчас нет на сайте
| sinoptis, с прицелом 2 варианта: Первый вариант коротко говоря, курсор всегда в центре экрана, но его не видно. Второй вариант скрываешь сам курсор, в его координатах рисуешь прицел, сам курсор можно двигать. Насчет движения, можно например вращая камеру мышью, узнавать угол между осью Z камеры и той же осью корабля, и с необходимой скоростью доводить его до нуля поворачивая корабль. Много способов есть, и не все они просты в реализации)
Unity3D Developer Ваш лучший помощник при разработке в Unity3D
|
|
| |