Reach other object animator when collide and play animation
Hello,
I'm trying to make a game. but i'm stuck now for days, maybe it's because i'm using C# and JS.
But what i want to happen is: when the player hold the arrow down and an object collide with the player the object is going to play an animation ones and then dissapears.
the C# code:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class PlayerController : MonoBehaviour {
 public float speed = 15f;
 public float JumpPower = 350f;
 public bool grounded;
 public bool magspringen = false;
 public GameObject otherObject;
 Animator otherAnimator;
 private Rigidbody2D rb2d;
 private Animator anim;
 void Start()
 {
     rb2d = gameObject.GetComponent<Rigidbody2D>();
     anim = gameObject.GetComponent<Animator>();
     otherAnimator = otherObject.GetComponent<Animator>();
 }
 void Update()
 {
     anim.SetBool("Grounded", grounded);
 }
 void FixedUpdate()
 {
     if (Input.GetKey(KeyCode.RightArrow) && !Input.GetKey(KeyCode.DownArrow))
     {
         if (grounded)
         {
             anim.Play("walk");
             transform.position += Vector3.right * speed * Time.deltaTime;
             transform.eulerAngles = new Vector3(0, 0);
         }
         else
         {
             transform.position += Vector3.right * speed * Time.deltaTime;
             transform.eulerAngles = new Vector3(0, 0);
         }
     }
     if (Input.GetKey(KeyCode.LeftArrow) && !Input.GetKey(KeyCode.DownArrow))
     {
         if (grounded)
         {
             anim.Play("walk");
             transform.position += Vector3.left * speed * Time.deltaTime;
             transform.eulerAngles = new Vector3(0, 180);
         }
         else
         {
             transform.position += Vector3.left * speed * Time.deltaTime;
             transform.eulerAngles = new Vector3(0, 180);
         }
         
     }
     if (Input.GetKeyDown(KeyCode.UpArrow) && grounded && !Input.GetKey(KeyCode.DownArrow) && magspringen == true)
     {
         anim.Play("jump");
         rb2d.AddForce(Vector3.up * JumpPower);
     }
     if (Input.GetKey(KeyCode.DownArrow) && grounded)
     {
         anim.Play("buk");
     }
 }
 void OnTriggerExit2D(Collider2D other)
 {
     if (other.gameObject.tag == "Respawn")
     {
         magspringen = true;
     }
     if(other.gameObject.tag == "antagonist")
     {            
         otherAnimator.Play("gat");
     }
     
 }
 
               } and the JS code:
pragma strict
public var score = 0; public var antagonist : GameObject; public var anta1 :GameObject; public var anta2 :GameObject; public var donker: GameObject;
function OnTriggerEnter2D (Col: Collider2D) { if(Col.CompareTag("Antagonist")) { if (Input.GetKey(KeyCode.DownArrow)) { score=score +1;
         }else{               
             Destory(antagonist)
         }
     }
     if(Col.CompareTag("anta1"))
     {
         if (Input.GetKey(KeyCode.DownArrow)) {
             score=score +1;
         }else{               
             Destroy(anta1);
         }
     }
     if(Col.CompareTag("anta2"))
     {
         if (Input.GetKey(KeyCode.DownArrow)) {
             score=score +1;
         }else{               
             Destroy(anta2);
         }
     }
     {
         if(Col.CompareTag("Respawn") && score <= 2)
         {
             Destroy(donker);
         }
     }
 }
 
               So what it is doing now is, if the player touches a the object when holding arrow down it gets a score but doesn't play the animation. I tried doing it in the C# code with otherAnimator.
Answer by UnityCoach · Mar 23, 2017 at 06:03 PM
Best way to do this is to have a "trigger parameter" on the animator, that triggers a transition between states. Then you simple set the animator trigger.
 other.GetComponent<Animator>().SetTrigger("trigger name");
 
               Note, this is totally unsafe, you want to check there is an animator, and that it has the trigger. But if it does, this will work.
Your answer