Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. Dismiss Notice

Help translate C# to JS

Discussion in 'Scripting' started by FirebladeBR, Dec 16, 2014.

  1. FirebladeBR

    FirebladeBR

    Joined:
    Apr 21, 2014
    Posts:
    65
    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:

    Code (CSharp):
    1. EventTrigger trigger = UIElement.GetComponent<EventTrigger>();
    2.  EventTrigger.Entry entry = new EventTrigger.Entry();
    3. entry.eventID = EventTriggerType.PointerClick;
    4. entry.callback = new EventTrigger.TriggerEvent();
    5. UnityEngine.Events.UnityAction<BaseEventData> call = new UnityEngine.Events.UnityAction<BaseEventData>(TestFunc);
    6. entry.callback.AddListener(call);
    7. trigger.delegates.Add(entry);
    Here's what I got so far:

    Code (JavaScript):
    1. var trigger : EventTrigger = obj.AddComponent(EventTrigger);
    2. var entry: EventTrigger.Entry = new EventTrigger.Entry();
    3. entry.eventID = EventTriggerType.PointerClick;
    4. entry.callback = new EventTrigger.TriggerEvent();
    This line is my main problem:

    Code (CSharp):
    1. UnityEngine.Events.UnityAction<BaseEventData> call = new  UnityEngine.Events.UnityAction<BaseEventData>(TestFunc);

    Thanks!
     
  2. Eric5h5

    Eric5h5

    Volunteer Moderator Moderator

    Joined:
    Jul 19, 2006
    Posts:
    32,398
    C# first line, JS second line:

    Code (CSharp):
    1. EventTrigger trigger = UIElement.GetComponent<EventTrigger>();
    2. var trigger = UIElement.GetComponent(EventTrigger);
    3.  
    4. EventTrigger.Entry entry = new EventTrigger.Entry();
    5. var entry = new EventTrigger.Entry();
    6.  
    7. entry.eventID = EventTriggerType.PointerClick;
    8. entry.eventID = EventTriggerType.PointerClick;
    9.  
    10. entry.callback = new EventTrigger.TriggerEvent();
    11. entry.callback = new EventTrigger.TriggerEvent();
    12.  
    13. UnityEngine.Events.UnityAction<BaseEventData> call = new UnityEngine.Events.UnityAction<BaseEventData>(TestFunc); // This is why type inference was invented....
    14. var call = new UnityEngine.Events.UnityAction.<BaseEventData>(TestFunc);
    15.  
    16. entry.callback.AddListener(call);
    17. entry.callback.AddListener(call);
    18.  
    19. trigger.delegates.Add(entry);
    20. trigger.delegates.Add(entry);
    --Eric
     
  3. FirebladeBR

    FirebladeBR

    Joined:
    Apr 21, 2014
    Posts:
    65
    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!
     
  4. Eric5h5

    Eric5h5

    Volunteer Moderator Moderator

    Joined:
    Jul 19, 2006
    Posts:
    32,398
    Not really sure without seeing actual code in a project.

    --Eric
     
  5. FirebladeBR

    FirebladeBR

    Joined:
    Apr 21, 2014
    Posts:
    65
    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?

    Code (JavaScript):
    1. #pragma strict
    2.  
    3. import UnityEngine.UI;
    4. import System;
    5. import System.Collections.Generic;
    6.  
    7. import UnityEngine.EventSystems;
    8. import UnityEngine.Events;
    9. import UnityEngine.GameObject;
    10.  
    11. function Start () {
    12.  
    13.     var obj = GameObject.Find("myobj");
    14.  
    15.     var events = obj.AddComponent(EventTrigger);
    16.     var trigger = obj.GetComponent(EventTrigger);
    17.     var entry = new EventTrigger.Entry();
    18.     entry.eventID = EventTriggerType.PointerClick;
    19.     entry.callback = new EventTrigger.TriggerEvent();
    20.     var call = new UnityEngine.Events.UnityAction.<BaseEventData>(TestFunc);
    21.     entry.callback.AddListener(call);
    22.     trigger.delegates.Add(entry);
    23.  
    24.  
    25. }
    26.  
    27. function TestFunc(){
    28.  
    29.     Debug.Log("Hello World");
    30.  
    31. }
     
  6. Eric5h5

    Eric5h5

    Volunteer Moderator Moderator

    Joined:
    Jul 19, 2006
    Posts:
    32,398
    Not sure why you're getting the EventTrigger component twice; that should be:

    Code (javascript):
    1. 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
     
  7. FirebladeBR

    FirebladeBR

    Joined:
    Apr 21, 2014
    Posts:
    65
    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:

    Code (JavaScript):
    1. var eventTrigger = new List.<EventTrigger>(gameObject.GetComponent(EventTrigger)) ;
    Thanks for the great help!
     
  8. Eric5h5

    Eric5h5

    Volunteer Moderator Moderator

    Joined:
    Jul 19, 2006
    Posts:
    32,398
    Code (javascript):
    1. var eventTrigger = new List.<EventTrigger.Entry>();
    --Eric
     
  9. FirebladeBR

    FirebladeBR

    Joined:
    Apr 21, 2014
    Posts:
    65
    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:

    Code (JavaScript):
    1. // I have changed lines 4, 10 and 11
    2. var obj = GameObject.Find("myobj");
    3. var events = obj.AddComponent(EventTrigger);
    4. var eventTrigger = new List.<EventTrigger.Entry>();
    5. var entry = new EventTrigger.Entry();
    6. entry.eventID = EventTriggerType.PointerClick;
    7. entry.callback = new EventTrigger.TriggerEvent();
    8. var call = new UnityEngine.Events.UnityAction.<BaseEventData>(TestFunc);
    9. entry.callback.AddListener(call);
    10. eventTrigger.Add(entry);
    11. events.delegates.Add(eventTrigger);
    12.  
    But still got the same error.... Pls help me one more time this is driving me nuts!!
     
  10. Eric5h5

    Eric5h5

    Volunteer Moderator Moderator

    Joined:
    Jul 19, 2006
    Posts:
    32,398
    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
     
  11. FirebladeBR

    FirebladeBR

    Joined:
    Apr 21, 2014
    Posts:
    65
    Thanks!!!!!!!!!!!!!!!!

    It worked!