Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:

Zdravím dělám 2D hru po nevím jak vytvořit objekt jako children jiného objektu poradíte mi prosím ?

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class SpawnCircle : MonoBehaviour {
    public int maxCircles = 2;
    public Transform Enemy;
    Vector3 position;
    RectTransform rectTransform;
    GameObject prefab;

    // Use this for initialization
    void Start () {
        GameVariables.numberOfCircles = 0;
    }

        // Update is called once per frame
        void Update () {
        if (GameVariables.numberOfCircles < maxCircles)
        {
            position = new Vector3(Random.Range(-2,2+1), Random.Range(-2,2+1), 0.1f);
            Instantiate(Enemy, position, Quaternion.identity);
            GameVariables.numberOfCircles++;
            Debug.Log("Circle Spawn");
        }
        }
}
 
Odpovědět 20. října 1:15
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Karel Ohář
D0ll0k:

Objekty se nedají vytvořit jako children jiného objektu. Nastavuje se jim parent (rodič) a poté se stanou childrenem. Jde to několika způsoby:

public Transform parentTransform;

objekt.transform.SetParent(parentTransform);
//nebo
objekt.transform.SetParent(parentTransform, true);
// a taky
objekt.transform.parent = parentTransform;

Rozdíl mezi nimi je ten, že u posledních dvou zůstane stejná pozice i potom, co nastavíš parenta, kdežto u prvního zůstanou hodnoty pozice stejné a objekt se pak zachová jako kdyby byl parent středem prostoru. Čili pokud má parent pozici [3, 5] a objekt před nastavením parentu [2, 1], objekt se posune na pozici o 2 od parentu po ose x a o 1 od parentu po ose y, bude tedy mít pozici [5, 6]. Stejně se objekt zachová pokud druhému parametru v metodě SetParent dáš false. Zde si můžeš přečíst víc o třídě transform.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 20. října 18:56
Ten, co se snaží "programovat"
Avatar
Karel Ohář
Člen
Avatar
Odpovídá na D0ll0k
Karel Ohář:

Díky moc jsi mi pomohl :-).

můžu se ještě zeptat: Console mi píše upozornění a nevím jak to napravit prosím ještě jednou o pomoc :

Parent of RectTransform is being set with parent property. Consider using the SetParent method instead, with the worldPositionStays argument set to false. This will retain local orientation and scale rather than world orientation and scale, which can prevent common UI scaling issues.
UnityEngine.Tran­sform:set_paren­t(Transform)
PaintPath:Update() (at Assets/Scripts/Pa­intPath.cs:15)

using UnityEngine;
using System.Collections;

public class PaintPath : MonoBehaviour {
    GameObject prefab;
    GameObject path;
        // Use this for initialization
        void Start () {
        prefab = Resources.Load("Path") as GameObject;
        }

        // Update is called once per frame
        void Update () {
        path = Instantiate(prefab);
        path.transform.parent = GameObject.Find("Canvas").transform;
        path.transform.position = transform.position;

    }
}
Editováno 20. října 22:36
 
Nahoru Odpovědět 20. října 22:35
Avatar
pavolbozalka
Člen
Avatar
pavolbozalka:

skús naimiesto transform.parent použiť transform.Set­Parent();

a ešte k predošlému, objekty sa dajú vytvárať ako child. je to 4tý parameter Instantiate.
stačí si pozrieť dokumentáciu https://docs.unity3d.com/…antiate.html

alebo: public static Object Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent);

 
Nahoru Odpovědět 21. října 11:53
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Karel Ohář
D0ll0k:

Tak to se omlouvám, myslel jsem, že objekty se nedají spawnout jako children jiného objektu. Jak píše pavolbozalka. Jinak si to upozornění zkus přeložit. Unity ti navrhuje, že je lepší místo přiřazování vlastnosti parent zavolat metodu SetParent s worldPositionStays na false kvůli běžným problémům s UI zvětšením

Nahoru Odpovědět  +1 21. října 15:29
Ten, co se snaží "programovat"
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.