2017-12-04 13 views
0

이벤트 및 대표자가 처음인데 이벤트 연결 관리자, 특히 이벤트 관리자와 이벤트가 내 프로그램의 특정 단추에 어떻게 연결되는지 문제가 있습니다. 지금까지 저는 몇 명의 델리게이트를 만들었고 그 델리게이트에 가입해야하는 클래스를 만들었지 만이 시스템이 다른 장면의 버튼에 실제로 어떻게 연결되는지 알지 못합니다. 모든 것이 어떻게 작동하는지 볼 수 있도록 연결을 도와 줄 사람이 필요합니다. 고맙습니다. 여기 OnClick 이벤트를 사용하여 장면 전환

내 이벤트 매니저 클래스

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Event_Manager : MonoBehaviour 
{ 
    public static Event_Manager evt = null; // create singleton 

    public delegate void GoToStartingSceneDelegate(); 
    public static GoToStartingSceneDelegate onGoToStartingSceneDelegate; 

    public delegate void GoToSelectionSceneDelegate(); 
    public static GoToSelectionSceneDelegate onGoToSelectionSceneDelegate; 

    public delegate void GoToColoringSceneDelegate(); 
    public static GoToColoringSceneDelegate onGoToColoringSceneDelegate; 

    public delegate void GoToCaveSceneDelegate(); 
    public static GoToCaveSceneDelegate onGoToCaveSceneDelegate; 

    private void Awake() 
    { 
     if (evt == null) 
      evt = this; 
     else if (evt != null) 
      Destroy(gameObject); 

     DontDestroyOnLoad(gameObject); 
    } 

    public static void OnStartGameButtonClick() 
    { 
     Debug.Log("Start Game"); 
     if (onGoToStartingSceneDelegate != null) 
      onGoToStartingSceneDelegate(); 
    } 

    public static void OnStartOverButtonClick() 
    { 
     Debug.Log("Start Over"); 
     if (onGoToSelectionSceneDelegate != null) 
      onGoToSelectionSceneDelegate(); 
    } 

    public static void OnSendAnimalButtonClick() 
    { 
     Debug.Log("Send Animal"); 
     if (onGoToCaveSceneDelegate != null) 
      onGoToCaveSceneDelegate(); 
    } 

    public static void OnPlayAgainButtonClick() 
    { 
     Debug.Log("Play Again"); 
     if (onGoToStartingSceneDelegate != null) 
      onGoToStartingSceneDelegate(); 
    } 
} 

이며, 이것은 내가

using UnityEngine; 
using UnityEngine.UI; 
using UnityEngine.SceneManagement; 
using System.Collections; 
using UnityEngine.UI.ProceduralImage; 

    public class LoadSceneButtonController : MonoBehaviour 
    { 
     [SerializeField] public Object startingScene; 
     [SerializeField] public Object selectionScene; 
     [SerializeField] public Object coloringScene; 
     [SerializeField] public Object caveScene; 

     GameObject transitionManager; 

     public GameObject touchToPlayButton; 
     public GameObject sendAnimalToForestButton; 
     public GameObject startOverButton; 

    private void OnEnable() 
    { 
     Event_Manager.onGoToStartingSceneDelegate += GoToStartingScene; 
     Event_Manager.onGoToSelectionSceneDelegate += GoToSelectionScene; 
     Event_Manager.onGoToColoringSceneDelegate += GoToColoringScene; 
     Event_Manager.onGoToCaveSceneDelegate += GoToCaveScene; 
    } 

    private void OnDisable() 
    { 
     Event_Manager.onGoToStartingSceneDelegate -= GoToStartingScene; 
     Event_Manager.onGoToSelectionSceneDelegate -= GoToSelectionScene; 
     Event_Manager.onGoToColoringSceneDelegate -= GoToColoringScene; 
     Event_Manager.onGoToCaveSceneDelegate -= GoToCaveScene; 
    } 

    void GoToStartingScene() 
    { 
     SceneManager.LoadScene(startingScene.name.ToString()); 
    } 

    void GoToSelectionScene() 
    { 
     SceneManager.LoadScene(selectionScene.name.ToString()); 
    } 

    void GoToColoringScene() 
    { 
     SceneManager.LoadScene(coloringScene.name.ToString()); 
    } 

    void GoToCaveScene() 
    { 
     SceneManager.LoadScene(caveScene.name.ToString()); 
    } 
+0

/Events' 다음'C# 위임 Tutorial'와'C 번호 이벤트 Tutorial' – MethodMan

+0

@MethodMan에 대한 구글 검색을 수행, 내가 돈 ' 때로는 사물이 어떻게 작용하는지에 대해 이해하지 못하는 경우도 있습니다. – greyBow

+0

Google은 훌륭한 리소스입니다. – MethodMan

답변

1

귀하의 코드가 작동하지 않는 경우 해당 이벤트에 가입 꿔 클래스하지만 문제는 아무것도가 없습니다 행사 또는 대의원과 함께하십시오.

문제점은 장면 변수를 선언 한 방법입니다. 이를 위해 UnityEngine.Object을 사용하지 마십시오. 그렇게하면 네임 스페이스의 것 인 파일 만 SceneAsset으로 전송할 수 있습니다. 즉, 코드는 편집기에서 AssetDatabase 클래스로만 작동합니다.

UnityEngine.Object 대신 UnityEngine.SceneManagement을 사용하십시오. 현재 Object.nameSceneManager.LoadScene 함수에 전달하고 Object.name은 장면 이름이 아닌 객체의 이름을 참조합니다.

모두 바꾸기 :

[SerializeField] public Object startingScene; 
[SerializeField] public Object selectionScene; 
[SerializeField] public Object coloringScene; 
[SerializeField] public Object caveScene; 

public Scene startingScene; 
public Scene selectionScene; 
public Scene coloringScene; 
public Scene caveScene; 

Here

와 함께하는 이벤트와 대의원에 대한 간단한 유니티 튜토리얼입니다. 나는 당신이 코드의 그 부분이 잘 보이기 때문에 그것이 필요하다고 생각하지 않는다. 귀하의 버튼에 연결에 관해서는


, 그것은 매우 easy입니다. onClick.AddListener 버튼 이벤트에 가입하고 클릭이있을 때 Event_Manager 이벤트를 알립니다. 당신이 아직이 코드 만 쓰기는`대표단을 이해하지 않는 방법

public Button startingButton; 
public Button selectionButton; 
public Button coloringButton; 
public Button CaveButton; 

void OnEnable() 
{ 
    //Register Button Events 
    startingButton.onClick.AddListener(() => buttonCallBack(startingButton)); 
    selectionButton.onClick.AddListener(() => buttonCallBack(selectionButton)); 
    coloringButton.onClick.AddListener(() => buttonCallBack(coloringButton)); 
    CaveButton.onClick.AddListener(() => buttonCallBack(CaveButton)); 
} 

private void buttonCallBack(Button buttonPressed) 
{ 
    if (buttonPressed == startingButton) 
    { 
     Debug.Log("Clicked: " + startingButton.name); 
     Event_Manager.OnStartGameButtonClick(); 
    } 

    if (buttonPressed == selectionButton) 
    { 
     Debug.Log("Clicked: " + selectionButton.name); 
     Event_Manager.OnStartOverButtonClick(); 
    } 

    if (buttonPressed == coloringButton) 
    { 
     Debug.Log("Clicked: " + coloringButton.name); 
     Event_Manager.OnSendAnimalButtonClick(); 
    } 

    if (buttonPressed == CaveButton) 
    { 
     Debug.Log("Clicked: " + CaveButton.name); 
     Event_Manager.OnSendAnimalButtonClick(); 
    } 
}