Пятница, 29 Марта 2024, 15:36

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Перетаскивание объекта мышью (Помогите со скриптом)
Перетаскивание объекта мышью
ЧачДата: Вторник, 05 Мая 2015, 16:00 | Сообщение # 1
был не раз
Сейчас нет на сайте
Хочу сделать перетаскивание объекта мышью, что бы сделать хоть какой то прототип геймплея.

Типа того:


Проблема в том что я совсем, совсем не программист
Посмотрел форумы нахватал скриптов и они конечно же не работают без допиливания:

http://s1.uploadpics.ru/images/byJoKRhSJl.jpg

Вот скажем вроде перспективный скрипт но чего же, он не хочет вставаться.
Код
public var posX : float;  
  //public var posY : float;  
  public var posZ : float;  
  public var mousePos : Vector3;  

  function Update(){  
   posX = transform.position.x;  
   //posY = transform.position.y;  
   posZ = transform.position.z;  
   var e : Event = Event.current;  
  }  

  function OnMouseDrag(){  
   mousePos = Camera.main.ScreenToViewportPoint(Input.mousePosition);  
   transform.position = new Vector3(mousePos.x, transform.position.y, transform.position.z);  
  }


Хотя может он не на C# а на Java хз.

Или вот отлично все расписано и разжевано, но у меня снова не работает.

Код
using UnityEngine;
using System.Collections;
using System;
using System.Text.RegularExpressions;

//этот скрипт вешаем на непосредственно на камеру

public class MovementObjects : MonoBehaviour
{
     public int ID;
     public int layerObj;
     public bool memoryLayer;
     public float yObj;
     public string nameIgnore;

     public float hitPoint;

     RaycastHit hit;
     Ray ray;

     public GameObject obj;

     void Start()
     {
         memoryLayer = true;
     }

     void Update()
     {
         Motionobject();
     }

     //проверка перетаскиваемых объектов осуществляется по ID в имени объекта
     void Motionobject()
     {
         //проверяем нажатие кнопки мышки
         if (Input.GetMouseButtonDown(0))
         {
             //задаем направление луча
             ray = Camera.main.ScreenPointToRay(Input.mousePosition);

             //пускаем луч бесконечной длинны и если попали куда то, то
             if (Physics.Raycast(ray, out hit))
             {
                 //проверяем есть ли в имени десятичные цифры
                 var reg = @"[0-9]+";

                 //получаем имя того во что попал райкаст и убираем у него приставку ID
                 nameIgnore = hit.collider.gameObject.name.Replace("ID", "");

                 Debug.Log("Regex.IsMatch(nameIgnore, reg) = " + Regex.IsMatch(nameIgnore, reg));

                 if (Regex.IsMatch(nameIgnore, reg))
                 {
                     //Debug.Log("hit.collider.name = " + nameIgnore);

                     //и конвектируем в числовое значение
                     ID = Convert.ToInt32(nameIgnore);

                     if (ID != 1)
                     {
                         //запоминаем во что попали лучем, для дальнейшей работы с этим ГО
                         obj = hit.collider.gameObject;
                         Debug.Log("1");
                     }
                 }
             }
         }

         //тут мы и будем перемещать наш ГО
         if (obj != null)
         {
             Ray();

             //ставим флаг что уже запомнили слой
             if (memoryLayer)
             {
                 //запоминаем слой ГО
                 layerObj = obj.layer;
                 memoryLayer = false;
             }

             //делаем ГО проницаемым для луча, что бы перемещать его в точку падения луча на терейне
             obj.layer = 2;
             //Debug.Log("hit.point = " + hit.point);

             //присваиваем их объекту на который попал луч
             //перемещаем соответственно только по горизонтальным плоскостям,
             //new Vector3(0, 0.5f, 0); приподнимаем ГО что бы он не сидел в текстурах
             //если подставить за место hit.distance например 10, то ГО будет двигаться на растоянии 10
             obj.transform.position = ray.GetPoint(hit.distance) + new Vector3(0, 0.5f, 0);
         }

         //если кнопка была отжата то перестаем работать с ГО и обнуляем переменную, возвращаем слой обратно какой был
         if (Input.GetMouseButtonUp(0))
         {
             if (obj != null)
             {
                 obj.layer = layerObj;
                 memoryLayer = true;
                 obj = null;
             }
         }
     }

     void Ray()
     {
         ray = Camera.main.ScreenPointToRay(Input.mousePosition);
         Physics.Raycast(ray, out hit);
     }
}
  


Наверное вопрос детский, но прошу помочь кто чем сможет.
berilДата: Вторник, 05 Мая 2015, 18:13 | Сообщение # 2
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Это UI? Если да то там все намного проще. Ну а переписывать код врят ли кто то захочет Если бы ты кинул исходник со своим проектом, может и можно что то сделать



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
RangerДата: Вторник, 05 Мая 2015, 19:35 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
На объект повесь ловлю события OnDrag и не мучайся.
http://docs.unity3d.com/Manual/SupportedEvents.html


ЧачДата: Среда, 06 Мая 2015, 10:34 | Сообщение # 4
был не раз
Сейчас нет на сайте
Цитата beril ()
Это UI? Если да то там все намного проще. Ну а переписывать код врят ли кто то захочет Если бы ты кинул исходник со своим проектом, может и можно что то сделать

Не совсем, по задумке это как бы "поле боя". Просто думал прототип сделать для будущего напарника программиста что бы заинтересовать.
Если у тебя есть желание помочь то вот проект, но в нём нет ничего в общем то, 2 картинки.
https://yadi.sk/d/zBBG23AFgTFji

Цитата Ranger ()
На объект повесь ловлю события OnDrag и не мучайся.
http://docs.unity3d.com/Manual/SupportedEvents.html

Спасибо, но и это для меня сложновато, я просто не понимаю как эту "переменную" использовать на что накидывать и как расписывать скрипт.

RangerДата: Среда, 06 Мая 2015, 12:30 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Код
public class DragCatcher : MonoBehaviour {

       // Use this for initialization
       void Start () {
             
       }
             
       // Update is called once per frame
       void Update () {
             
       }

       public void CatchTheDrag(BaseEventData _data){
        Debug.Log(Input.mousePosition.x.ToString()+"/"+Input.mousePosition.y.ToString());
             
       }
}


Скрипт на мячике.
Преобразование из экранных координат в мировые думаю осилишь сам.




Сообщение отредактировал Ranger - Среда, 06 Мая 2015, 12:38
Pashock_RazorДата: Четверг, 07 Мая 2015, 13:04 | Сообщение # 6
был не раз
Сейчас нет на сайте
Я так понял автору нужно сделать обычный инвентарь как здесь
В таком случае нужно писать скрипт, забивать в переменные каждую ячейку, присваивать ей статус (свободна/занята), назначать тип объектов которые можно в нее положить...
Проверять, если объект изъят из ячейки отнимать возможность положить в занятую ячейку, дабы избавится от дропа и исчезновения предмета, рисовать все это можно через GUI.
Если делать все грамотно взаимодействие с инвентарем будет гибкое. Я могу дать тебе код, который ты не поймешь, и он будет лежать на твоем винте.
Ваша проблема заключается не в том, что вы не знаете языков, а в том что не пытаетесь их изучать. В гугле есть много разных примеров, но ни один вам не подойдет, потому-что
у вас своя фантазия, вы же хотите сделать уникальный проект? Копипаст никому не нравится, у вас много идей в голове которые вы постоянно прокручиваете,
но вы не можете их реализовать пока не займетесь изучением языка программирования.

P.s. : Когда речь идет о помощи человеку, в этом нет ничего плохого. В данном случае нужно писать скрипт за него...это не упрек, я не тот человек который будет других в чем-то упрекать, умываю руки.
Это правильный этап действий который приведет к цели, мой, если хотите, совет автору темы.
P.p.s Первым делом чем я занялся перейдя на Unity3D, засел за изучением языков, через месяц уже свободно программировал.
RangerДата: Четверг, 07 Мая 2015, 19:07 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата Pashock_Razor ()
засел за изучением языков

Русский язык пропустил biggrin biggrin biggrin


Pashock_RazorДата: Пятница, 08 Мая 2015, 00:37 | Сообщение # 8
был не раз
Сейчас нет на сайте
Ranger, поясни
ЧачДата: Пятница, 08 Мая 2015, 10:07 | Сообщение # 9
был не раз
Сейчас нет на сайте
Цитата Ranger ()

Скрипт на мячике.
Преобразование из экранных координат в мировые думаю осилишь сам.

Спасибо за помощь. Но да. Я безнадёжен. Наверное лучше всего сделать видео геймплея и с его помощью искать программиста. Чем пытаться всё самому сделать.

Цитата Pashock_Razor ()
Я так понял автору нужно сделать обычный инвентарь как здесь
В таком случае нужно писать скрипт, забивать в переменные каждую ячейку, присваивать ей статус (свободна/занята), назначать тип объектов которые можно в нее положить...
Проверять, если объект изъят из ячейки отнимать возможность положить в занятую ячейку, дабы избавится от дропа и исчезновения предмета, рисовать все это можно через GUI.
Если делать все грамотно взаимодействие с инвентарем будет гибкое. Я могу дать тебе код, который ты не поймешь, и он будет лежать на твоем винте.
Ваша проблема заключается не в том, что вы не знаете языков, а в том что не пытаетесь их изучать. В гугле есть много разных примеров, но ни один вам не подойдет, потому-что
у вас своя фантазия, вы же хотите сделать уникальный проект? Копипаст никому не нравится, у вас много идей в голове которые вы постоянно прокручиваете,
но вы не можете их реализовать пока не займетесь изучением языка программирования.

P.s. : Когда речь идет о помощи человеку, в этом нет ничего плохого. В данном случае нужно писать скрипт за него...это не упрек, я не тот человек который будет других в чем-то упрекать, умываю руки.
Это правильный этап действий который приведет к цели, мой, если хотите, совет автору темы.
P.p.s Первым делом чем я занялся перейдя на Unity3D, засел за изучением языков, через месяц уже свободно программировал.

Возможно ты прав, надо изучать программирование с азов, но боюсь что уйдет на это несколько лет, не представляю сколько.
MANMANAДата: Пятница, 08 Мая 2015, 10:19 | Сообщение # 10
почти ветеран
Сейчас нет на сайте
Цитата Чач ()
боюсь что уйдет на это несколько лет, не представляю сколько.

А не умея читать, писать, рисовать, показывать и говорить, можно книгу написать? smile

Азы необходимы, без них не будет игр.
Не долго их учить, азы эти. Есть учебники для школьников, бабушек, дедушек, чайников. Там все отлично изложено. Сам так делал)


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею


Сообщение отредактировал MANMANA - Пятница, 08 Мая 2015, 11:09
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Перетаскивание объекта мышью (Помогите со скриптом)
  • Страница 1 из 1
  • 1
Поиск:

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