Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Проблема с клонированием или копированием объекта(префаба) в юнити

Вова Денисов Ученик (195), на голосовании 7 месяцев назад
у меня есть инвентарь быстрого доступа и я могу выбирать в нём слоты. Если слот не пустой и он выделенный, то копируется префаб со слота в руку. Проблема в том, что предметы создаются хрен пойми где (но точно не в руке и не рядом с рукой) и также они могут проваливаться под карту если прыгнуть на них, или когда они спавнятся(хотя на них есть коллайдеры), Если интересно, как выглядит ошибка то вот видос https://youtu.be/6si_F8bHAHI

using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class QuickslotInventory : MonoBehaviour
{
// Объект у которого дети являются слотами
public Transform quickslotParent;
public int currentQuickslotID = 0;
public Sprite selectedSprite;
public Sprite notSelectedSprite;
public bool gaga = false;
public Transform hand;
void Update()
{
float mw = Input.GetAxis("Mouse ScrollWheel");
// Используем колесико мышки
if (mw > 0.1)
{
// Берем предыдущий слот и меняем его картинку на обычную
quickslotParent.GetChild(currentQuickslotID).GetComponent<Image>().sprite = notSelectedSprite;
// Если крутим колесиком мышки вперед и наше число currentQuickslotID равно последнему слоту, то выбираем наш первый слот (первый слот считается нулевым)
if (currentQuickslotID >= quickslotParent.childCount - 1)
{
currentQuickslotID = 0;
}
else
{
// Прибавляем к числу currentQuickslotID единичку
currentQuickslotID++;
}
// Берем предыдущий слот и меняем его картинку на "выбранную"
quickslotParent.GetChild(currentQuickslotID).GetComponent<Image>().sprite = selectedSprite;
if (quickslotParent.GetChild(currentQuickslotID).GetComponent<Image>().sprite == selectedSprite && quickslotParent.GetChild(currentQuickslotID).GetComponent<InventorySlot>().isEmpty == false)
{
GameObject newObject = Instantiate(quickslotParent.GetChild(currentQuickslotID).GetComponent<InventorySlot>().item.item, hand.transform, false);
newObject.transform.SetParent(hand, false);
gaga = !gaga;
}
}
Голосование за лучший ответ
creakdowndeadly Мастер (1079) 8 месяцев назад
Координаты твоего Ножа заданы неверно. У тебя уже сам префаб имеет координаты, то есть они будут появляться не там где надо относительно твоего родительского объекта.
Сначала попробуй сбросить координаты префаба и запустить проект.

Совет от меня: Легче знаешь как можно сделать?
Ты же хочешь на руку его приклеить? Вот решение выгодное: создаешь на руке пустой игровой объект, будем называть его "Точкой спавна", тебе в коде прописать надо, чтобы он спавнился на этой точке, неважно как - хоть дочерним объектом делай, но главное нужно у префаба координаты сбросить, так как ты сохранил префаб с координатами.
creakdowndeadlyМастер (1079) 8 месяцев назад
У тебя НОЖ не распакован на сцене! Его распаковать надо, а потом двигать! У тебя префаб на сцене отражается на оригинальный префаб в ассетах. Как распакуешь - ссылки не будет!
Вова Денисов Ученик (195) creakdowndeadly, ну координаты префаба я сбросил, объект стал появляться ближе к руке, но всё равно не там. Я не понимаю, мне сам префаб распаковать надо? Или на сцене меч выбрать и распаковать его?
Вова ДенисовУченик (195) 8 месяцев назад
хотя я знаю наверное, в чём проблема
Вова ДенисовУченик (195) 8 месяцев назад
нет, я не знаю. Объект распаковал, но он спавнится рандомно вокруг руки, может сзади может спереди заспавниться может вообще где то в стороне или под землю проваливается и падает
creakdowndeadly Мастер (1079) Вова Денисов, а не, слушай, я запутался. Rigidbody у ножа обязательная вещь? Мб из-за этого он у каким-то образом пропадает жестко?
Вова ДенисовУченик (195) 8 месяцев назад
а хотя нет
помогло
Вова ДенисовУченик (195) 8 месяцев назад
странно
я же отключал
Вова ДенисовУченик (195) 8 месяцев назад
ну ты прям сильно помог, спасибо
creakdowndeadly Мастер (1079) Вова Денисов, Пожалуйста, я сам в 3д сцене не работал много, так как что-то интересное у меня не выходило. Рекомендую разобраться с тонкостями в 2д сцене, а потом на 3д переходить. Также рекомендую в качестве учебной сцены реализовать процедурную генерацию комнат в 2д и 3д, я считаю там опыт с префабами и коллайдерами подойдет тебе, чтобы разобраться что к чему
Похожие вопросы