Ich Geschrieben 30. April 2017 Melden Share Geschrieben 30. April 2017 Hey, wenn ich auf einen Button klicke wo der Script drinnen ist, wird der Button kleiner und wenn ich loslasse wird er größer, aber auch wenn ich nicht auf den Button klicke sondern wo anderst, wird es aufgeführt und das möchte ich nicht. Ich möchte dass es nur ausgeführt wird wenn ich auf den Button klicke, wie im OnClick Event nur möchte ich das Scripten. Die frage nur wie? using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBehaviourScript : MonoBehaviour { public Vector2 newPos; public Vector2 Normal = new Vector2 (1, 1); public Vector2 Pressed = new Vector2 (0.95f, 0.95f); void Start(){ newPos = Normal; } public void Update() { if (Input.GetMouseButtonDown (0)){ newPos = Pressed; } transform.localScale = Vector2.Lerp (transform.localScale, newPos, Time.deltaTime * 10f); if (Input.GetMouseButtonUp (0)){ newPos = Normal; } transform.localScale = Vector2.Lerp (transform.localScale, newPos, Time.deltaTime * 10f); } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 30. April 2017 Melden Share Geschrieben 30. April 2017 Nimm den Teil raus: if (Input.GetMouseButtonDown (0)){ WasAuchImmer(); } und baue eine neue Funktion public void Blub() { WasAuchImmer(); } Und dann rufe Blub im OnClick-Event des Buttons auf. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ich Geschrieben 30. April 2017 Autor Melden Share Geschrieben 30. April 2017 vor 2 Minuten schrieb Sascha: Nimm den Teil raus: if (Input.GetMouseButtonDown (0)){ WasAuchImmer(); } und baue eine neue Funktion public void Blub() { WasAuchImmer(); } Und dann rufe Blub im OnClick-Event des Buttons auf. Wie gesagt ich möchte das nicht mit dem OnClick-Event machen sondern Scripten Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
FileStriker Geschrieben 30. April 2017 Melden Share Geschrieben 30. April 2017 using System.Collections; using UnityEngine; using UnityEngine.EventSystems; public class ButtonScale : MonoBehaviour, IPointerDownHandler, IPointerUpHandler // Die Handler sind nötig, damit ihre Functionen aufgerufen werden { public void OnPointerDown(PointerEventData eventData) { StopAllCoroutines(); StartCoroutine(Scale(new Vector3(0.95f, 0.95f, 0.95f))); } public void OnPointerUp(PointerEventData eventData) { StopAllCoroutines(); StartCoroutine(Scale(Vector3.one)); } IEnumerator Scale(Vector3 scale) //Diese Funktion wird jeden Frame aufgerufen, bis der Button die gewünste größe hat { while (transform.localScale != scale) { transform.localScale = Vector3.Lerp(transform.localScale, scale, Time.deltaTime * 10f); yield return new WaitForEndOfFrame(); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ich Geschrieben 30. April 2017 Autor Melden Share Geschrieben 30. April 2017 vor 48 Minuten schrieb FileStriker: using System.Collections; using UnityEngine; using UnityEngine.EventSystems; public class ButtonScale : MonoBehaviour, IPointerDownHandler, IPointerUpHandler // Die Handler sind nötig, damit ihre Functionen aufgerufen werden { public void OnPointerDown(PointerEventData eventData) { StopAllCoroutines(); StartCoroutine(Scale(new Vector3(0.95f, 0.95f, 0.95f))); } public void OnPointerUp(PointerEventData eventData) { StopAllCoroutines(); StartCoroutine(Scale(Vector3.one)); } IEnumerator Scale(Vector3 scale) //Diese Funktion wird jeden Frame aufgerufen, bis der Button die gewünste größe hat { while (transform.localScale != scale) { transform.localScale = Vector3.Lerp(transform.localScale, scale, Time.deltaTime * 10f); yield return new WaitForEndOfFrame(); } } } Ok danke und wie geht das noch mit den Positionen anstatt Scale? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
FileStriker Geschrieben 30. April 2017 Melden Share Geschrieben 30. April 2017 einfach Scale durch Position austauschen, oder wenn du beides gleichzeitig ändern möchtest kannst du der Funktion noch ein weitern Vector3 mit der Position als Argument hinzufügen also z.B: IEnumerator Change(Vector3 scale, Vector3 position) //Diese Funktion wird jeden Frame aufgerufen, bis der Button die gewünste größe hat { while (transform.localScale != scale && transform.localPosition = position) { transform.localScale = Vector3.Lerp(transform.localScale, scale, Time.deltaTime * 10f); transform.localPosition = Vector3.Lerp(transform.localPosition, position, Time.deltaTime * 10f); yield return new WaitForEndOfFrame(); } } Dann würde ich aber auch den Namen der Funktion ändern o.O Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ich Geschrieben 30. April 2017 Autor Melden Share Geschrieben 30. April 2017 Ok ich merke gerade das wenn ich den Button gedrückt halte und mit der Maus runter von Button geh, ändern sich die Scales nicht und bleiben bei 0.95 bis ich loslasse... Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 30. April 2017 Melden Share Geschrieben 30. April 2017 vor 2 Stunden schrieb Ich: Wie gesagt ich möchte das nicht mit dem OnClick-Event machen sondern Scripten Das OnClick-Event ist auch nur Code. Wenn du über Code etwas zum Event hinzufügen willst, dann mach das. button.onClick.AddListener(Zeug); Gänzlich zu sagen "ich will das onClick-Event nicht benutzen", obwohl es genau dafür da ist, ist wie zu fragen, wie man Suppe ohne Löffel essen kann. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ich Geschrieben 30. April 2017 Autor Melden Share Geschrieben 30. April 2017 vor 24 Minuten schrieb Sascha: Das OnClick-Event ist auch nur Code. Wenn du über Code etwas zum Event hinzufügen willst, dann mach das. button.onClick.AddListener(Zeug); Gänzlich zu sagen "ich will das onClick-Event nicht benutzen", obwohl es genau dafür da ist, ist wie zu fragen, wie man Suppe ohne Löffel essen kann. Aber es wird doch nur erkannt wenn ich loslasse oder? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 30. April 2017 Melden Share Geschrieben 30. April 2017 Ach DA liegt der Hund begraben! Es sah bisher immer so aus, als würdest du einfach nur den Drag & Drop-Schritt im Editor vermeiden wollen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
FileStriker Geschrieben 30. April 2017 Melden Share Geschrieben 30. April 2017 using System.Collections; using UnityEngine; using UnityEngine.EventSystems; public class ButtonScale : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerEnterHandler { public bool isClick = false; public void OnPointerDown(PointerEventData eventData) { isClick = true; StopAllCoroutines(); StartCoroutine(Scale(new Vector3(0.95f, 0.95f, 0.95f))); } public void OnPointerEnter(PointerEventData eventData) { if (isClick) { StopAllCoroutines(); StartCoroutine(Scale(new Vector3(0.95f, 0.95f, 0.95f))); } } public void OnPointerExit(PointerEventData eventData) { if (isClick) { StopAllCoroutines(); StartCoroutine(Scale(Vector3.one)); } } public void OnPointerUp(PointerEventData eventData) { isClick = false; StopAllCoroutines(); StartCoroutine(Scale(Vector3.one)); } IEnumerator Scale(Vector3 scale) { while (transform.localScale != scale) { transform.localScale = Vector3.Lerp(transform.localScale, scale, Time.deltaTime * 10f); yield return new WaitForEndOfFrame(); } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ich Geschrieben 30. April 2017 Autor Melden Share Geschrieben 30. April 2017 Ok wenn ich an den Rand klicke und gedrückte halte wird es kleiner doch dann aber wieder größer da ich nicht mehr auf dem Button bin da er ja kleiner wird und das immer wieder... Ich benutze als Bild die Image (Script) komponente falls das hilft Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
FileStriker Geschrieben 30. April 2017 Melden Share Geschrieben 30. April 2017 Dann würde ich das So lösen: Du hast ein Parent Object mit der Größe vom Butto und weist das Script zu. Nun änderst du aber nicht die Größe von dem Object, das das Scrip trägt, sondern verweist auf den Button bzw. das Image (das Child Object), da du die Unity Button Komponente ja im Prinzip nicht mehr brauchst (das regelt ja das Script). Edit: Das Parent Object benötigt noch eine Image Komponente, da es sonst nicht funktioniert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.