using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveNavi : MonoBehaviour
{
public IKControl ikControl;
public GameObject navi;
public GameObject navi1;
public GameObject naviParent;
public bool childChangedNaviIsHandChild = false;
private bool activateHelmet = false;
private void Start()
{
navi1 = naviParent.transform.Find("NAVI1").gameObject;
}
private void Update()
{
ChangeChild();
MoveNaviToTargetAndBack();
}
public void ChangeChild()
{
var dist = Vector3.Distance(transform.position, navi1.transform.position);
if (dist < 0.1f && childChangedNaviIsHandChild == false)
{
childChangedNaviIsHandChild = true;
ikControl.startMovingNAVI = false;
navi.transform.parent = naviParent.transform;
if (ikControl.target != null)
ikControl.target.distance = 0;
}
if (ikControl.startMovingNAVI)
{
transform.position = Vector3.MoveTowards(transform.position, navi1.transform.position, 0.5f * Time.deltaTime);
}
}
public void MoveNaviToTargetAndBack()
{
if (ikControl.target != null && ikControl.target.distance != 0 && IsNaviInHandChangeInteractableMode() == true)
{
var dist = Vector3.Distance(navi.transform.position, ikControl.target.transform.position);
if (dist < 0.1f)
{
ikControl.toTarget = false;
}
if (ikControl.toTarget == false)
{
InCaseHelmet();
var dist1 = Vector3.Distance(navi.transform.position, navi1.transform.position);
if (dist1 < 0.1f && ikControl.target.GetComponent<Interactable>() != null)
{
ikControl.target.distance = 0;
}
navi.transform.position = Vector3.MoveTowards(navi.transform.position, navi1.transform.position, 3f * Time.deltaTime);
}
if (ikControl.toTarget == true)
navi.transform.position = Vector3.MoveTowards(navi.transform.position, ikControl.target.transform.position, 3f * Time.deltaTime);
}
}
private void InCaseHelmet()
{
var dist1 = Vector3.Distance(navi.transform.position, navi1.transform.position);
if (dist1 < 0.1f && activateHelmet == false && ikControl.target.name == "kid_from_space_helmet")
{
var helmetParent = GameObject.Find("Helmet Parent");
GameObject Helmet = helmetParent.transform.Find("kid_from_space_helmet").gameObject;
Helmet.SetActive(true);
activateHelmet = true;
}
}
public bool IsNaviInHandChangeInteractableMode()
{
bool inhand = false;
if (navi.transform.IsChildOf(naviParent.transform) == true)
{
inhand = true;
}
return inhand;
}
}
The returning error number of the distance is in this lines :
var dist1 = Vector3.Distance(navi.transform.position, navi1.transform.position);
if (dist1 < 0.1f && ikControl.target.GetComponent<Interactable>() != null)
{
ikControl.target.distance = 0;
}
I used a breakpoint and navi and navi1 are never null and I see that navi is getting to navi1 but still it’s never get in pass in the distance check it’s all the time giving a distance number with E.
navi1 is empty gameobject and navi is child of navi1