- Home /
Timeline: play different animations by hitting different triggers with different colliders
Hi guys, I`m using this script to play a timeline when the game object "PILLAR" is hit by the bullet "BulletPIN+" and it`s working fine (with one timeline only). I need now to play a different animation if the PILLAR is hit by a second type of bullet "BulletPIN-" which represents basically the inverse animation of the game object. I tried different solution tutorials but I only found a Timeline Controller managing a trigger based on buttons. What I need is to activate a second animations on a collider hit.
Any idea? Thanks.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class TimelineStarterPin : MonoBehaviour
{
public GameObject Timeline;
private void OnTriggerEnter(Collider other)
{
if (other.tag == "BulletPIN+")
{
PlayableDirector pd = Timeline.GetComponent<PlayableDirector>();
if (pd != null)
{
pd.Play();
}
}
}
}
Answer by text23d · Nov 30, 2017 at 08:04 PM
if (other.tag == "BulletPIN-") { gameobject.GetComponent.Play("second animation"); } //add second animation to anim controller
Answer by Bibrosko · Dec 01, 2017 at 04:01 PM
thanks i'll try it out. Meanwhile i'm trying to solve the problem using physics, which might be a better solution for me (not sure).
i created a empty game object as a Controller and attached my gameobject as child
on the controller i added a configurable joint freezing the Y, Z motions and X, Y angular motions
i added a script to add force and torque on the controller
but i have unexpected behaviors:
the Controller (and the gameobject) seem to not receive the force and the torque i added (maybe i made some mistakes in the code)
the Controller receives the impact force of my bullet colliders/rigidbody (BulletPIN+, BulletPIN- etc..) so they're moving accordingly to the impact they receive, eventually ignoring the forces i want to add with the script.
sometimes, when the object is hit at the bottom by the bullet is jumping up (ignoring the configurable joint constraints).
what i'm trying to achieve is:
my gameobject starts in a idle position (all translations and rotation blocked
when hit by BulletPIN+ it should receive a force forward and a torque (ignoring the bullet force)
when hit by BulletPIN- it should receive the same force and torque but in the opposite direction.
here's the script:
using UnityEngine;
using System.Collections;
public class AddForce : MonoBehaviour
{
public float ForceForward;
public float ForceBackward;
public float forceNegative;
public float TorquePositive;
public float TorqueNegative;
void OnCollisionEnter(Collision col)
{
Debug.Log("Collision!");
if (col.gameObject.name == "BulletROLLER+")
{
col.gameObject.GetComponent<Rigidbody>().AddForce(ForceForward, 0, 0);
float turn = Input.GetAxis("Horizontal");
col.gameObject.GetComponent<Rigidbody>().AddRelativeTorque(Vector3.up * TorquePositive * turn);
}
if (col.gameObject.name == "BulletROLLER-")
{
col.gameObject.GetComponent<Rigidbody>().AddForce(ForceBackward, 0, 0);
float turn = Input.GetAxis("Horizontal");
col.gameObject.GetComponent<Rigidbody>().AddRelativeTorque(Vector3.up * TorqueNegative * turn);
}
}
}
i'm sorry for the long question, i hope you can help me. alternatively i'd repost the question in a new topic to make it more clear.
Thanks.