2016-05-06 12 views
3

So bin Hinzufügen ich Bilder dynamisch zu einem Scrollview aus einer JSON-Datei/urlHinzufügen klickbare Gameobject C#

Ich mag die Bilder machen klickbare Gameobject, haben aber keine Ahnung, wie diese # (void OnMouseDown in c zu tun (???))

IEnumerator AddFeedItem (int index) 
{ 
WWW www = new WWW (ModelURL); // img url 
yield return www; 

GameObject newsimageObject = tempFeedItem.transform.FindChild ("newsimage").gameObject; 
Image newsImage = newsimageObject.GetComponent<Image>(); 
Texture2D tempTex = photos [index % 10]; 

SpriteRenderer renderer = newsImage.GetComponent<SpriteRenderer>(); 
Sprite sprite = new Sprite(); 
sprite = Sprite.Create(www.texture, new Rect(0, 0, 455, 230),new Vector2(0, 0),100.0f); 

newsImage.sprite = sprite; 
} 
+0

Es gibt zwei Möglichkeiten. Zuerst können Sie 'Image' verwenden und jedes Objekt auf der Benutzeroberfläche platzieren. Zweitens können Sie Objekte mit 'SpriteRenderer' erstellen. Im ersten Fall können Sie "ScrollView" verwenden, das in Unity UI enthalten ist, und Ereignisse verwenden, um Eingaben zu verarbeiten. –

+2

Kevin Kumpel, WTF? Verwenden Sie einfach das in Unity integrierte UI-System. Was du tust, ist Wahnsinn! https://unity3d.com/learn/tutorials/topics/user-interface-ui – Fattie

Antwort

3

Dies ist ein Image/Canvas. Sie sollten Raycast und OnMouseDown vermeiden. Um Berührung mit Bild/Canvas zu erkennen, müssen Sie von IPointerDownHandler oder IPointerClickHandler ableiten und dann die Funktionen von ihnen implementieren. OnMouseDown oder Raycast sollte nur verwendet werden, wenn das Objekt ein 3D Modell ist oder wenn das Objekt ein Sprite die NICHT unter einem Canvas ist. In diesem Fall ist ein Collider erforderlich. In diesem Fall verwenden Sie die Image Komponente, also nehme ich an, dass dies unter Canvas ist.

public class YourClass : MonoBehaviour,IPointerDownHandler,IPointerClickHandler 
{ 
    public void OnPointerClick(PointerEventData eventData) 
    { 
     Debug.Log("Clicked"); 
    } 

    public void OnPointerDown(PointerEventData eventData) 
    { 
     Debug.Log("Down"); 
    } 

} 
+0

Hey, irgendeinen Grund, warum sie vermieden werden sollten? Nur neugierig, weil ich weiß Raycasts sind sehr effizient und kann oft aufgerufen werden - ist es nur die Schnittstelle Weg ist einfacher zu bedienen? – ryrich

+0

Das ist korrekt, aber ich bekomme Assets/scripts/clickTest.cs (5,60): Fehler CS0246: Der Typ oder Namespace-Name "IPointerClickHandler" konnte nicht gefunden werden. Vermissen Sie eine using-Direktive oder eine Assembly-Referenz? ' –

+1

@ryrich Sie sollten vermieden werden, weil Sie Image/Canvas verwenden. Das UI-Ereignis ist dafür gedacht. Sie müssen Collider an Ihrem Image für Raycast und OnMouseDown anfügen, um an einer Image-Komponente zu arbeiten. So wird die Bildkomponente nicht verwendet. Sie sollten niemals einen Collider an eine Image-Komponente anhängen. Verschwendung von Zeit und Ressourcen. – Programmer

0

Versuchen ein BoxCollider2D Objekt zu diesem Gameobject atached zu erstellen und verwenden dann

Physics2D.Raycast (Camera.main.ScreenToWorldPoint (Mouse.position), Vector2.zero);

, um zu testen, ob sich in der Mouse.position ein Collider befindet.

+0

oky ich habe jetzt die BoxCollider2D http://i.imgur.com/DAeYjpp.png hinzugefügt, wo die 'Physics2D.Raycast (Cam .. .. "gehe? –

+0

Ich schreibe es immer in Update(). Der Raycast gibt RaycadHit2D nur zurück, wenn im Zielpunkt ein Collider vorhanden ist) ... andernfalls wird false zurückgegeben. if (HitInfo) { } – ORParga

Verwandte Themen