Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 08.07.2018, 20:44   #1
Ivan2228
Новичок
 
Регистрация: 08.07.2018
Сообщений: 1
Репутация: 10
По умолчанию Действия с выделенными объектами. Их передвижение Unity3D

Здравствуйте. Есть такая проблемка - на сцене есть несколько объектов, и есть у каждой вот такой скрипт, который их перемещает по нажатиям wasd ( скрипт кривой, знаю сам ).
Код:

using UnityEngine;
 
public class move : MonoBehaviour
{
    private float V = 0;
    private float VV = 0.1f;
    private float posX, posY, posZ;
 
 
    void Update()
    {
        //если прижата клавиша P
        if (Input.GetKeyDown(KeyCode.D))
        {
            //Вызываем функцию TransformerKeyDown
            TransformerKeyDownD();
        }
        //если клавишу отжали
        if (Input.GetKeyUp(KeyCode.D))
        {
            //Вызываем функцию TransformerKeyUp();
            TransformerKeyUpD();
        }
 
 
        if (Input.GetKeyDown(KeyCode.A))
        {
            //Вызываем функцию TransformerKeyDown
            TransformerKeyDownA();
        }
        //если клавишу отжали
        if (Input.GetKeyUp(KeyCode.A))
        {
            //Вызываем функцию TransformerKeyUp();
            TransformerKeyUpA();
        }
 
 
        if (Input.GetKeyDown(KeyCode.W))
        {
            //Вызываем функцию TransformerKeyDown
            TransformerKeyDownW();
        }
        //если клавишу отжали
        if (Input.GetKeyUp(KeyCode.W))
        {
            //Вызываем функцию TransformerKeyUp();
            TransformerKeyUpW();
        }
 
 
        if (Input.GetKeyDown(KeyCode.S))
        {
            //Вызываем функцию TransformerKeyDown
            TransformerKeyDownS();
        }
        //если клавишу отжали
        if (Input.GetKeyUp(KeyCode.S))
        {
            //Вызываем функцию TransformerKeyUp();
            TransformerKeyUpS();
        }
 
        if (Input.GetKeyDown(KeyCode.LeftShift))
        {
            //Вызываем функцию TransformerKeyDown
            TransformerKeyDownLeftShift();
        }
        //если клавишу отжали
        if (Input.GetKeyUp(KeyCode.LeftShift))
        {
            //Вызываем функцию TransformerKeyUp();
            TransformerKeyUpLeftShift();
        }
 
        if (Input.GetKeyDown(KeyCode.LeftControl))
        {
            //Вызываем функцию TransformerKeyDown
            TransformerKeyDownLeftControl();
        }
        //если клавишу отжали
        if (Input.GetKeyUp(KeyCode.LeftControl))
        {
            //Вызываем функцию TransformerKeyUp();
            TransformerKeyUpLeftControl();
        }
 
    }
 
 
 
    void TransformerKeyDownD()
    {
        //записываем текущие координаты в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        if (posX <= 53)
        {
            //перемещаем в новые координаты
            transform.position = new Vector3(posX + 28, posY, posZ);
        }
    }
    void TransformerKeyUpD()
    {
        //перемещаем в координаты записаны в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        transform.position = new Vector3(posX, posY, posZ);
    }
 
    void TransformerKeyDownA()
    {
        //записываем текущие координаты в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        if (posX >= -53)
        {
            //перемещаем в новые координаты
            transform.position = new Vector3(posX - 28, posY, posZ);
        }
    }
    void TransformerKeyUpA()
    {
        //перемещаем в координаты записаны в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        transform.position = new Vector3(posX, posY, posZ);
    }
 
 
    void TransformerKeyDownW()
    {
        //записываем текущие координаты в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        if (posZ <= 139)
        {
            //перемещаем в новые координаты
            transform.position = new Vector3(posX, posY, posZ + 28);
        }
    }
    void TransformerKeyUpW()
    {
        //перемещаем в координаты записаны в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        transform.position = new Vector3(posX, posY, posZ);
    }
 
 
    void TransformerKeyDownS()
    {
        //записываем текущие координаты в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        if (posZ >= -27)
        {
            //перемещаем в новые координаты
            transform.position = new Vector3(posX, posY, posZ - 28);
        }
    }
    void TransformerKeyUpS()
    {
        //перемещаем в координаты записаны в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        transform.position = new Vector3(posX, posY, posZ);
    }
 
 
    void TransformerKeyDownLeftShift()
    {
        //записываем текущие координаты в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        //перемещаем в новые координаты
        transform.position = new Vector3(posX, posY + 7, posZ);
    }
    void TransformerKeyUpLeftShift()
    {
        //перемещаем в координаты записаны в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        transform.position = new Vector3(posX, posY, posZ);
    }
 
 
    void TransformerKeyDownLeftControl()
    {
        //записываем текущие координаты в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        V = posY;
        if (V >= VV) {
            //перемещаем в новые координаты
            transform.position = new Vector3(posX, posY - 7, posZ); }
    }
    void TransformerKeyUpLeftControl()
    {
        //перемещаем в координаты записаны в переменные
        posX = transform.position.x;
        posY = transform.position.y;
        posZ = transform.position.z;
        transform.position = new Vector3(posX, posY, posZ);
    }
}

В итоге, при нажатии на WASD двигаются все. Как в Юнити сделать так, чтобы можно было мышкой выбрать объект какой именно перемещать, и чтобы перемещение работало только с ним. Заранее благодарен.
Ivan2228 вне форума   Ответить с цитированием
Старый 09.07.2018, 12:38   #2
ACE Valery
С++ admirer
СуперМодератор
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Адрес: Украина
Сообщений: 3,135
Репутация: 2955
По умолчанию

Например, написать какой-нибудь контроллер, куда будет записываться текущий выделенный объект и двигать его будет именно контроллер.

Я вообще не сторонник вешать подобные скрипты на объекты - в результате можно себе не только ногу прострелить, а и мозг вынести.
__________________
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума   Ответить с цитированием
Старый 09.07.2018, 13:01   #3
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,405
Репутация: 3353

icq: 512-765
skype: alexp.frl
По умолчанию

Если по-быстрому доделать то, что есть, то можно добавить флаг типа isSelected и проверять его:
Код:

    void Update()
    {
        if (!isSelected)
             return;

Ну и при клике (см. Raycast, Camera) или где там вам надо устанавливать/убирать у нужных объектов.
Alex11223 на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скриптинг Unity3D СаняПрограммист C# (си шарп) 7 26.11.2017 10:57
C#, Unity3D Developer (Киев) Ksanamadness Работа на постоянной основе - Вакансии 0 06.08.2013 18:32
Нужен Unity3D программист. MaratZahidyl Фриланс 1 10.12.2011 18:16


20:33.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru