2017-12-06 3 views
0

UnityEvent에 대해 읽었으며 구현하려고합니다.프리 프레임에서 UnityEvent에 리스너를 프로그램 방식으로 추가하는 방법

GameObject "ScriptsHolder"에 첨부 된 "GameController.cs"스크립트와 "target"이라는 Prefab GameObject에 첨부 된 "target.cs"스크립트가 있습니다.

"대상"시작에 현장에없는 : I가 "target0", "이 target1을", 이름이 변경되어 특정 지점에서 여러 대상을 시작 ...

대상이 피해를받는

, I GameController.cs에 이름을 보내려고합니다. GameController.cs에는 해당 객체를 파괴하는 void가 있습니다. 가 여기에 내가했던 일이야 :

target.cs :

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

public class target : MonoBehaviour { 

     public UnityEvent damageEvent; 

    void Damage(float damage) 
    { 
     damageEvent.Invoke(); 
    }   
} 

다음, 내 목표 조립식에와 관리자의 클릭, 나는 손상 이벤트에 "ScriptsHolder"를 추가하려고합니다. 여기 내 문제가있다 : 나는 ScriptsHolder를 Damage Event에 놓을 수 없다. 일부 테스트와 그 이유는 "목표"가 아직 내 장면에 없다는 사실 인 것 같습니다.

그래서 리스너를 추가하는 방법에 대해 읽었지 만이를 수행하는 방법을 알 수는 없습니다. "GameController.cs"에서 여기에 내가 무엇을

:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.Events; 
public class GameController : MonoBehaviour { 
UnityEvent damageEvent; 
void Awake() 
{ 
    damageEvent.AddListener(targetReceivedDamage); 
} 
void targetReceivedDamage() 
{ // do some stuff } 
} 

하지만 그건 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 또는 "대상"이 장면 안에 있지 않더라도 어떻게 ScriptsHolder를 손상 이벤트에 추가 할 수 있습니까?

도움을 주시면 감사하겠습니다.

답변

2

대상 개체를 인스턴스화 할 때 수신기를 추가해야합니다. 예 :

조립식 선언을 대상 유형으로 변경하고 속성에서 대상 프리 패브를 다시 지정하십시오.

public Target targetPrefab; 

다음

Target target = Instantiate(targetPrefab); 

target.damageEvent.AddListener(targetReceivedDamage); 

희망이 있습니다 :) 답장을 보내

+0

감사합니다 도움이되지만 작동 할 수 없습니다 ... 그것은 말한다 :' "UnityEngine.GameObject는 포함되어 있지 않습니다 damageEvent "에 대한 정의" – binoculars

+0

Prefab을 Target으로 선언해야합니다. 또는 인스턴스화 된 객체에서 구성 요소를 가져와야합니다. –

관련 문제