Instantiate в родительский объект

Общие вопросы о Unity3D

Instantiate в родительский объект

Сообщение B3rl1 04 июл 2019, 15:39

Здравствуйте! При написании системы ближнего боя возникла проблема при привязке объектов ближнего и дальнего боя к их родителям!
Проблема в том что используя булеву переменную isRanged я создаю в том или ином родителе (ParentMelee и RangedMelee соответсвенно), но почему то я не могу создать объект по их координатам (либо же возникает такая ситуация когда объект просто спавнится в непонятно месте)
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WeaponPlayerM : MonoBehaviour
{
        WeaponManager weaponManager;

        public GameObject CurrentWeapon;
        public GameObject ParentMelee;
        public GameObject ParentRanged;
        //public Transform SpawnPoint;
       
       


    void Awake()
    {
                if (CurrentWeapon.GetComponent<WeaponManager>().isRanged)
                {
                        Instantiate(CurrentWeapon).transform.SetParent(ParentRanged.transform)
                        Debug.Log("IsRanged");
                }
                else
                {
                        Instantiate(CurrentWeapon).transform.SetParent(ParentMelee.transform);
                        Debug.Log("IsMelee");
                }
        }
}
 
B3rl1
UNец
 
Сообщения: 28
Зарегистрирован: 04 июл 2019, 15:31

Re: Instantiate в родительский объект

Сообщение B3rl1 04 июл 2019, 15:43

Нет, оно работает, но создаётся только в родители дальнего боя(ParentRange).
Производя какие либо манипуляции с позицией создаваемого объекта к примеру
Синтаксис:
Используется csharp
CurrentWeapon.transform.position = new Vector3(0, 0, 0);
 

Создание объекта ломается и его позицию принимают постоянно одни и те же значения не равные позиции родителя. Да я проверял все скрипты с позициями моего объекта и префабы тоже, но таких значений там не наблюдалось
B3rl1
UNец
 
Сообщения: 28
Зарегистрирован: 04 июл 2019, 15:31

Re: Instantiate в родительский объект

Сообщение Woland 04 июл 2019, 15:50

https://docs.unity3d.com/ScriptReferenc ... ition.html

Ты задаешь объекту позицию (0,0,0), но в глобальных координатах, поэтому объект перемещается в точку (0,0,0). Используй вместо этого localPosition, это координаты относительного родительского объекта.
Woland
Адепт
 
Сообщения: 1240
Зарегистрирован: 20 апр 2013, 18:09
  • Сайт

Re: Instantiate в родительский объект

Сообщение B3rl1 04 июл 2019, 15:55

Хорошо, щас попробую!
B3rl1
UNец
 
Сообщения: 28
Зарегистрирован: 04 июл 2019, 15:31

Re: Instantiate в родительский объект

Сообщение B3rl1 04 июл 2019, 15:58

вот такая проблема возникает постоянно!https://ibb.co/P5KLNQC
B3rl1
UNец
 
Сообщения: 28
Зарегистрирован: 04 июл 2019, 15:31

Re: Instantiate в родительский объект

Сообщение 1max1 04 июл 2019, 16:14

Синтаксис:
Используется csharp
var bow = Instantiate(CurrentWeapon).transform;
bow.SetParent(ParentRanged.transform);
bow.localPosition = Vector3.zero;
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Instantiate в родительский объект

Сообщение B3rl1 04 июл 2019, 16:20

1max1 писал(а):
Синтаксис:
Используется csharp
var bow = Instantiate(CurrentWeapon).transform;
bow.SetParent(ParentRanged.transform);
bow.localPosition = Vector3.zero;


Спасибо!!! Помогло, а то я уже начал через костыли делать, да еще и забыл что вектор во флоате работает))
B3rl1
UNец
 
Сообщения: 28
Зарегистрирован: 04 июл 2019, 15:31

Re: Instantiate в родительский объект

Сообщение B3rl1 04 июл 2019, 16:22

B3rl1 писал(а):
1max1 писал(а):
Синтаксис:
Используется csharp
var bow = Instantiate(CurrentWeapon).transform;
bow.SetParent(ParentRanged.transform);
bow.localPosition = Vector3.zero;


Спасибо!!! Помогло, а то я уже начал через костыли делать, да еще и забыл что вектор во флоате работает))


А можно ли как-то через Instantiate всё таки поставить позицию? Просто интересно
B3rl1
UNец
 
Сообщения: 28
Зарегистрирован: 04 июл 2019, 15:31

Re: Instantiate в родительский объект

Сообщение 1max1 04 июл 2019, 16:49

Можно, есть 2 перегрузки метода:
Синтаксис:
Используется csharp
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

Но оба они устанавливают глобальную позицию, даже если парент не нул.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Instantiate в родительский объект

Сообщение B3rl1 04 июл 2019, 16:54

1max1 писал(а):Можно, есть 2 перегрузки метода:
Синтаксис:
Используется csharp
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

Но оба они устанавливают глобальную позицию, даже если парент не нул.


Спасибо! Учту)
B3rl1
UNец
 
Сообщения: 28
Зарегистрирован: 04 июл 2019, 15:31

Re: Instantiate в родительский объект

Сообщение AngryCat 04 июл 2019, 16:57

1max1 писал(а):Можно, есть 2 перегрузки метода:
Синтаксис:
Используется csharp
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

Но оба они устанавливают глобальную позицию, даже если парент не нул.

Разве не так?
Синтаксис:
Используется csharp
public static Object Instantiate(Object original, Vector3 position, Quaternion rotation);
public static Object Instantiate(Object original, Transform parent);
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 716
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Instantiate в родительский объект

Сообщение 1max1 04 июл 2019, 17:35

Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8