@Deathgar

Будет ли скрипт занесённый в префаб общим для всех объектов созданного этим префабом?

4e79449b915a497fb395e36e45b6164d.png
Зелёный - префаб, Крассный - объекты слоданный с помощью префаба.

Сам объект, созданный с помощью его:
ee4cb224e8da4c2dafb63e7424a3c8b7.png

Код скрипта в префабе:
using UnityEngine;
using System.Collections;

public class UpWall : MonoBehaviour {

	public Transform camer;
	public camera cam;
	private Transform pointDistans;
	private float distans;
	public float distansSpawn = 12f;
	public float speedUp = 5f;
	private float count;
	public GameObject[] barriers;
	// Use this for initialization
	void Start () {
		pointDistans = GameObject.Find("point").GetComponent<Transform>();
		count = transform.position.y + 41f;
		int rand = (int)Mathf.Round(Random.Range (0, barriers.Length));
		Debug.Log (rand);
		GameObject inst = Instantiate (barriers[rand]);
		inst.transform.parent = transform;
		inst.transform.position = transform.position;
		distansSpawn += cam.speed / 5f;
	}
	
	// Update is called once per frame
 // Высчитывает расстояние от барьера до камеры при нужном расстоянии, подымает его.
	void FixedUpdate () {
		distans = Vector3.Distance (pointDistans.position, camer.position);

		//Debug.Log (distans);

		//Debug.Log (transform.position.y);
               
		if (distans <= distansSpawn) 
		{
			if(transform.position.y <= count)
			{
				transform.Translate(new Vector3(0,41f,0) * speedUp  * Time.deltaTime);
			}
		}
	}
}


Код (смотрите всё, что в FixedUpdate) высчитывает расстояние от барьера до камеры при нужном расстоянии, подымает его. На сколько я понимаю, он должен для каждого барьера высчитывать расстояние, но он подымать начинает барьеры, когда подходит на нужное расстояние от 3-го, хотя первый ещё не поднялся, при этом подниматься все начинают одновременно.
Может я чего-то не понимаю. Помогите.
  • Вопрос задан
  • 209 просмотров
Решения вопроса 2
@vopross
Я пользовался юнити всего пару раз, поэтому я могу ошибаться, но для каждого префаба будет создаваться как-бы копия скрипта => скрипты не будут общими.
Ответ написан
Комментировать
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Скрипт не будет общим, у каждого инстанцированного префаба будет свой экземпляр класса. А проблема у вас в скрипте, вы считаете одинаковое расстояние для всех объектов:
pointDistans = GameObject.Find("point").GetComponent<Transform>();
...
distans = Vector3.Distance (pointDistans.position, camer.position);

По всей видимости, вам нужно поменять строчку в апдейте:
distans = Vector3.Distance (transform.position, camer.position);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы