Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > 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,078
Репутация: 2872
По умолчанию

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

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

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


23:57.


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

RusProfile.ru


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