смена оружия

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

смена оружия

Сообщение Sagikk 30 июн 2018, 20:23

Сразу говорю, я делаю 2D проект, поэтому задача упрощается. Допустим у нас есть 3 "ячейки" для разных типов вооружения (например: пистолет, автомат, ракетница). Я сделал все эти оружия и сделал их префабами. В общем по карте "разбросаны" спрайты оружий с коллайдерами-триггерами, и когда игрок подходит, появляется кнопочка, мол возьмите (ну или замените если данный тип оружия уже есть). Вот все что я объяснил я знаю как сделать(это для того чтобы было понятно о чем речь). Мне нужно чтобы при нажатии оружие появлялось у игрока как его дочерний объект, а также возможность переключаться между ними (если допустим нету автомата то игрок может переключаться только между ракетницей и пистолетом, пока он не найдет автомат). То есть что бы при нажатии определенной клавиши префаб появлялся как дочерний объект и сохранялся когда игрок находит или переключается на другой вид вооружения.
Sagikk
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2018, 09:44

Re: смена оружия

Сообщение v319 02 июл 2018, 01:40

Окей, то есть для решения задачи нам надо знать три вещи

01) Что следует дать игроку (какой именно префаб)
02) Куда следует его надеть( не на голову же)
03) Откуда следует его брать

Решаем не по очереди

02) Куда?
В руку. Создайте у вашего персонажа в руке пустой объект. Он будет так называемым holder"ом, т.е местом-пустышкой, куда попадёт оружие. Задача усложняется, конечно, если для разного типа оружия есть разная анимация стрельбы или держания оружия, но суть примерно понятна: вам необходимо сделать объект, который будет указывать, куда следует поместить новоиспеченный ствол
03) Каждое оружие должно быть префабом само по себе. Естественно, содержать скрипт стрельбы с нужными настройками. Именно его, этот префаб оружия, мы и будем инстанциировать на месте нашей пустышки
01) Ну тут и так понятно: префаб "вещь" должен иметь информацию о том, какую вещь (для пунка 2) следует добавить игроку.

Итого получаем примерно такой скрипт:

Синтаксис:
Используется csharp
public GameObject RightArmHolder; // Пункт 2

private void Equip(string holderName, string nameOfPrefab, BaseItem itemToEquip)
    {
        //Looking for holder from item
        GameObject holder = null;
        switch (itemToEquip.ItemType) // Код из моего старого проекта. В зависимости от типа оружия мог быть выбран другой holder
        {
            case ItemType.Weapon:
                holder = RightArmHolder;
                break;
        }

        if (holder == null)
        {
            Debugger.Write(string.Format("Cannot find holder {0}", holderName), LogInfoType.Error);
            return;
        }

//Удалить оружие, если холдер его уже содержит
        if (holder.transform.childCount != 0)
        {
            var children = (from Transform child in holder.transform select child.gameObject).ToList();
            children.ForEach(Destroy);
        }

//Достаём префаб оружия
        var prefab = Resources.GetResource(nameOfPrefab, itemToEquip.ItemType); // В моем случае, информация бралась из  Resources.LoadAll<GameObject>("Weapons");
        if (prefab == null)
        {
            Debug.Log(string.Format("Cannot find prefab {0}", nameOfPrefab));
            return;
        }

/*
public static GameObject InstanciateAndSetChild(GameObject prefab, Transform holder, Quaternion rotation)
        {
            var item = Object.Instantiate(prefab, holder.transform.position, Quaternion.Euler(0, 0, 0), holder.transform);
            item.transform.localPosition = prefab.transform.position;
            item.transform.rotation = rotation;
//            item.transform.Rotate(0, 180, 0);
            return item;
        }
*/

        var item = UnityHelper.InstanciateAndSetChild(prefab, holder.transform, Resources.Player.Player.transform.rotation);

        var isSuccess = false;
        if (itemToEquip.SlotType == InventorySlots.RightArm)
        {
}

    }
 


Скрипт Resource
Аватара пользователя
v319
UNIт
 
Сообщения: 88
Зарегистрирован: 10 мар 2014, 20:48

Re: смена оружия

Сообщение Sagikk 02 июл 2018, 16:02

Спасибо большое
Sagikk
UNец
 
Сообщения: 10
Зарегистрирован: 11 июн 2018, 09:44


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 32