Question by
flyinfishtacos · Jun 17, 2016 at 09:20 PM ·
scripting problemmovementraycastingscriptingbasicsraycasthit
Getting a specific gameobject to move from Raycasthit
I am trying to get my character to "animate" and sleeping skeleton and move it to a position using raycasting, the ray is coming from the foot of my player and has the following script to it.
using UnityEngine;
using System.Collections;
public class SpellRayCast : MonoBehaviour {
public bool skelAwaken = false;
public Vector3 destination;
bool skelMove;
public GameObject currentSkel;
// Use this for initialization
void Start () {
}
void FixedUpdate ()
{
RaycastHit hit;
Ray ray = new Ray (transform.position, transform.forward);
Vector3 forward = transform.TransformDirection(Vector3.forward) * 10;
Debug.DrawRay(transform.position, forward, Color.green);
if (Input.GetMouseButtonUp(0))
{
Physics.Raycast(ray, out hit);
if (hit.collider.gameObject.tag.Equals("Skeleton"))
{
currentSkel = hit.transform.gameObject;
Debug.Log("hit!!");
skelAwaken = true;
}
if (currentSkel.GetComponent<SkeletonController>().awaken == true)
{
NewRay();
}
if (currentSkel.GetComponent<SkeletonController>().hasMoved == true)
{
skelAwaken = false;
currentSkel = null;
}
}
}
public bool giveAwake(bool Res)
{
Res = skelAwaken;
return Res;
}
void NewRay()
{
RaycastHit hit;
Ray ray = new Ray (transform.position, transform.forward);
Vector3 forward = transform.TransformDirection(Vector3.forward) * 10;
if (Input.GetKeyDown(KeyCode.Q))
{
if (Physics.Raycast(ray, out hit))
{
destination = hit.point;
Debug.Log("new ray");
}
}
}
}
The Skeleton has the following script
using UnityEngine;
using System.Collections;
public class SkeletonController : MonoBehaviour {
Animation anim;
public bool awaken;
public bool woken;
Rigidbody rBody;
SpellRayCast awake;
GameObject spell;
public Vector3 dist;
public float speed;
public bool hasMoved;
// Use this for initialization
void Start ()
{
anim = GetComponent<Animation>();
rBody = GetComponent<Rigidbody>();
spell = GameObject.FindGameObjectWithTag("Spell");
speed = speed * Time.deltaTime;
}
// Update is called once per frame
void Update ()
{
Move();
dist = GameObject.Find("SpellRayCast").GetComponent<SpellRayCast>().destination;
awaken = GameObject.Find("SpellRayCast").GetComponent<SpellRayCast>().skelAwaken;
if (awaken == true && woken == false)
{
anim.Play("WakeUp");
woken = true;
}
}
void Checkawaken()
{
awaken = GameObject.Find("SpellRayCast").GetComponent<SpellRayCast>().skelAwaken;
}
void Move()
{
if (woken == true && dist != null)
{
transform.position = Vector3.MoveTowards(transform.position, dist, speed);
if (transform.position == dist)
{
hasMoved = true;
}
}
}
}
The Skeleton will animate but will not move to location. It does not seem like the destination variable is making it to the dist variable. Any help would be appreciated.
Comment
Your answer
![](https://koobas.hobune.stream/wayback/20220612083030im_/https://answers.unity.com/themes/thub/images/avi.jpg)