2016-06-22 3 views
0

위와 같이 몇 가지 이벤트 (클릭 또는 몇 초 후)를 수행 할 때 ImageButton의 이미지를 변경하고 싶습니다. 내가 버튼을 클릭하면 무언가를 할 때 ImageButton 이미지를 영구 변경하십시오.

void OnclkMe(GameObject go) 
{ 
    go.GetComponentInChildren<UISprite>().spriteName = "NumCard_01"; 
} 

는, 그것은 잘 작업처럼 보이지만 변경된 이미지는 첫 번째 이미지로 다시 변경 될 때 버튼의 밖으로 mousepoint 이동합니다.

Debug.Log func을 사용하여 spriteName을 테스트 한 결과 스프라이트가 자동으로 다시 변경되었는지 확인했습니다.

일부 이벤트가 영구적으로 발생하면 어떻게 ImageButton의 이미지를 변경할 수 있습니까?

+0

atlast에 'NumCard_01'이 있는지 확인하십시오. 또한 대/소문자를 구분합니다. 이것이 새로운 프로젝트라면 NGUI를 사용하지 않아야합니다. 새로운 Unity UI를 사용해야합니다. 예외는 게임 전체가 NGUI로 이미 만들어 졌을 때입니다. – Programmer

+0

아틀라스에 NumCard_01이 (가) 있습니다. 개발 기간을 줄이고 싶기 때문에 NGUI를 사용했습니다 ....하지만 ...이게 나를 괴롭히는 것입니까? 내 프로젝트는 아직 초기 단계입니다. –

+0

마치 보입니다. 많은 사람들이 Unity의 uGUI를 채택하면 언제든지 중단 될 수 있습니다. 나는 'Daikon Forge'를 사용했다. 그것은 굉장했지만 Unity가 나왔을 때 UI로 바꿨습니다. 몇 달 후, 'Daikon Forge'는 단종되어 더 이상 업데이트되지 않습니다. 사실 사람들이 구매를 중단하면 게시자가 업데이트를 계속할 시간과 자원이 없습니다. – Programmer

답변

1

새로운 프로젝트의 경우 Unity의 새로운 UI 시스템 인 uGUI를 사용해야합니다.

단추 이벤트에 Button.onClick.AddListener(() => callbackFunction())으로 등록 할 수 있으며 Button.image.sprite = newSprite;을 사용하여 단추의 이미지에서 스프라이트를 변경할 수 있습니다. 스크립트 상단에 using UnityEngine.UI;을 포함해야합니다.

public Button button1; 
public Button button2; 

public Sprite newSprite; 

void OnEnable() 
{ 
    //Register Button Events 
    button1.onClick.AddListener(() => buttonCallBack(button1)); 
    button2.onClick.AddListener(() => buttonCallBack(button2)); 
} 

private void buttonCallBack(Button buttonPressed) 
{ 
    if (buttonPressed == button1) 
    { 
     //Your code for button 1 
     buttonPressed.image.sprite = newSprite; 
    } 

    if (buttonPressed == button2) 
    { 
     //Your code for button 2 
    } 
} 

void OnDisable() 
{ 
    //Un-Register Button Events 
    button1.onClick.RemoveAllListeners(); 
    button2.onClick.RemoveAllListeners(); 
} 
+0

이벤트보다 'AddListener' 익명 함수를 수행하는 것이 똑같은 성능입니까? – matiaslauriti

+0

@ P0lT10n 성능이 좋기 때문에 언제든지 Unity에서 이벤트를 사용하는 것이 좋습니다. 'AddListener'는 버튼으로 이벤트를 만들기 쉽도록 만들어졌습니다. 초당 2 백만회의 버튼을 클릭하지 않기 때문에 'AddListener'를 사용하면 성능이 저하되지 않습니다. – Programmer

관련 문제