Help translate C# to JS

Hi Guys,

I have read some code on C# on the forum but I don’t know how to write it in JS. I tryed a few combinations but it did not seems to work:

EventTrigger trigger = UIElement.GetComponent<EventTrigger>();
 EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerClick;
entry.callback = new EventTrigger.TriggerEvent();
UnityEngine.Events.UnityAction<BaseEventData> call = new UnityEngine.Events.UnityAction<BaseEventData>(TestFunc);
entry.callback.AddListener(call);
trigger.delegates.Add(entry);

Here’s what I got so far:

var trigger : EventTrigger = obj.AddComponent(EventTrigger);
var entry: EventTrigger.Entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerClick;
entry.callback = new EventTrigger.TriggerEvent();

This line is my main problem:

UnityEngine.Events.UnityAction<BaseEventData> call = new  UnityEngine.Events.UnityAction<BaseEventData>(TestFunc);

Thanks!

C# first line, JS second line:

EventTrigger trigger = UIElement.GetComponent<EventTrigger>();
var trigger = UIElement.GetComponent(EventTrigger);

EventTrigger.Entry entry = new EventTrigger.Entry();
var entry = new EventTrigger.Entry();

entry.eventID = EventTriggerType.PointerClick;
entry.eventID = EventTriggerType.PointerClick;

entry.callback = new EventTrigger.TriggerEvent();
entry.callback = new EventTrigger.TriggerEvent();

UnityEngine.Events.UnityAction<BaseEventData> call = new UnityEngine.Events.UnityAction<BaseEventData>(TestFunc); // This is why type inference was invented....
var call = new UnityEngine.Events.UnityAction.<BaseEventData>(TestFunc);

entry.callback.AddListener(call);
entry.callback.AddListener(call);

trigger.delegates.Add(entry);
trigger.delegates.Add(entry);

–Eric

Thank you very much Eric!

But when I ran the code I got an error message about the last line, do you know why?

NullReferenceException: Object reference not set to an instance of an object

For what I understand trigger should be pointing to a valid gameobject and to EventTrigger component. When i print trigger before this last line it says it is an Event Trigger, and on the inspector the eventtrigger has been added to my gameobject.

Thanks again!

Not really sure without seeing actual code in a project.

–Eric

Eric,

I created a new project with one UI image on the canvas with the name “myobj”.

Then I pretty much had just the code above. But here goes all the code and the same error. Could it be a Bug?

#pragma strict

import UnityEngine.UI;
import System;
import System.Collections.Generic;

import UnityEngine.EventSystems;
import UnityEngine.Events;
import UnityEngine.GameObject;

function Start () {

    var obj = GameObject.Find("myobj");
  
    var events = obj.AddComponent(EventTrigger);
    var trigger = obj.GetComponent(EventTrigger);
    var entry = new EventTrigger.Entry();
    entry.eventID = EventTriggerType.PointerClick;
    entry.callback = new EventTrigger.TriggerEvent();
    var call = new UnityEngine.Events.UnityAction.<BaseEventData>(TestFunc);
    entry.callback.AddListener(call);
    trigger.delegates.Add(entry);


}

function TestFunc(){

    Debug.Log("Hello World");

}

Not sure why you’re getting the EventTrigger component twice; that should be:

var trigger = obj.AddComponent(EventTrigger);

Anyway, the null reference is because trigger.delegates is null so you can’t add to it. Not a bug; the same thing would happen in C#. You’d have to initialize it as an EventTrigger.Entry list.

–Eric

Eric I tried to look at the forum on how to do it. And also the link about the lists, but after a few failures would help me on the code to initialize it?

My last try was:

var eventTrigger = new List.<EventTrigger>(gameObject.GetComponent(EventTrigger)) ;

Thanks for the great help!

var eventTrigger = new List.<EventTrigger.Entry>();

–Eric

Eric, thank you, but I am really sorry to bother you one more time (hope it’s the last).

I tryed to initialize but I think I got a bit confused. I tried this:

// I have changed lines 4, 10 and 11
var obj = GameObject.Find("myobj");
var events = obj.AddComponent(EventTrigger);
var eventTrigger = new List.<EventTrigger.Entry>();
var entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerClick;
entry.callback = new EventTrigger.TriggerEvent();
var call = new UnityEngine.Events.UnityAction.<BaseEventData>(TestFunc);
entry.callback.AddListener(call);
eventTrigger.Add(entry);
events.delegates.Add(eventTrigger);

But still got the same error… Pls help me one more time this is driving me nuts!!

Sorry, I wasn’t paying attention to the “var eventTrigger” thing. That shouldn’t exist; what I said was trigger.delegates is null. That’s what you need to initialize, not make a new variable. Go back to your original code, and initialize trigger.delegates as an EventTrigger.Entry list.

–Eric

Thanks!!!

It worked!