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

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2188
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1625
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]
Instalok - Tag | 543 hsz       Online status #208503   2015.10.20 07:14 GMT+1 óra  
Neon pizza Az egy Area of Effect (AoE) támadás, minden, ami az adott területen belül van, megkapja a sebzést. És vannak egyéb formák is esetlegesen. Ezt a "neon pizzát" egyébként könnyű leimplementálni, mert csak egy távolság és irány vizsgálat, viszont maguknak az objektumoknak (mikkel kell ütköztetni) a lekérdezése lehet problémás. Arra is gondoltam, hogy ezekre vagy egy collision mesh-t, vagy egy AABB-t használok. Az AABB megmondja az objektum-listát, amin elvégzem a finomabb ütközésdetektálást.

Egyébként a collision event elkapása jelenti a problémát. Például az egyik objektumon lennie kell egy Rigidbody-nak az eddigi tapasztalatok, és a doksi szerint is:
Idézet
Collision events are only sent if one of the colliders also has a non-kinematic rigidbody attached

Nincs valami mód arra, hogy lekérjem az adott player környezetében lévő objektumokat egy bizonyos távolságon belül? Nyilván nem a brute-force módra gondolok, hogy végignézem az összes objektumot. Esetleg ezzel?

   
FZoli - Szerkesztő | 4892 hsz       Online status #208502   2015.10.20 06:23 GMT+1 óra  
projectile ütközésre ajánlom a raycastot, de a képen nem tudom mi az a neon pizza és mi a játéktechnikai szerepe úgyhogy arra nem mondok semmit.
   
Instalok - Tag | 543 hsz       Online status #208501   2015.10.19 21:06 GMT+1 óra  
Komponensekből építek fel egy képességet (lásd Programozás elmélet topic), viszont az ütközésnél ismét elgondolkoztam picit. Különböző virtuális ütközési testeket szeretnék használni;
projectile esetén például egy bizonyos méretű gömböt reptetnék, azonban lennének AoE dolgok is, mint valami ilyesmi:

Erre tudnék például saját mesh-t használni. Illetve nem akarom leszűkíteni egy ütköző testre, azaz akár olyan is lehetne, amelynek az elején van egy ehhez a képhez hasonló cone, de aztán folytatódik még egy bizonyos sávban, stb.

Hogy tudnám ebbe belekeverni a Unity rendszerét? Eszembe jutott az is, hogy ezeket az ütközésvizsgálatokat könnyű leprogramozni (sphere, cone, box), viszont hogy tudnám összeegyeztetni a Unity-vel? Úgy értem, ha nem használom a rendszerét, akkor mivel minden objektumot nem akarnék végignézni, így saját térfelosztó rendszert is írnom kellene. Amit még egyelőre nem szeretnék megtenni, ha van más lehetőség.

   
Instalok - Tag | 543 hsz       Online status #208480   2015.10.17 10:05 GMT+1 óra  
Valami ilyesmit azért simán megcsinálhatsz
Kód:
public class Valami : MonoBehaviour
{
    private string names;
    private string prices;
    private int totalPrice;
   
    public void Gombnyomaskor()
    {
        names = "";
        prices = "";
        totalPrice = 0;
       
        // itt jön a mostani rész, csak annyi, hogy a names és prices részt töltöd fel
        GameObject[] objectsPrice = GameObject.FindGameObjectsWithTag("Player");
        foreach (...)
        {
            ...
        }
    }
   
    private void OnGUI()
    {
        GUI.Label(...);
        // stb...
    }
}

Meghívod azt a függvényt, amikor megnyitod a menüt, és kész.

   
Slyrfecso - Tag | 44 hsz       Online status #208478   2015.10.17 08:57 GMT+1 óra  
Instalok nagyon szépen köszönöm a segítséget, tökéletesen működik.
Az itemPrice integer volt majd a megjelenítéshez stringé kellett alakítanom.
Abban igazad van, hogy jobb lenne egy gombbal meghívni, de abban a menüben ahol ez elérhető,
csak akkor használják, ha erre kíváncsi valaki, így ezt a menüt is gombnyomásra hívja meg.
(Tudom, hogy plusz egy gomb 1x megnyomásával 1x futna le.)
Nem tudom, hogy az oldotta-e meg az ősszeadást, hogy kivettem a publicból a totalt, de amint kivettem a header részből és függvényhez raktam, azóta jól ad össze.
Azért gondoltam, hogy folyamatosan fusson a ciklus, mert így egy új termék hozzáadása vagy törlése esetén azonnval változik a lista és a végösszeg. Bár ez gondolom, egy-két gomb megnyomása és a beillesztés soránt tárolt items-ekkel is működne.


Készítettem egy screenshotot amin láthatod a végeredményt, valamint a futás közbeni terhelés értékeit is.
http://terberendezo.alexbutor.hu/finish_SUM.png
Meg nem tudom mit jelentenek ez az értékek, csak bízni merek abban, hogy ha valami 10% alatt van,
az nincs terhelés alatt.


Ismét köszönöm, hogy segítettél, és a korsóm nincs tele, ami annyit jelent, hogy szeretnék Tőled, tőletek tanulni.


Kód:
//ÖSSZEÁLLÍTÁS VÉGÖSSZEGE
GUI.Label(new Rect(Screen.width / 2 - 170, 360, 60, 25), "Az összeállítás termékei:" , szovegbold);

database = GameObject.FindGameObjectWithTag("Item Database").GetComponent<ItemDatabase>();

string nevek = "";
string arak = "";
int total = 0;
string vegosszeg = "";


if (GameObject.FindGameObjectsWithTag("Player") != null)
{
GameObject[] objectsPrice = GameObject.FindGameObjectsWithTag("Player");
foreach (GameObject go in objectsPrice)
{
if (go.name != null)
{
for (int i = 0; i < 552; i++)
{
if (go.name == database.items[i].itemName)
{
int price = int.Parse(database.items[i].itemPrice);
arak +=database.items[i].itemPrice + " Ft+Áfa" + "\n";
nevek +=database.items[i].itemName + "\n";
total += price;
}
}
}
}
}



GUI.Label(new Rect(Screen.width / 2 - 170, 380, 60, 25), nevek, szoveg);
GUI.Label(new Rect(Screen.width / 2 + 40, 380, 60, 25), arak, szovegjobbraZART);
GUI.Label(new Rect(Screen.width / 2 + 40, 360, 60, 25), "Nettó ár:" , szovegjobbraZART);

GUI.Label(new Rect(Screen.width / 2 - 170, 525, 60, 25), "Az összeállítás:" , szoveg);
GUI.Label(new Rect(Screen.width / 2 - 170, 495, 60, 25), "Az összeállítás végösszege:" , szoveg);

vegosszeg = total.ToString();

GUI.Label(new Rect(Screen.width / 2 +40, 495, 60, 25), vegosszeg + " Ft+Áfa" , szovegjobbraZART);
if(GUI.Button(new Rect(Screen.width / 2 - 40, 522, 140, 20), "MEGRENDELÉSE"))

{

}

Ezt a hozzászólást Slyrfecso módosította (2015.10.17 09:06 GMT+1 óra, 762 nap)

   
Instalok - Tag | 543 hsz       Online status #208475   2015.10.16 16:36 GMT+1 óra  
Azért, mert csak egyszer adsz neki 0 értéket, és ahhoz képest mindig csak hozzáadsz. Egyébként az egész keresést én nem tenném az OnGUI()-ba, hanem egy adott akciókor (például gombnyomásra) legenerálod a stringet, és utána csak kirajzolod. Mert ez így nagyon lassú lesz.

   
Slyrfecso - Tag | 44 hsz       Online status #208474   2015.10.16 15:28 GMT+1 óra  
Huuuu, nagyon szépen köszönöm.

int price = database.items.itemPrice;
//Cannot implicitly convert type `string' to `int'

int price = Int32.Parse(database.items.itemPrice);
//The name `Int32' does not exist in the current context

Ezt módosítottam, publikussát tettem a total értékét:
public int total = 0;
int price = int.Parse(database.items.itemPrice);

Ez működik, de isszonyatosan számol az Insepctorban a számláló.

Mit csinálok rosszul?

   
Instalok - Tag | 543 hsz       Online status #208473   2015.10.16 14:43 GMT+1 óra  
Ha az itemPrice egy integer, akkor csak egyszerűen szummázol egyet.
Kód:
int total = 0;

// ennél a résznél:
if (go.name == database.items[i].itemName)
{
    int price = database.items[i].itemPrice;
    arak += price + " Ft+Áfa" + "\n";
    nevek +=database.items[i].itemName + "\n";
    total += price;
}

Ha nem integer, akkor stringből kell átkonvertálnod, például így:
Kód:
int price = Int32.Parse(database.items[i].itemPrice);

   
Slyrfecso - Tag | 44 hsz       Online status #208472   2015.10.16 14:33 GMT+1 óra  
Ez egy nagyon jó ötlet, azonban a sceenen van egy térberendezés, ami nem a futtatáskor jön létre, így azok item-eit mindenképpen meg kell találnom. Viszont az inventoryból beillesztett termékeknél jobb lenne.
Köszönöm.

Tudnál még abban segíteni, hogy az általam kapott "arak"-at hogyan lehetne összeadni?
Jelenleg gyönyörűen kilistázza perennel sortöri, de az összeadásra nem jövök rá.


   
Instalok - Tag | 543 hsz       Online status #208471   2015.10.16 09:53 GMT+1 óra  
Apropó, jut is eszembe: amikor a "képernyőre rakod" az objektumot, nem tudod már akkor eltárolni a hozzá tartozó Item-et? Így nem kell futásidőben keresni.

   
Instalok - Tag | 543 hsz       Online status #208470   2015.10.15 23:01 GMT+1 óra  
Hát, akkor kérdezni kell, hátha tudunk válaszolni!
Hasonló, mint amit csináltál, csak az nagyon nem optimális. Konkrétan n*m futásideje van (minden egyes game objecthez (n) megvizsgálod az összes itemet (m) ). Ennél jobb a Dictionary (ami egy rendezett fa), amiben a keresési idő log(n). Kulcs alapján így gyorsan megtalálsz egy értéket. Keress rá a google-ben (c# dictionary).

   
Slyrfecso - Tag | 44 hsz       Online status #208469   2015.10.15 21:06 GMT+1 óra  
Elnézést ez egy védekező mechanizmus nálam, mivel nem értettem amit írtál gondoltam tolok egy próbálkozást és talán abban meglátjátok a hibát.

ItemDatabase osztályt nem értem, segíts lszi mit keressek és rögtön megírom.
Dictionary-t még nem használtam, ezért restellem, de átugrottam.

Óvatosban írom, hogy módosítottam az előző postom, ami szerintem tökéletes...

Ezt a hozzászólást Slyrfecso módosította (2015.10.15 22:21 GMT+1 óra, 763 nap)

   
Instalok - Tag | 543 hsz       Online status #208468   2015.10.15 19:29 GMT+1 óra  
Egyáltalán figyelsz arra, amit írok, vagy csak írod a sajátodat?

   
Slyrfecso - Tag | 44 hsz       Online status #208466   2015.10.15 18:52 GMT+1 óra  
Itt a megoldásom:

Kód:
GUI.Label(new Rect(Screen.width / 2 - 170, 360, 60, 25), "Az összeállítás termékei:" , szovegbold);

database = GameObject.FindGameObjectWithTag("Item Database").GetComponent<ItemDatabase>();


string nevek = "";
string arak = "";

GameObject[] objectsPrice = GameObject.FindGameObjectsWithTag("Player");
foreach (GameObject go in objectsPrice)
{
for (int i = 0; i < 552; i++)
{
if (go.name == database.items[i].itemName)
{
arak +=database.items[i].itemPrice + " Ft+Áfa" + "\n";
nevek +=database.items[i].itemName + "\n";
}
}
}


GUI.Label(new Rect(Screen.width / 2 - 170, 380, 60, 25), nevek, szoveg);
GUI.Label(new Rect(Screen.width / 2 + 40, 380, 60, 25), arak, szovegjobbraZART);

Ezt a hozzászólást Slyrfecso módosította (2015.10.15 22:20 GMT+1 óra, 763 nap)

   
Instalok - Tag | 543 hsz       Online status #208465   2015.10.15 18:01 GMT+1 óra  
Csengusz:
Magyarul nem tudom mennyi infót találsz, de elég sok anyag van a honlapjukon, videótutorialok is, azok alapján meg lehet csinálni, még akkor is, ha nem érted minden egyes szavát.

Slyrfecso:
Lista helyett használhatsz pl. Dictionary-t, úgy string alapján meg tudnád keresni az itemet. Továbbra sem tudjuk, hogy az ItemDatabase osztályodban hogy tárolod az elemeket.

   
Slyrfecso - Tag | 44 hsz       Online status #208464   2015.10.15 16:44 GMT+1 óra  
Arra már rájöttem, hogy érem el az adatbázis egy elemét, de az index számot kellene valahogy a find GO.namel összekapcsolni.

Kód:
database = GameObject.FindGameObjectWithTag("Item Database").GetComponent<ItemDatabase>();
Debug.Log (database.items[4].itemName);

   
Csengusz - Tag | 15 hsz       Online status #208463   2015.10.15 16:32 GMT+1 óra  
Idézet
Instalok :Egyébként a Unity nem kifejezetten Androidra ad fejlesztési lehetőséget, hanem multiplatform mivolta miatt "ugyan azt" a játékot elkészítheted ios, android, windows, stb. platformokra minimális módosításokkal.



Ma beüzemeltem... minden működik. Már csináltam APK-t is tutorial alapján. Nagyon tetszik. Szeretnék minél többet megtudni a Unity-vel való játék készítésről. Tudnál/tudnátok esetleg valamit ajánlani ahonnan infót tudok szerezni magyarul?

   
Slyrfecso - Tag | 44 hsz       Online status #208462   2015.10.15 12:10 GMT+1 óra  
Jogos, remélem ez elég információ lesz.
Azt tudom, hogy ha az inventory kirajzolja a slot-okat és föléhúzom az egeret, akkor visszaadja a kívánt értéket, de azt már nem, hogyan lehet a megtalált GO.név alapján ugyanezt.

//Item
Kód:
using UnityEngine;
using System.Collections;
using System.Text.RegularExpressions;



[System.Serializable]
public class Item {

public string itemName;
public int itemID;
public string itemDesc;
public Texture2D itemIcon;
public ItemType itemType;
public GameObject itemPrefab;
public string itemPrice;

public enum ItemType {
Comfort,
Stark,
AlexStandard,
Targyalo,
PlusszTermekek,
Szekreny,
Szekek
}


public Item(string name, int id, string desc, ItemType type, string price)
{

itemName = name;
//name = Regex.Replace(name, @"[^-.aAbBcCdDlLsSoOfFjJteiIETERMÉKőŐüÜvV0-9 #!@]", "");
itemID = id;
itemDesc = desc;
itemIcon = Resources.Load<Texture2D> ("Item Icons/" + name + "_ICON");
//if(itemIcon == null)
// Debug.Log("Warning: Icon for '" + itemName + "' failed to load, please check if the file exists and the path is correct.");
itemPrefab = Resources.Load ("Prefabs/"+name) as GameObject;
itemType = type;
itemPrice = price;


}
public Item()
{

}

}



//ItemDatabase
Kód:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;


public class ItemDatabase : MonoBehaviour {
public List<Item> items = new List<Item> ();


void Start()
{

//COMFORT
items.Add(new Item("CIA-806F", 0, "íróasztal, 800 x 600 mm-es, fémlábbal, homloklap nélkül", Item.ItemType.Comfort, "32500"));
//...
}
}

   
Instalok - Tag | 543 hsz       Online status #208458   2015.10.14 11:25 GMT+1 óra  
Hát ez a saját implementációdtól függ, hogy az ItemDatabase hogyan épül fel. Simán készítened kell az itemDatabase-be egy olyan függvényt, ami a név alapján visszaadja az értéket. Hogy pontosabbat tudjunk mondani, ismernünk kellene, hogy hogyan tárolod az adatokat.

   
Slyrfecso - Tag | 44 hsz       Online status #208457   2015.10.14 11:11 GMT+1 óra  
Sziasztok!

Van ötletetek arra, hogyan tudnám a sceen-re helyezett gameobject-ekhez tartozó inventory adatbázis elemet megtalálni?
Logikailag úgy képzelem el, hogy ha gameobject neve megegyezik az adatbázisban taláható névvel, akkor az ehez tartozó itemPrice jelenjen meg.

Kód:
database = GameObject.FindGameObjectWithTag("Item Database").GetComponent<ItemDatabase>();

string txt = "";
GameObject[] objectsPrice = GameObject.FindGameObjectsWithTag("Player");
foreach (GameObject go in objectsPrice)
{
txt += go.name + "\n";
}

GUI.Label(new Rect(Screen.width / 2 - 170, 380, 60, 25), txt + "\n" + "Az összeállítás nettó ára:", szoveg);

   
Instalok - Tag | 543 hsz       Online status #208447   2015.10.12 17:31 GMT+1 óra  
A Javascript nem Java, már a szintaxisuk sem hasonlít. Sokat nem tudok a JS-ről, nem tudom mennyire típusos nyelv, stb. A C# jobban hasonlít a Java-ra, szintaxisban is, meg gondolkodásmódban is. Ha Java-n keresztül megérted az objektum-orientáltságot, meg a managelt nyelvek világát, akkor semmiség lesz Java helyett C#-ot használni.

Egyébként a Unity nem kifejezetten Androidra ad fejlesztési lehetőséget, hanem multiplatform mivolta miatt "ugyan azt" a játékot elkészítheted ios, android, windows, stb. platformokra minimális módosításokkal.

   
Csengusz - Tag | 15 hsz       Online status #208446   2015.10.12 17:25 GMT+1 óra  
Sziasztok! Még nagyon új vagyok android fejlesztés terén és játékfejlesztés céljára többek közt a Unity-t ajánlották. Elméletileg a nyelvezete C#, viszont ma elindítottam és láttam lehetőséget Javasctipt-re is. Ez azt jelenti, hogy tud Java-ul is?

Válaszaitokat előre is köszönöm.

Ui.: Bocs a láma kérdésért.

   
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 | 50 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 | 448 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 | 448 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, 780 nap)

   
Instalok - Tag | 543 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 | 1290 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 | 1290 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 | 543 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, 782 nap)

   
Instalok - Tag | 543 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, 794 nap)

   
Instalok - Tag | 543 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 | 543 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 | 543 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, 794 nap)

   
Instalok - Tag | 543 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, 794 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 | 543 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 | 448 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.

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