Animator on duplicated door, animates wrong door
Hey all, I've come to the end of my tether with this thing, just wanted to make an animated door prefab but it's been absurdly difficult, mostly to my inexperience but having fixed my main issue, I've run into this one and I don't have the slightest idea where to start and my time is short! So, here's what I'm trying to do and what currently works:
Click on the door with the mouse, if within a certain distance, the door will open, click it again, it will close. This works fine, using a trigger on the animator.
What goes wrong, is that when I duplicate the door, clicking on either door, will only animate the first door.
Here's my code:
Placed on the door:
using UnityEngine;
using System.Collections;
public class Doorcontrol : MonoBehaviour {
Animator animator;
// Use this for initialization
void Start()
{
animator = GetComponent<Animator>();
}
// Update is called once per frame
public void animateDoor () {
Debug.Log("Hello door control");
animator.SetTrigger("Boop");
}
}
on the input handler in the game world:
using UnityEngine;
using System.Collections;
public class InputControl : MonoBehaviour
{
private Doorcontrol doorScript;
public GameObject doorObj;
void Start()
{
doorObj = GameObject.Find("Door");
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0))
{
RaycastHit Hit;
Debug.Log("Mouse boop");
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out Hit, 1000f))
{
if (Hit.collider.tag == "Door")
{
Debug.Log("Hello Door!");
doorObj.GetComponent<Doorcontrol>().animateDoor();
}
}
}
}
So, anyone got any ideas on how to tweak this and make it so the correct door , the one clicked on, is the one that animates? use of this.gameobject some how?
Cheers all!
Answer by Olivitree · Nov 29, 2015 at 10:05 PM
Fixed the issue with some help from a friend, here is the changed code for anyone who might benefit from it!
using UnityEngine;
using System.Collections;
public class InputControl : MonoBehaviour
{
private Doorcontrol doorScript;
void Update()
{
if (Input.GetMouseButton(0))
{
RaycastHit Hit;
Debug.Log("Mouse boop");
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out Hit, 1000f))
{
Doorcontrol doorHit = Hit.collider.gameObject.GetComponent<Doorcontrol>();
if (Hit.collider.tag == "Door")
{
Debug.Log("Hello Door!");
doorHit.animateDoor();
}
}
}
}
}
Your answer
Follow this Question
Related Questions
Duplicates of prefab appearing out of nowhere 0 Answers
How to project a semi transparent copy of a gameobject? 0 Answers
Animation window not showing current gameobject animations 0 Answers
Destroying child gameobject of animated parent messes up other child gameobject animations. 0 Answers
Why when you disable then re-enable the same game object the animation is restarted? 0 Answers