Суббота, 10 Декабря 2022, 01:27

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Управление космическим кораблем
Управление космическим кораблем
sinoptisДата: Воскресенье, 13 Мая 2012, 17:22 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Здравствуйте, как в Unity можно реализовать управление космическим кораблем? Пока что у меня такая схема: на камере висит скрипт который раегирует на движения мыши и поварачывает камеру и приаттаченую к нему пустышку , а корабль просто летит и поварачивет за этой пустышкой. Так вот хотелось бы услышать ваши предложения по схеме управления.
SnakeRДата: Воскресенье, 13 Мая 2012, 17:29 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
sinoptis, поиграй в Freelancer, серию Х, вот и поймешь как лучше сделать управление.
Или ты спрашиваешь как реализовывать кодом?


Unity3D Developer
Ваш лучший помощник при разработке в Unity3D
sinoptisДата: Воскресенье, 13 Мая 2012, 17:41 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Кодом smile набросайте хоть каркас , если не трудно biggrin
А то у меня получается он как то нелепо поварачивает и бывает почему то начинает кружиться вокруг оси


Сообщение отредактировал 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)
---------------------------------------------
biggrin biggrin biggrin получилось но толбко как сделать что бы камера не летела за ним как вкопанная? Сейчас она у меня вращается вместе с кораблем

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, очень неудобное управление,убери управление мышью совсем,оно вообще мешает!А сделай на кнопках,только чтобы повернуть вправо или влево при помощи мыши. smile

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
почетный гость
Сейчас нет на сайте
Я еще пока не силен в скриптах. happy Как привязать обьект или текстуру к мыши?
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
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Управление космическим кораблем
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2022 Рейтинг