2016-05-06 3 views
3

Так я динамически добавлять изображения в Scrollview из JSON файла/URLДобавления интерактивных геймобжекты C#

Я хотел бы сделать изображения кликабельны геймобжектами, но не имею ни малейшего представления о том, как сделать это в C# (недействительный OnMouseDown () ???)

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

Существует два способа. Сначала вы можете использовать 'Image' и помещать каждый объект в пользовательский интерфейс. Во-вторых, вы можете создавать объекты 'SpriteRenderer'. В первом случае вы можете использовать 'ScrollView', который включен в Unity UI, и использовать события для обработки ввода. –

+2

Кевин чувак, WTF? просто используйте систему пользовательского интерфейса, встроенную в Unity. То, что вы делаете, - безумие! https://unity3d.com/learn/tutorials/topics/user-interface-ui – Fattie

ответ

3

Это Image/Canvas. Вы должны избегать Raycast и OnMouseDown. Чтобы обнаружить прикосновение к изображению/холсту, вы должны получить от IPointerDownHandler или IPointerClickHandler, а затем реализовать функции из них. OnMouseDown или Raycast следует использовать только если объект представляет собой модель 3D или если объект является Sprite что НЕ под Canvas. В этом случае требуется коллайдер. В этом случае вы используете компонент Image, поэтому я предполагаю, что это находится под Canvas.

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

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

} 
+0

Эй, по какой-либо причине их следует избегать? Просто любопытно, потому что я знаю, что Raycasts довольно эффективны и могут быть вызваны много раз - это просто интерфейс, который проще в использовании? – ryrich

+0

это правильно, но im get 'Assets/scripts/clickTest.cs (5,60): ошибка CS0246: Тип или имя пространства имен' IPointerClickHandler 'не удалось найти. Вам не хватает указаний по использованию или ссылки на сборку? ' –

+1

@ryrich Их следует избегать, потому что вы используете Image/Canvas. Для этого предназначен интерфейс. Вам придется приложить коллайдер к своему изображению для Raycast и OnMouseDown для работы с компонентом Image. Это не то, как использовать компонент изображения. Вы никогда не должны прикреплять коллайдер к компоненту Image. Отходы времени и ресурсов. – Programmer

0

попытке создать объект BoxCollider2D приписываются к этому GameObject, а затем использовать

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

проверить, нет ли коллайдера в Mouse.position.

+0

oky Я добавил BoxCollider2D http://i.imgur.com/DAeYjpp.png теперь, где находится 'Physics2D.Raycast (Cam .. ..' go? –

+0

Я всегда пишу его в Update(). raycast возвращает RaycastHit2D, только если в целевой точке есть какой-либо коллайдер) ... в противном случае он возвращает false. if (HitInfo) { } – ORParga

Смежные вопросы