Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2018, 19:44   #1
Ivan2228
Новичок
Джуниор
 
Регистрация: 08.07.2018
Сообщений: 1
По умолчанию Действия с выделенными объектами. Их передвижение 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, 11:38   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

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

Я вообще не сторонник вешать подобные скрипты на объекты - в результате можно себе не только ногу прострелить, а и мозг вынести.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 09.07.2018, 12:01   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Если по-быстрому доделать то, что есть, то можно добавить флаг типа isSelected и проверять его:
Код:
    void Update()
    {
        if (!isSelected)
             return;
Ну и при клике (см. Raycast, Camera) или где там вам надо устанавливать/убирать у нужных объектов.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скриптинг Unity3D СаняПрограммист C# (си шарп) 7 26.11.2017 09:57
Нужен Unity3D программист. MaratZahidyl Фриланс 1 10.12.2011 18:16