Страница 1 из 1

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

СообщениеДобавлено: 04 июл 2019, 15:39
B3rl1
Здравствуйте! При написании системы ближнего боя возникла проблема при привязке объектов ближнего и дальнего боя к их родителям!
Проблема в том что используя булеву переменную 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");
                }
        }
}
 

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

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

Создание объекта ломается и его позицию принимают постоянно одни и те же значения не равные позиции родителя. Да я проверял все скрипты с позициями моего объекта и префабы тоже, но таких значений там не наблюдалось

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

СообщениеДобавлено: 04 июл 2019, 15:50
Woland
https://docs.unity3d.com/ScriptReferenc ... ition.html

Ты задаешь объекту позицию (0,0,0), но в глобальных координатах, поэтому объект перемещается в точку (0,0,0). Используй вместо этого localPosition, это координаты относительного родительского объекта.

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

СообщениеДобавлено: 04 июл 2019, 15:55
B3rl1
Хорошо, щас попробую!

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

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

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

СообщениеДобавлено: 04 июл 2019, 16:14
1max1
Синтаксис:
Используется csharp
var bow = Instantiate(CurrentWeapon).transform;
bow.SetParent(ParentRanged.transform);
bow.localPosition = Vector3.zero;

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

СообщениеДобавлено: 04 июл 2019, 16:20
B3rl1
1max1 писал(а):
Синтаксис:
Используется csharp
var bow = Instantiate(CurrentWeapon).transform;
bow.SetParent(ParentRanged.transform);
bow.localPosition = Vector3.zero;


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

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

СообщениеДобавлено: 04 июл 2019, 16:22
B3rl1
B3rl1 писал(а):
1max1 писал(а):
Синтаксис:
Используется csharp
var bow = Instantiate(CurrentWeapon).transform;
bow.SetParent(ParentRanged.transform);
bow.localPosition = Vector3.zero;


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


А можно ли как-то через Instantiate всё таки поставить позицию? Просто интересно

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

СообщениеДобавлено: 04 июл 2019, 16:49
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);

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

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

СообщениеДобавлено: 04 июл 2019, 16:54
B3rl1
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);

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


Спасибо! Учту)

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

СообщениеДобавлено: 04 июл 2019, 16:57
AngryCat
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);

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

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