játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5462
FZoli:    4892
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2522

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2190
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] > 7 < [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55]
Viperion - Tag | 540 hsz       Online status #208421   2015.10.06 22:05 GMT+1 óra  
Higyan kell megtervezni a programot ha multiplayert és single módot is akarok bele?
Pl van olyan script ami a játékmenetért felelő ebben objektum példányosítások is történnek.
Single playerban jól működik.

De online nem működik az a instantiate hívás csak ha a network instantiate-t használom.
És akkor most legyen két nagy scriptem ami majdnem megeggyezik egymással ezt én így nem akarom.

Vagy ebben a gameplayscript ben legyen egy logikai változó ami számontartsa,hogy épp single vagy multimódot használok?

És akkor az instantiate rész így nézne ki kb
If(isMultiplayer)
Network.Instantiate
Else
Instantiate

Vagy,higyan tervezzem meg?

   
Slyrfecso - Tag | 44 hsz       Online status #208402   2015.10.01 10:58 GMT+1 óra  
Tunyu megoldottam, az else-ben volt a megoldás, köszönöm a segítséget.
A raycasthoz beállítottam egy változót, alapból true, de icon click esetén false, majd else esetén megint true és így tökéletesen működik.



Kód:
private bool raycast=true;

...

if ( Input.GetMouseButtonDown(0))
{

if(raycast)
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, out hit))
{
if(hit.collider.tag == "Player")
{
objects = hit.collider.gameObject;
}
}
}
}



Kód:
if(slotEvent.isMouse && slotEvent.type == EventType.mouseDown && slotEvent.button == 0)
{

raycast = false;
draggedButorlap = slots[i];

if (objects != null)
{

Renderer[] rendererComponents = objects.GetComponentsInChildren<Renderer>();
foreach (Renderer component in rendererComponents)
{
if(component.tag == "Butorlap Objects List")
{
int index = inventory[i].butorlapID;
component.GetComponent<Renderer>().material.mainTexture = texturesButorlap[index];

}

}
}


}

}

else

{

raycast = true;

}

   
zbalai - Tag | 51 hsz       Online status #208399   2015.09.30 19:30 GMT+1 óra  
Pár napja beírtam a Facebook-os Játékfejlesztés csoportba is, de szerintem még azóta sem javították ki, szóval még aktuális:
Unity 5.2.1 -ben van egy csúnya kis hiba ha UI-t használsz: ha nem adsz meg panel hátteret, akkor editorban simán színt fillez, viszont droid-on meg nem.
Ez úgy jelentkezik, hogy tipikusan pl fekete lesz a panelek háttere droidon.

Kb két óra volt, mire rájöttem

   
Tunyu - Tag | 449 hsz       Online status #208393   2015.09.29 22:46 GMT+1 óra  
Azt hittem hogy az új UI rendszert használod, így viszont érthető miért nincs találat az objektum név keresésre. Akkor viszont próbáld meg ezt .

   
Slyrfecso - Tag | 44 hsz       Online status #208388   2015.09.29 14:05 GMT+1 óra  
Az ötlet nagyon jó, kiegészítettem, azonban nem talál semmit a name, vagy tag-re így továbbra is átlát alatta.
Lehet, hogy a resource/Icon mappát kellene megadni és ha abban egyezik valamelyikkel, akkor működne?


Kód:
if(EventSystem.current.currentSelectedGameObject!=null && EventSystem.current.currentSelectedGameObject.tag=="Butorlap Database")
...
if(EventSystem.current.currentSelectedGameObject!=null && EventSystem.current.currentSelectedGameObject.name=="Icon")


Szerintem az alap baj, hogy a gombok GUI-k az inventory icon-ok pedig nem egy adott layeren vannak, hanem egy adatbázisból "hívódnak meg"

   
Tunyu - Tag | 449 hsz       Online status #208382   2015.09.28 23:47 GMT+1 óra  
Slyrfecso :
Kód:
if ( Input.GetMouseButtonDown(0)) {
if(EventSystem.current.currentSelectedGameObject.name.Equals("Icon") {
Debug.Log("Icon ");
} else{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, out hit))
{
if(hit.collider.tag == "Player")
{
objects = hit.collider.gameObject;
}
}
}
}

Valami ilyesmire gondoltál?

Viperion :
Elég ha egyszer csinálod meg, és mindegyiknél az animátorban ugyan azt a controllert állítod be.

Ezt a hozzászólást Tunyu módosította (2015.09.29 02:01 GMT+1 óra, 936 nap)

   
Instalok - Tag | 558 hsz       Online status #208373   2015.09.28 18:20 GMT+1 óra  
Használj mechanimot, és/vagy animation override controllert. Vagy valami ilyesmi a neve.

   
Lord_Crusare - Törzstag | 1302 hsz       Online status #208372   2015.09.28 17:04 GMT+1 óra  
Hogy megcsinálod az animatort minden egyes karakterre.

   
Viperion - Tag | 540 hsz       Online status #208371   2015.09.28 16:27 GMT+1 óra  
Animációk kezelésére az animatort használom de mindeggyik karakter képes ugrani futni rúgni stb és az a problémám,hogy mindeggyik karakternek az animátorban meg kell,hogy csináljam ugyanazt a struktúrát de minek. Felesleges ugyanazt megcsinálni kétszer vagy többször szerintem.
Gondoljatok csak bele,hogy van ilyen 20 karakter a játékban és mindeggyiknek az animátorban meg kell csinálnotok ugyanazt. Szerintem ez olyan időpazarlás. Az is probléma,hogy minden karakter tud olyat amita másik nem. Ezért az sem lehetséges opció,hogy csinálok egy animaciót az animatorban amit az összesre alkalmazni lehetne.

Mia megoldás erre a problémára?

   
Slyrfecso - Tag | 44 hsz       Online status #208370   2015.09.28 13:46 GMT+1 óra  
Sziasztok!
Van ötletetek arra, hogy az EventSystemhez, hogyan lehet hozzáadni inventory icon-okat?
Raycastal azonosítom a gameobject-et, majd az inventory icon-okkal változtatom a színét, azonban ha egy icon alatt van egy objectum, akkor a slot/icon-on keresztül is működik a raycast amit nem szeretnék.
Az EventSystem-et a scene-re raktam és nincs "First Selected GameObject", mivel az az inventory elemei.



Kód:
if ( Input.GetMouseButtonDown(0))
{

if(EventSystem.current.IsPointerOverGameObject()) return;

ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if(Physics.Raycast(ray, out hit))
{
if(hit.collider.tag == "Player")
{
objects = hit.collider.gameObject;
}
}

}





Kód:
if (objects != null)
{

Renderer[] rendererComponents = objects.GetComponentsInChildren<Renderer>();
foreach (Renderer component in rendererComponents)
{
if(component.tag == "Butorlap Objects List")
{
int index = inventory[i].butorlapID;
component.GetComponent<Renderer>().material.mainTexture = texturesButorlap[index];
}

}
}

   
Lord_Crusare - Törzstag | 1302 hsz       Online status #208357   2015.09.27 15:04 GMT+1 óra  
Ha jól értem, van egy HUD-od a jelenetben, és erre kellene hivatkoznia sok prefabnak -- ez egyszerű. Állíts be egy "tag"-et a HUD-nak ( mondjuk pl. "HUD" ), majd a GameObject.FindGameObjectWithTag eljárással keresd meg ezt az objektumot és tárolj rá egy referenciát. Így minden prefab a létrejöttekor megkeresi a HUD-ot és tud rá hivatkozni.

Fontos: a FindGameObjectWithTag relatíve lassú művelet, így kizárólag a "Start"-ban hívd meg.

   
sarakrael - Tag | 14 hsz       Online status #208356   2015.09.27 14:20 GMT+1 óra  
Van egy Canvas, amit egy script által vezérelek, és ez egy prefabhoz van kötve. Egyszerre több prefab is van a pályán, és csak úgy működnek helyesen, ha szülő gyermek kapcsolatban vannak a prefabbal. Azonban van egy másik script, ami nincs ehhet a prefabhoz kötve, mert ez a HUD-ot vezérli, és azért nem lehet abban a másik scriptben, mert akkor a hud is annyiszor megjelenne, ahány prefab van, és hibásan működne tapasztalataim szerint. Azonban vannak olyan dolgok, amik a Canvasban történnek, és ez kihatással van a HUD-ra is és ilyenkor kellene az, amit írtam. Ennél jobban sajnos nem tudom leírni, sajnálom, még kezdő vagyok.

Amit írtál, hogy prefab referenciákat beállítani, azokat hogy tudok?

   
Instalok - Tag | 558 hsz       Online status #208355   2015.09.27 08:58 GMT+1 óra  
Nem teljesen értem. Mihez kellenek mindkét scriptből változók? A script arra való, hogy vezérelj vele dolgokat, azaz, ha két különböző scriptnek odaadod ugyan azt az objektumot, akkor ugyan azt tudod vele vezérelni. Tényleg nem értem, hogy mit is szeretnél pontosan...

A prefab esetén meg természetesen eltűnnek azok az objektumok, amik az adott jelenetben léteznek csak. Gondolj bele, a prefab-et másik jelenetben is példányosítani tudod, ahol esetleg nincsenek meg a keresett objektumok. Tehát általános szabályként elmondható, hogy prefab nem fog jelenetbeli objektumokat tárolni. Más prefab referenciákat természetesen be tudsz neki állítani.

   
sarakrael - Tag | 14 hsz       Online status #208354   2015.09.27 08:02 GMT+1 óra  
Idézet
Instalok :
Staticcal azért nem működik, mert a static nem objektumhoz tartozik. Miért nem húzod simán azt a canvast a másik scriptbe?



Mindkét scriptből kellenek hozzá változók, és nem rakhatom csak úgy át, mert az egyik scriptben az állandó HUD van, a másikban meg egy olyan UI, ami szülő gyermek kapcsolatban van egy prefabbal, ami csak akkor jelenik meg, ha az a játéktérben van, és aktiválom. mellesleg ha átrakom, akkor a probléma ugyanúgy fennáll, csak fordítva.

Akkor konkrétan lehetelen scripten belül egy canvast hozzárendelni egy public static canvashoz?

+ lenne még egy kérdésem:
ha valamit behúzok prefabnak, és utána azt kihúzom a játéktérbe, akkor a hozzá tartozó scriptből eltűnnek a hozzárendelt public gameobjectek (remélem érthetően fogalmaztam ). Hogyan tudom megoldani, hogy azok megmaradjanak?

Ezt a hozzászólást sarakrael módosította (2015.09.27 08:12 GMT+1 óra, 937 nap)

   
Instalok - Tag | 558 hsz       Online status #208353   2015.09.26 22:40 GMT+1 óra  
Staticcal azért nem működik, mert a static nem objektumhoz tartozik. Miért nem húzod simán azt a canvast a másik scriptbe?

   
sarakrael - Tag | 14 hsz       Online status #208352   2015.09.26 20:31 GMT+1 óra  
Sziasztok!
Több canvas-t is használok és a scriptben úgy szerepelnek hogy:

public canvas scriptNeve;

Majd a Unitiben a scriptnél betudom húzni azt a canvast amit használni akarok a scripthez. Azonban az egyik canvast egy másik scriptben is használni akarok, ezért hozzá kellett biggyesztenem a static szót így:

public static scriptNeve;

Így viszont a Unitynél nem jelenik meg, így nem is tudtam behúzni, ezért NullReferenceException hibaüzenetet kaptam.

Azt szeretném kérdezni tőletek, hogy hogyan tudom azt megoldani, hogy megjelenjen a Unityben úgy hogy odaírom a staticot, vagy esetleg scripten belül hogyan tudnám a canvast hozzárendelni.

Ja és c#-ban írom a scriptet.

   
Viperion - Tag | 540 hsz       Online status #208317   2015.09.16 16:21 GMT+1 óra  
A deltaposition az a legfrisebb és az előző képernyő érintés pozíciónak a külömbsége akar lenni?

   
Slyrfecso - Tag | 44 hsz       Online status #208307   2015.09.15 15:45 GMT+1 óra  
Húú nagyon jó vagy, jópárszor megcsináltam korábban az első megoldásod, de mivel nem azt kaptam amit szerettem volna ezért átugrottam, pedig a hiba máshol keresendő.

A hiba a betöltésben volt, amit az alábbiakban módosítottam, hozzáteszem 2 sör és egy pálinka után
megnyílt az elmém)))
Nem tudom ti hogy vagytok vele, de van, hogy napokig, hetekig, igen hetekig csak próbálgatom a kódokat, majd utána kérdezek és valaki rávezet a helyes útra. 14 éve dolgozom grafikusként, fotózom, 3D-zek, de a programozást csak két hónapja kezdtem el autódidakta módon és 100x jobban tetszik mindennél))
Az amikor egy kód működik hihetetlen eufólia...
Na ennyit a csöpögésről jöjjön a kóóód:

Kód:
foreach(Prefabs obj in prefabData) {

GameObject myPrefab = Resources.Load("Prefabs/"+obj.name) as GameObject;
GameObject spawnedObject = Instantiate<GameObject>(myPrefab);
spawnedObject.transform.position = obj.savedPos;
spawnedObject.transform.rotation = obj.savedRot;
spawnedObject.name = spawnedObject.name.Replace("(Clone)","").Trim();
spawnedObject.name = spawnedObject.name.Replace("U","Ü").Trim();
}


Kipróbálható működés közben is a project a korábbi hozzászolásomban lévő linken.
A következő lépcső a MySQL-be való mentés lesz.
Nagyon szépen köszönöm a segítséget.

Ezt a hozzászólást Slyrfecso módosította (2015.09.15 18:14 GMT+1 óra, 949 nap)

   
Instalok - Tag | 558 hsz       Online status #208303   2015.09.15 13:27 GMT+1 óra  
Amit esetleg megtehetsz, az az, hogy edit-time névhez rendeled a prefab referenciát, valahogy így:
Kód:
[CreateAssetMenu]
public class ObjectList : ScriptableObject
{
    [System.Serializable]
    public class ObjectInfo
    {
        public string name;
        public GameObject prefab;
    }
   
    [SerializeField]
    private List<ObjectInfo> objects = new List<ObjectInfo>();
}

Ennek a segítségével létrehozol egy assetet. Az assetet kijelölve kézzel ki tudod tölteni az adatokat, amely tartalmaz egy id-t meg egy prefab hivatkozást. Ezt az assetet használva már tudsz instantiate-et hívni, így a mentés része nem sokat módosul, csak nem az objektum nevét kell elmenteni, hanem az id-t, amihez az ő prefabje tartozik.

Nézz rá a ScriptableObject-re, hogy hogyan és mire lehet használni. Vagy, ahogy lentebb írtam, Asset bundle vagy Resources folder.

   
Instalok - Tag | 558 hsz       Online status #208302   2015.09.15 13:20 GMT+1 óra  
Nézem a kódot, de nem teljesen értem, hogy mit csinálsz, és hogy mit szeretnél csinálni. Van egy statikus current változód a Prefabs osztályban, amit mindig felülírsz a legutolsó megtalált Player taggel ellátot objektummal. Emellett ugyebár nem tudsz "csak úgy" név alapján objektumot létrehozni. Ehhez vagy a Resources folderbe kell tenned, hogy be tudd tölteni, vagy AssetBundle-t kell használnod. Ha viszont csak az a kérdés, hogy hogyan gyűjtöd össze az adatokat, akkor valami ilyesmi kell neked (nem próbáltam ki, notepad-ben írtam...)
Kód:
[System.Serializable]
public class PrefabData
{
    public string name;
    public Vector3 position;
    public Quaternion rotation;
}

public class User
{
    private List<PrefabData> prefabData = new List<PrefabData>();

    private void SaveObjects()
    {
        GameObject[] objects = GameObject.FindGameObjectsWithTag("Player");
        foreach (GameObject go in objects)
        {
            PrefabData data = new PrefabData();
            data.name = go.name;
            data.position = go.transform.position;
            data.rotation = go.transform.rotation;
           
            prefabData.Add(data);
        }
    }
}

   
Slyrfecso - Tag | 44 hsz       Online status #208301   2015.09.15 12:40 GMT+1 óra  
Beleraktam az előzőbe, bocsi.

   
Instalok - Tag | 558 hsz       Online status #208300   2015.09.15 11:05 GMT+1 óra  
Én nem látom a linket

Dictionary-t akkor kell (érdemes) használni, ha valamit kulcs alapján akarsz megkeresni, mert (általában) egy rendezett fában tárolja az adatokat, így a keresési idő maximum a fa mélységével egyenlő, ami logn-es időt jelent.

Egyébként ez pontosan mire kell neked, lehet van más megoldás is.

   
Slyrfecso - Tag | 44 hsz       Online status #208299   2015.09.15 11:00 GMT+1 óra  
Sziasztok!

A projektemben szeretném elmenteni a gameobject-eket a nevük, pozíciójuk és forgásuk alapján.
Az első talált objektumot el tudom menteni és visszatölteni a fentiekkel, de az összes gameobject-et szeretném.
List vagy Dictionariest kellene használnom?
A scripteket az alábbi linken találjátok, elnézést, hogy nem ide teszem, de nem szerettem volna teleszemetelni. Ebbe az add() metódusba beleőrülök, remélem tudtok segíteni.
Előre is köszönöm.

U.I.: a string replace szenzációóóóós, köszönöm. Főleg azért mert mielőtt elmentem az objectumok nevét átnevezem, majd visszatöltés után újra)))

Lista

Ezt a hozzászólást Slyrfecso módosította (2015.09.15 12:40 GMT+1 óra, 949 nap)

   
Instalok - Tag | 558 hsz       Online status #208295   2015.09.15 02:54 GMT+1 óra  
Ehhez két dolgot kell értened: mi az a delta és mi az a position

Ezt a hozzászólást Instalok módosította (2015.09.15 04:10 GMT+1 óra, 950 nap)

   
Viperion - Tag | 540 hsz       Online status #208294   2015.09.15 02:46 GMT+1 óra  
Srácok mi az a touch.deltaposition nem bírok rájönni hiába ott a doksiban nem megy.
El tudnátok mondani úgy,hogy az én nehéz felfogású agyamnak ez ne okozzon komoly kihívást?

Arra gondoltam,hogy olyasmi mint a deltatime de akkor semmi értelme a deltapositionnak mert,akkr ez ugyanaz mintha azt csinálnám,hogy folyamatosan meghívom a touch.position-t.

   
Instalok - Tag | 558 hsz       Online status #208282   2015.09.12 09:31 GMT+1 óra  
Akkor használj esetleg valamilyen string replace-t (pl. az ü-t uu-ra cseréled). Bár ez okozhat ütközést, ami ugye nem lenne valami jó.

   
Slyrfecso - Tag | 44 hsz       Online status #208281   2015.09.12 09:08 GMT+1 óra  
Instalok igazad van a file-elnevezéseket illetően, azonban ha a termékkódban is szerepel, amit nem tudok megváltoztatni, akkor meg kell oldanom, hogy ékezetesen jelenjen meg.

Nem egy szép megoldás, de a slotokba külön be tudom tölteni az ékezetes file-okat:
Kód:
public Texture2D newIcon353;
...
inventory10[2].itemIcon = newIcon353;

   
Tunyu - Tag | 449 hsz       Online status #208279   2015.09.11 23:45 GMT+1 óra  
Instalok :
Elméletileg a Network.InitializeSecurity() használata után a szerver és kliens közötti kommunikáció titkosított csomagokban történik, így akár sima text-ként is mehet az adat. A hash tudtommal nem visszafejthető csak ütköztethető,erre léteznek szerverek ahol így megtudhatjuk pl. egy MD5 hash-nak a valós értékét, de ezek általában egyszerű szavak. Ha viszont egy egyszerű szó kap egy kis toldalékot(sót) és úgy generálod a hash-t,akkor már jelentősen csökken az ütközés veszélye.
Ez szerintem bejelentkezési adatok tárolására és összehasonlítására a szerver oldalon teljesen elegendő.
Ha titkosított adatot akarsz tárolni ami vissza is fejthető, akkor a jelszóból generálj egy hash-t amit fel tudsz használni egy titkosító algoritmus kulcsaként amit a titkosítás után törölhetsz is.

   
Instalok - Tag | 558 hsz       Online status #208278   2015.09.11 20:50 GMT+1 óra  
Előfordulhat, hogy nem jól kezeli, viszont egyébként sem érdemes ékezetes fájlneveket használni. Gondolj bele, ha olyan helyre kerül a szoftvered, ahol nincs ez a nyelv telepítve, akkor milyen karakterek kerülnek oda? Szerintem egyszerűen használj angol abc-t.

   
Slyrfecso - Tag | 44 hsz       Online status #208277   2015.09.11 20:08 GMT+1 óra  
Ezt egy jelnek veszem amit írtál, mert még rám is vár az ügyfelek regisztrálása.
A hasselt secretKey-en kívül még én sem találtam biztonságosabb megoldást.

Elnézést, hogy a kérdésed megválaszolása előtt kérdést teszek fel, de bízom benne, hogy
mindketten kapunk választ.

Az inventory-mban az ékezetes icon-ok nem jelennek meg.
Encode-olásra sok megoldást találtam, de vagy nem jól alkalmazom, vagy Unity bugról van szó.
Az ékezetes file-neveket nem tölti be, ha a nevük stringben van tárolva.
A Unity fórumon részleteztem, de ha valaki találkozott már ilyen problémával, jó lenne ha segítene:
Accented character

   
Instalok - Tag | 558 hsz       Online status #208276   2015.09.11 19:01 GMT+1 óra  
Jelszóküldést azt hogy érdemes megcsinálni szerintetek? Az oké, hogy nem plain textként tárolom az adatbázisban a jelszót, hanem legalább hashelem, viszont, ha a hashelés belekerül a kódba (amely, mint tudjuk könnyen visszafejthető, lásd ILSpy), akkor a hálózaton elküldött hashelt kód visszafejthető az eredeti jelszóvá könnyedén. Vagy valami ilyesmi.

   
Slyrfecso - Tag | 44 hsz       Online status #208274   2015.09.10 10:53 GMT+1 óra  
Az új inventory lista működik, úgyhogy minden oldalnak saját listája van.
Köszönöm szépen ez egyenlőre működik, magamra szedek egy kis tudást és utána újra írom a scripetet hurkokkal együtt.




Kód:
...
public List<Item> inventory11 = new List<Item>();
...
inventory11.Add (new Item());
...

// PAGE 11 BEGIN ----------------------------------------------

if (PAGE11)
{

inventory11[0] = database.items[551];


GUI.BeginGroup(new Rect(20, 80, 430, 530));
if (GUI.Button (new Rect (0, 0, 100, 20), "" ,buttonBack ))
{
PAGE1 = true;
PAGE11 = false;


}

GUI.Label(new Rect(105, 0, 200, 20), "09. Székek, forgószékek" ,pageHeaderStyle); //PAGE 11


int j = 0;
Event slotEvent = Event.current;

for (int y = 0; y < slotsY; y++)
{
for (int x = 0; x < slotsX; x++)
{
Rect slotRect = new Rect(0+x*105, 25+y*80, 100, 75);
GUI.Box (slotRect, "", skin.GetStyle ("Slot"));
slots[j] = inventory11[j];

if (slots[j].itemName != null)
{
GUI.DrawTexture(slotRect,slots[j].itemIcon);
if (slotRect.Contains(Event.current.mousePosition))
{
tooltip = CreateTooltip(slots[j]);
showTooltip = true;

if(slotEvent.isMouse && slotEvent.type == EventType.mouseDown && slotEvent.button == 0 )
{

Instantiate (inventory11[j].itemPrefab);
print ("Clicked " + j);

}

}



}
if(tooltip == "")
{
showTooltip = false;
}

j++;

}

}





GUI.EndGroup();
}

// PAGE 11 END ----------------------------------------------

Ezt a hozzászólást Slyrfecso módosította (2015.09.10 12:54 GMT+1 óra, 954 nap)

   
Slyrfecso - Tag | 44 hsz       Online status #208273   2015.09.10 10:33 GMT+1 óra  
Köszönöm szépen ezt már próbáltam, mindkét esetben hibaüzenettel elszáll.
Idézet
Parameter name: index
System.Collections.Generic.List`1[Item].set_Item (Int32 index, .Item value) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/List.cs:639)
Inventory.DrawInventory () (at Assets/script/Inventory/Inventory.cs:1076)
Inventory.OnGUI () (at Assets/script/Inventory/Inventory.cs:100)


Viszont igazad van, hogy felülírja az előző elemeket és vagy új listát, vagy törölnöm kell az inventory betöltött elemeit.
Van ötleted mi lehet a hiba?

   
Tunyu - Tag | 449 hsz       Online status #208272   2015.09.09 23:12 GMT+1 óra  
Azért marad meg az előző listából is meg elem, mert nem törlöd az előző elemeket hanem csak felülírod.Egy új oldalra lépésnél vagy hozz létre egy új listát pl.:
Kód:
inventory = new List<Item>();
vagy simán ürítsd ki a meglévőből pl.:
Kód:
inventory.Clear();
parancsal, és ez után mehet bele az új adatbázis elemek.
Kb így
Kód:
if (PAGE2)
{
inventory.Clear();
inventory[0] = database.items[0];
inventory[1] = database.items[1]; ...


Ha nem külön-külön töltenéd fel minden egyes index helyét hanem használnál 1-2 hurkot jelentősen csökkenthetnéd a script méretét is.

   
Slyrfecso - Tag | 44 hsz       Online status #208271   2015.09.09 16:22 GMT+1 óra  
Nagyon köszönöm, nagyon jó ötlet, sajnos ennél bonyolultabb amire szükségem van, mert a gombokat különböző néven kell elneveznem azokat pozicionálnom kell. Ezt az előzőekben írtak alapján meg is oldottam.

Tunyu ha tudsz abban segíthetnél, hogy miért hagyja kirajzolva azokat az elemeket, amik a másik inventoryban üres helyek?
(huu ezen sokat gondolkoztam, nem sikerült leírnom jobban, de ha kipróbáljátok a projektemet, rögtön érthető lesz
http://terberendezo.alexbutor.hu
user: a
pass: a
3. szék ikon
03 és 01-es termékcsaládok közötti váltás során látható, hogy a 22. slotnak üresnek kellene lennie, de kirajzolja a 03-as termékcsalád 22. slot tartalmát.
A többi termékcsaládban az üres helyekre üres képeket töltöttem, be de ez azért nem jó, mert látszólag üres slotok fölé húzva megjelenik a Tooltip.

Bármi ötletet szívesen vennék.
Az inventoryt ide nem másolom be, mert baromi hosszú lenne, de a Unity forumon az alábbi linken megtekinthető.
http://forum.unity3d.com/threads/how-to-add-multiple-pages-in-inventory.352700/

   
Tunyu - Tag | 449 hsz       Online status #208270   2015.09.09 10:44 GMT+1 óra  
Kód:
public List<GameObject> selectedItems;
private string[] str;
private int selected = 0;
void Start(){
selectedItems = new List<GameObject>();
}
void OnGUI() {
str = new string[selectedItems.Count];
for(int i = 0; i< selectedItems.Count;i++){
str[i] = selectedItems[i].name;
selected = GUI.SelectionGrid(new Rect(0,0,Screen.width,Screen.height),selected,str,7);
}
}

Így az aktuális darabszámnak megfelelően hozza létre a gombokat,jelen esetben egy sorban 7 gombot, de ez lehet 5 vagy 10 is.

Ezt a hozzászólást Tunyu módosította (2015.09.09 22:36 GMT+1 óra, 955 nap)

   
Slyrfecso - Tag | 44 hsz       Online status #208269   2015.09.09 07:44 GMT+1 óra  
Megoldottam, úgyhogy minden elem pozicióját külön sorba írtam, majd a csoportokat if (pageX) aktív tölti csak be. Minden oldalnak külön ciklusa van.
Abban segíthetnétek, hogy a slots-okat hogyan lehet törölni, mert ha az egyik csoportban kevesebb elem van, akkor az előző csoportból ott marad az üres helyeken.
Továbbá vannak olyan helyek a gridben, amit szándékosan átugrottam.

Végső megoldásként, amit nem szeretnék, egy azonos üres elemet betölthetnék, de ez további 100 sort jelent

Remélem tudtok segíteni.

   
Slyrfecso - Tag | 44 hsz       Online status #208265   2015.09.08 12:22 GMT+1 óra  
Sziasztok!

Egy kis segítséget kérnék ismét. Egy inventoryban szeretnék oldalakat létrehozni, amikhez külön állítanám be az adatbázis elemeit.

ItemDatabase (0-250 id-s elemet tartalmaz, amelyek 50-esével csoportosíthatóak és külön oldalon megjeleníthetőek.)
Kód:
// Use this for initialization
void Start () {
for (int i = 0; i < (slotsX * slotsY); i++)

{
slots.Add(new Item());
inventory.Add (new Item());

}
database = GameObject.FindGameObjectWithTag("Item Database").GetComponent<ItemDatabase>();
//COMFORT TERMÉKEK
inventory[0] = database.items[0];



Egy ilyen kódot találtam, de nem tudom az enyémre átírni.
Kód:
pages.Add (newItem());

(pages[2] as ItemGridPage).SetSlotItem(0, 0, database.items[0]);

   
Matzi - Szerkesztő | 2522 hsz       Online status #208197   2015.08.28 22:25 GMT+1 óra  
Projektor. Csak akkor rajzolod ki amikor azok vannak, amikre hatnia kell, aztán rajzolod a többit.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Instalok - Tag | 558 hsz       Online status #208196   2015.08.28 20:22 GMT+1 óra  
Igazából nem kijelölésre kell, azt inkább csak példának hoztam.

   
Tunyu - Tag | 449 hsz       Online status #208195   2015.08.28 19:49 GMT+1 óra  
Ha nem fontos hogy alatta legyen, csak simán hozzá kell adni egy halo-t minden kijelölt objektumhoz.

   
Instalok - Tag | 558 hsz       Online status #208194   2015.08.28 18:37 GMT+1 óra  
Ti hogyan csinálnátok egy olyan "markert", ami követi az alatta lévő terepet? Valamilyen projektív textúrázás kellene nekem valószínűleg. Viszont nem terrain-specifikus kellene, mert modelleken is állhat a játékos (aki alatt lenne ez a jelzés). Olyasmire gondolok, mint a stratégiai játékokban az egységek kijelölését mutató jel az adott egység alatt. Vagy hasonló, mint ez.

Például projectorral, és valahogy szűrni, hogy mire ne vetítsen?

   
Viperion - Tag | 540 hsz       Online status #208139   2015.08.22 10:01 GMT+1 óra  
Az unity weboldalán letöltéseknél az additional downloads alatt abuilt in shaders az micsoda?
Extra shader csomag amit nem tartalmaz az additional downloads alatti 32 bites unity telepítő?

   
mogul - Tag | 153 hsz       Online status #208131   2015.08.21 01:04 GMT+1 óra  
lehetséges, de a charcontrollerét (aminek saját fizikája van). lehet sima capsulecolliderrer+rigidbody hogy velocity vagy addforce ammi mozgassa. addforce-szal nekem egész jól kijött. talán mert nem áll meg azonnal, így van átmenet a futó/járó - álló között.

tunyu, van ott a physics matrix-nél olyan h raycast affecting on trigger colliders v hasonló (hacsak nem együtt használod, valszeg nem erről van szó). nem használsz translate-t? akkor nem működik a fizika. és mindkét ütközőn collider kell legyen.

   
Viperion - Tag | 540 hsz       Online status #208129   2015.08.19 17:00 GMT+1 óra  
A charactercontroller.move a velocity-t állítgassa így mozgassa az objektumot?

   
FZoli - Szerkesztő | 4892 hsz       Online status #208124   2015.08.19 06:35 GMT+1 óra  
nem, valószínűleg azért törétnik, mert nem vagy körültekintő. A fizikai enginnel óvatosan kell interaktolni, nem mindegy, hogy és mikor akarod változtatni az állapotukat. A doksi nagyon szépen leírja ezt, próbáld ezt az olvasás dolgot.
   
Tunyu - Tag | 449 hsz       Online status #208123   2015.08.19 06:25 GMT+1 óra  
Nem kizárt hogy valamit én rontok el, de nálam nem működik az ütközés detektálás.
A Physics.Raycast() működik de se az OnTriggerEnter() se az OnCollisionEnter(). Ha isTrigger be van kapcsolva áthaladnak egymáson az objektumok de akkor sem észleli az ütközést. Rigidbody van.Régen működött, most mit rontok el!?

   
Viperion - Tag | 540 hsz       Online status #208122   2015.08.19 01:40 GMT+1 óra  
Én ezt nem értem.
Nyugodtan próbáljátok csak,ki hogy ha csináltok egy plane objektet és egy kockát aminek lesz rigidbodyja is majd ha translatelod,folyamatosan lefelé ,akkor pattogni fog míg át nem esik a plane objektumon.

Vagy ez azért nem történik mert a charactercontroller move metódusa többet csinál mint a translate metódus?

   
Matzi - Szerkesztő | 2522 hsz       Online status #208121   2015.08.19 00:14 GMT+1 óra  
Viperion:
Oda van írva fölé szépen:
"...the motion will only be constrained by collisions. It will slide along colliders."
Ami ékes magyarra fordítva azt jelenti, hogy azért nem esik át a talajon, mert azt a fizikai rendszer elintézi, hogy ne menjenek át egymáson. Szóval a válasz a kérdésedre az, hogy a script nem hibás, csak nem vettél figyelembe egy kitételt, amit odaírtak.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Viperion - Tag | 540 hsz       Online status #208120   2015.08.18 22:53 GMT+1 óra  
A gravitáció az ami lent tarja a talajon de ha tovább csökkented az y értékét mint ahol a talaj van,akkor át megy rajta nem? Ez logikus. Ezért ha a talajon van az objekt ,akkor ez nem futhat le vagy ha miden áron le akarjuk,hogy fusson ,akkor kell oda azaz air változó amit oda írtam.

   
Frissebbek | Korábbi postok
[1] [2] [3] [4] [5] [6] > 7 < [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55]