Jump to content
Unity Insider Forum

erotec

Members
  • Posts

    144
  • Joined

  • Last visited

  • Days Won

    1

erotec last won the day on September 23 2014

erotec had the most liked content!

About erotec

  • Birthday 02/01/1980

Profile Information

  • Gender
    Male
  • Location
    Magdeburg

erotec's Achievements

Advanced Member

Advanced Member (3/3)

11

Reputation

  1. Danke für deine Antwort, das Problem ist, es gibt mit Sicherheit verschiedene Wege dies zu ermöglichen, leider fällt mir keiner dazu ein und nach stundenlanger suche im Net, war kein Code-Ansatz zu finden, den ich auch verstehe Mein Gedanke war, dass, wenn der Lokale-Player ein Item aufhebt, dass der andere Spieler dies ebenfalls erhält, nur dass dieses nicht zusehen ist in seinem Inventar und, dass es dann, sobald der Lokale-Player das Item in seine Chest packt, die transform des inaktiven Items geändert wird und das Sprite etc. wieder aktiviert wird. Ich denke aber diese Vorgehensweise ist wohl eine der schlechtesten, wenn es um Datenspeicher etc. geht. Die Möglichkeit mit der SlotId ist natürlich eine viel bessere Variante, nur müsste ich dazu, das ganze Inventar neu anpassen, aber nur allein die Slotid zu kennen wird natürlich nicht ausreichen, denn es würde das Item fehlen, welches der andere Player nicht besitzt, das würde bedeuten, der Lokale-Player müsste, sobald er sein Item in die Chest packt, dem anderen Player genauso zuweisen, und genau daran hapert es !! Leider...... Ich denke ich könnte es in meinen DragandDrop-Script ermöglichen, leider bleibt die frage wie? Hier ein Auszug des Scriptes, eventuell hast du eine Idee: public class DragAndDrop : MonoBehaviour { public Inventory inv; GameObject curSlot; Item curSlotsItem; public Image followMouseImage; private void Update() { DragAndDropM(); } public void DragAndDropM() { followMouseImage.transform.position = Input.mousePosition; if (Input.GetKeyDown(KeyCode.G)) { GameObject obj = GetObjectUnderMouse(); if (obj) obj.GetComponent<Slot>().DropItem(); } if (Input.GetMouseButtonDown(0)) { curSlot = GetObjectUnderMouse(); } else if (Input.GetMouseButton(0)) { if (curSlot) { followMouseImage.color = new Color(255, 255, 255, 255); followMouseImage.sprite = curSlot.GetComponent<Image>().sprite; } } else if (Input.GetMouseButtonUp(0)) { if (curSlot) { curSlotsItem = curSlot.GetComponent<Slot>().slotsItem; GameObject newObj = GetObjectUnderMouse(); if (newObj && newObj != curSlot) { if (newObj.GetComponent<EquipmentSlot>() && newObj.GetComponent<EquipmentSlot>().equipmenType != curSlotsItem.equipmentType) return; if (curSlot.GetComponent<Slot>().transform != curSlot.GetComponent<Slot>().transform) if (newObj.GetComponent<Slot>().slotsItem) { Item objectsItem = newObj.GetComponent<Slot>().slotsItem; if (objectsItem.itemID == curSlotsItem.itemID && objectsItem.amountInStack != objectsItem.maxStackSize && !newObj.GetComponent<EquipmentSlot>()) { inv.AddItem(curSlotsItem, objectsItem); } else { objectsItem.transform.parent = curSlot.transform; curSlotsItem.transform.parent = newObj.transform; } } else { curSlotsItem.transform.parent = newObj.transform; } GameObject newObj2 = GetObjectUnderMouse(); if (newObj2 && newObj2 == curSlot) { print("am arsch"); } } } foreach (Slot i in inv.equipSlots) { i.GetComponent<EquipmentSlot>().Equip(); } } else { followMouseImage.sprite = null; followMouseImage.color = new Color(0, 0, 0, 0); } } GameObject GetObjectUnderMouse() { GraphicRaycaster raycaster = GetComponent<GraphicRaycaster>(); PointerEventData eventData = new PointerEventData(EventSystem.current); eventData.position = Input.mousePosition; List<RaycastResult> results = new List<RaycastResult>(); raycaster.Raycast(eventData, results); foreach (RaycastResult i in results) { if (i.gameObject.GetComponent<Slot>()) { return i.gameObject; } } return null; } }
  2. Hallo, ich arbeite gerade an meinen Multiplayer Inventar, mein Problem liegt darin, dass ich eine Chest instanziiere sowie die benötigten Slots, ich kann auch Items in diese Slots droppen, allerdings sieht der andere Spieler die Items nicht. Ich muss dazu sagen, dass ich, was Photon angeht, ein Neuling bin, besitze somit nur Grundkenntnisse, daher meine Frage, wie kann ich es möglich machen, dass der andere Spieler die Items in der Chest sieht und nutzen kann? Das Inventar, also das Grundgerüst wird „gemeinsam“ verwendet, da es nicht auf dem Player liegt, sondern jeder Player die Instanz dazu aus der Hierarchie(Serverseitig) erhält, das Chest-Inventar wird von jedem Player nach dem Placement selber Instanziiert(gleiche Hierarchie wie das Haupt-Inventar in Canvas-Transform) die Slots werden dann in dem Haupt-Inventar jeweils hinterlegt und können belegt werden, bis dahin funktioniert alles super (war ein harter Kampf ) das Inventar, Items etc. sind keine Scriptable-Objects, arbeite auch nicht mit Containern etc. obwohl die Chests welche sein sollten. Gibt es überhaupt eine Möglichkeit, bei diesem Aufbau, das Item nur in der Chest dem anderen Spieler zugänglich zu machen, eventuell über eine RPC Methode und AddItem oder per Transform Sync... ? Wäre für jede Hilfe DANKBAR!!!!
  3. Hallo , habe nur eine kurze frage ,wie kann ich ein Object was auf der Camera liegt ,so verändern ,dass dieses Object dennoch immer die Position der Hand folgt? Ich weiß einige werden schreiben lege das Object doch in dir Hand ... ja aber das will ich ja eben nicht ich weiß ja nicht ob das was ich mir denke sinnvoll ist wie z.b. das ich eine variable als transform anlege wo sagen wir mal die Hand Position drin steckt oder halt das Object. Und ich dann sage Object A = (Position etc.) Object B??? Hat sich erledigt! hier der Code: cameraPlatz.transform.parent = waffenPlatz; cameraPlatz.transform.localPosition = Vector3.zero; cameraPlatz.transform.localRotation = Quaternion.identity;
  4. Hi , Ich komme aus Magdeburg ....und dachte melde mich hier mal an! und schaue mal ob es jemanden hier gibt der einen Helfen kann
  5. Hallo, habe da ein echtes Prob ,ich will meine Animationen aus dem Animator im Netzwerk Synchronisieren aber habe keine Ahnung wie! Vielleicht kann mir hier jemand Helfen! Hier mein Script unten weiter habe ich etwas mit RPC versucht ohne wirklichen erfolg weil es denke mal komplett falsch ist;) using UnityEngine; using System.Collections; using UnityEngine.UI; // WICHTIG für neue GUI!!! public class waffenwechselscript : MonoBehaviour { // Waffenprefabs private GameObject MesserObj; // mein MesserObjprefab private GameObject AxtObj; // mein Axtprefab private GameObject FlinteObj; // mein Flintenprefab private GameObject PistoleObj; private GameObject jetztWaffe; // meine referenz zum Waffenprefab public Transform messerPlatz; // der Platz den MesserObj und Axt einnehmen sollen public Transform flintePlatz; // der Platz den die Flinte einnehmen soll public Transform axtPlatz; public Transform pistolePlatz; // diese Waffe halte ich gerade private bool messer; private bool axt; private bool flinte; private bool pistole; // diese Waffe habe ich im Inventar private bool habeMesser; private bool habeFlinte; private bool habeAxt; private bool habePistole; // die Animatorkomponente private Animator anim; //NEU public Transform ablagePunkt; // wo die Objekte beim Ablegen entstehen // Inventar Variablen public GameObject[] Buttons =new GameObject[4];// Das ButtonGameObjekct des InventoryButtons private Image[] bIMG; // das Bild des InventoryButtons private Button[] bBUT; // der Button selbst public Sprite buttonLeer; // das Bild für einen leeren Slot im Inventory // Mein InventoryArray public InvObjekt[] inventorys; // Array für die Scriptable Objects public int[] invPatronen; // Array für die Patronen der Waffe public bool objektNeu; // neues Objekt ist dazu gekommen public int neuWo; // wo kommt das neue Objekt hin private bool objektWeg; // ich lege gerade ein Objekt weg public bool mitE; // soll mit Taste E aufgenommen werden public bool mitCollider; // soll beim drüberlaufen aufgenommen werden public Text anzeigeText; // zeige wie momentan aufgenommen wird void Start () { // hol dir den Animator anim=GetComponent<Animator>(); // zu Beginn habe ich keine waffen habeAxt=false; habeMesser=false; habeFlinte=false; habePistole=false; // Inventar vorbereiten inventorys=new InvObjekt[buttons.Length]; // setze die länge des Arrays invPatronen=new int[buttons.Length]; // setze Arraylänge für die Patronen in den Waffen bIMG=new Image[buttons.Length]; // Arraylänge für die Buttongrafiken setzen bBUT=new Button[buttons.Length]; // Arraylänge für die Buttoneigenschaften setzen for(int b=0;b<Buttons.Length;b++){ // Arrays durchlaufen bIMG=Buttons.GetComponent<Image>(); // komponente holen bBUT=Buttons.GetComponent<Button>(); // komponente holen bIMG.sprite=buttonLeer; // Grafik für leeren Slot übergeben bBUT.interactable=false; // Buttons inaktiv schalten } } // Update is called once per frame void Update () { if (objektNeu) { // ich bekomme gerade ein neues Objekt ins Inventar objektNeu = false; bIMG [neuWo].sprite = inventorys [neuWo].icon; // Icon übernehmen bBUT [neuWo].interactable = true; // Button aktivieren if (inventorys [neuWo].istWaffe) { // wenn es eine Waffe ist switch (inventorys [neuWo].waffenArt) { // Art ermitteln case(InvObjekt.waffenTyp.Messer): { // wenn Messer habeMesser = true; // dann habe ich ein Messer MesserObj = inventorys [neuWo].handPrefab; // übergib das Prefab an meine Variable break; } case(InvObjekt.waffenTyp.Axt): { habeAxt = true; AxtObj = inventorys [neuWo].handPrefab; break; } case(InvObjekt.waffenTyp.Flinte): { habeFlinte = true; FlinteObj = inventorys [neuWo].handPrefab; break; } case(InvObjekt.waffenTyp.Pistole): { habePistole = true; PistoleObj = inventorys [neuWo].handPrefab; break; } } } } if (objektWeg) { // eben ist ein Objekt abgelegt worden objektWeg = false; for (int k=0; k<inventorys.Length; k++) { // Array abfahren um Änderungen vorzunehmen //print (k); if (inventorys [k] == null) { bIMG [k].sprite = buttonLeer; // leere Grafik bBUT [k].interactable = false; // nicht mehr nutzbar } else if (inventorys [k].istWaffe) { // schauen ob wir Waffen haben und wenn ja Variablen setzen if (inventorys [k].waffenArt == InvObjekt.waffenTyp.Messer) { habeMesser = true; } if (inventorys [k].waffenArt == InvObjekt.waffenTyp.Axt) { habeAxt = true; } if (inventorys [k].waffenArt == InvObjekt.waffenTyp.Flinte) { habeFlinte = true; } if (inventorys [k].waffenArt == InvObjekt.waffenTyp.Pistole) { habePistole = true; } } } } if (Input.GetKeyDown (KeyCode.Alpha2) && habeMesser && !messer) { //hab ich ein MesserObj, halte es aber noch nicht axt = false; // ich halte keine Axt messer = true; // ab jetzt halte ich ein MesserObj flinte = false;// ich halte keine Flinte pistole = false; anim.SetBool ("messer", true); // ab jetzt die messeranimation abspielen anim.SetBool ("flinte", false); anim.SetBool ("pistole", false); anim.SetBool ("axt", false); anim.SetBool ("wechsel", true); // damit wir in die Übergabeanimation kommen und dort dann die Funkt. aufgerufen wird } if (networkView.isMine) { if (Input.GetKeyDown (KeyCode.Alpha3) && habeAxt && !axt) { axt = true; messer = false; flinte = false; pistole = false; anim.SetBool ("messer", false); anim.SetBool ("flinte", false); anim.SetBool ("pistole", false); anim.SetBool ("axt", true); anim.SetBool ("wechsel", true); networkView.RPC ("SyncAnimator", RPCMode.AllBuffered, "axt"); networkView.RPC ("SyncAnimator", RPCMode.AllBuffered, "wechsel"); } if (Input.GetKeyDown (KeyCode.Alpha1) && habeFlinte && !flinte) { //hab ich eine Flinte, halte sie aber noch nicht axt = false; // ich halte keine Axt messer = false; // ab jetzt halte ich ein MesserObj flinte = true;// ich halte keine Flinte pistole = false; anim.SetBool ("messer", false); // ab jetzt die messeranimation abspielen anim.SetBool ("flinte", true); anim.SetBool ("pistole", false); anim.SetBool ("axt", false); anim.SetBool ("wechsel", true); // damit wir in die Übergabeanimation kommen und dort dann die Funkt. aufgerufen wird } if (Input.GetKeyDown (KeyCode.Alpha4) && habePistole && !pistole) { //hab ich eine Flinte, halte sie aber noch nicht axt = false; // ich halte keine Axt messer = false; // ab jetzt halte ich ein MesserObj flinte = false;// ich halte keine Flinte pistole = true; anim.SetBool ("messer", false); // ab jetzt die messeranimation abspielen anim.SetBool ("flinte", false); anim.SetBool ("pistole", true); anim.SetBool ("axt", false); anim.SetBool ("wechsel", true); // damit wir in die Übergabeanimation kommen und dort dann die Funkt. aufgerufen wird } } } void Gewechselt(){ // kommt von der Animation "keineWaffe" if(jetztWaffe!=null){ // hatte ich schon eine Waffe, dann zerstöre sie Destroy(jetztWaffe); } if (networkView.isMine == true) { if (axt) { // ich habe zur Axt gewechselt jetztWaffe = Instantiate (AxtObj, axtPlatz.position, axtPlatz.rotation) as GameObject; //instanziere die Waffe am rechten Platz und übergib sie auch der Variable jetztWaffe.transform.parent = axtPlatz; networkView.RPC("Gewechselt", RPCMode.AllBuffered, "axt"); // mache die Waffe zum Chlid des messerPlatzes } } if(messer){ // ich habe zum MesserObj gewechselt jetztWaffe=Instantiate(MesserObj,messerPlatz.position,messerPlatz.rotation) as GameObject; jetztWaffe.transform.parent=messerPlatz; } if(flinte){ // ich habe zur Flinte gewechselt jetztWaffe=Instantiate(FlinteObj,flintePlatz.position,flintePlatz.rotation) as GameObject; jetztWaffe.transform.parent=flintePlatz; } if(pistole){ // ich habe zur Flinte gewechselt jetztWaffe=Instantiate(PistoleObj,pistolePlatz.position,pistolePlatz.rotation) as GameObject; jetztWaffe.transform.parent=pistolePlatz; } //wechsel ist fertig anim.SetBool("wechsel",false); } //NEU public void KolliderAufnahme(){ // Wird vom Button rein gesprungen mitCollider=true; mitE =false; anzeigeText.text="Drüber laufen"; // Übergib Text an das Textfeld } public void NaheAufnahme(){ // Wird vom Button rein gesprungen mitE=true; mitCollider=false; anzeigeText.text="Mit E aufnehmen"; } [RPC] public void Ablegen(int nummer){// Wird vom Inventory-Button rein gesprungen // Objekt instanzieren und wenn Waffe auch Anzahl der Patronen übergeben GameObject obj = Instantiate (inventorys [nummer].szenenPrefab, ablagePunkt.position, Quaternion.identity)as GameObject; if (inventorys [nummer].istWaffe) { ObjektInfo script = obj.GetComponent<ObjektInfo> (); script.patronen = invPatronen [nummer]; // schauen welche Art Waffe es war und erst mal Variable löschen und Animation ändern switch (inventorys [nummer].waffenArt) { // Art ermitteln case(InvObjekt.waffenTyp.Messer): { habeMesser = false; if (messer) { anim.SetBool ("wechsel", true); anim.SetBool ("messer", false); messer = false; } break; } case(InvObjekt.waffenTyp.Axt): { habeAxt = false; if (axt) { anim.SetBool ("wechsel", true); anim.SetBool ("axt", false); axt = false; } break; } case(InvObjekt.waffenTyp.Flinte): { habeFlinte = false; if (flinte) { anim.SetBool ("wechsel", true); anim.SetBool ("flinte", false); flinte = false; } break; } case(InvObjekt.waffenTyp.Pistole): { habePistole = false; if (pistole) { anim.SetBool ("wechsel", true); anim.SetBool ("pistole", false); flinte = false; } break; } invPatronen [nummer] = 0; // Arrayplatz auf 0 setzen (ist abre nicht so wichtig) } inventorys [nummer] = null; // Inventoryplatz löschen, egal ob Waffe oder nicht objektWeg = true; // Variable setzen, damit im nächsten Update der Button bearbeitet wird } } void OnNetworkInstantiate(NetworkMessageInfo info) { if (networkView.isMine) anim.SetBool ("axt", false); else anim.SetBool ("axt", true); } [RPC] void SyncAnimator(float value, string name) { anim.SetFloat(name, value); } }
  6. Sorry aber leider ist das bei den meisten oder allen Deutschen Tuts so. aber es wäre super wenn du das weiter machen würdest
  7. Teil 3 Brauch dann schon 7 Monate Es gibt so gesehen viele Deutsche Video Tuts ,aber keiner bringt das zu ende was er Angefangen hat tzz echt Traurig!!!! Aber typisch Deutsch!
×
×
  • Create New...