1 - один скрипт
2 - поместить скрипт на "оба объекта"
3 - у главного объекта выставить значение main(_main) в редакторе на True
4 - объект с галкой main в инспекторе перемещается клавиатурой (WASD) по глобальным осям
5 - если объектов с галкой main больше одного, то перемещаться не будут все
6 - если объект не main и находится дальше значения _data_visible_limit то объект указный в поле _object_visible станет не видим (выключен)
7 -
в поле _object_visible нужно поместить объект с мешом (модель) указывать объект на котором находится этот скрипт нельзя, иначе он не включится обратно
иерархия
GameObject <- поместить скрипт element_one
__(модель) -> поместить в скрипт element_one
PS Новик твоя постановка задачи очень сложна для восприятия
Используется csharp
public class element_one:MonoBehaviour {
static public List<element_one> _list;
public GameObject _object_visible;
public float _data_speed = 2;
public float _data_visible_limit = 25;
public bool _main = false;
void OnEnable() {
element_one._list.Add(this);
}
void OnDisable() {
element_one._list.Remove(this);
}
void Update() {
this.update_ranslate();
}
void update_visible() {
if(this._main) {
return;
}
element_one __element_one_main = null;
// мало ли нужно что сделать с списком, если вдруг main несколько
List<element_one> __element_one_list_main = element_one._list.Where(__select => __select._main).ToList();
foreach(element_one __element_one in __element_one_list_main) {
__element_one_main = __element_one;
break;
}
if(__element_one_main == null) {
return;
}
// направление
Vector3 __direction_to_main = __element_one_main.transform.position - this.transform.position;
// расстояние
float __distance_to_main = __direction_to_main.magnitude;
if(this._data_visible_limit > __distance_to_main) {
return;
}
this._object_visible.SetActive(false);
}
void update_ranslate() {
if(this._main == false) {
return;
}
if(element_one._list.Where(__select => __select._main).ToList().Count > 1) {
return;
}
Vector3 __direction = Vector3.zero;
__direction += Vector3.forward * this._data_speed * Input.GetAxis("Vertical");
__direction += Vector3.right * this._data_speed * Input.GetAxis("Horizontal");
this.transform.Translate(__direction * Time.deltaTime,Space.World);
}
}