Суббота, 20 Апреля 2024, 18:10

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » Deathgar [2]
Результаты поиска
DeathgarДата: Среда, 15 Марта 2017, 14:36 | Сообщение # 1 | Тема: Передвижение по точкам.
уже был
Сейчас нет на сайте
EchoIT, в первом случае:
Код
gameObject.transform.position = Vector3.Lerp (gameObject.transform.position, transfArray [count].position, speed);

Во втором:
Код
transfArray[i-1] = GameObject.Find(name).GetComponent<Transform>();

Добавлено (15 марта 2017, 14:21)
---------------------------------------------
Ребята, второй вопрос отпадает. Был мой косяк, походу связанный с именами...
Вот рабочий код:

Код

using UnityEngine;
using System.Collections;

private Transform[] transfArray;
    private int count;
    private int size;
    public int max; //количество точек
    private bool arr = true;

    void Start()
    {
  transfArray = new Transform[max];
  for (int i = 1; i <= max; i++)
  {
   string name = "Sphere " + i.ToString();
   transfArray[i-1] = GameObject.Find(name).GetComponent<Transform>();
  }

  if (size == 0)
  {
   arr = false;
  }
    }

    public void hpDamage(float damageTover)
    {
  hp -= damageTover;
    }
    

        //Движение в "if" происходит
    void Update ()
    {
  if (arr) {
   gameObject.transform.position = Vector3.Lerp (gameObject.transform.position, transfArray [count].position, speed);
   if (Vector3.Distance (gameObject.transform.position, transfArray [count].position) < 0.2f) {
    if (count == size) {
     //Destroy (transfArray [count].gameObject);
     //Дамаг таверу.
    } else
     count++;
   }
  }
    }
}

Если кому надо, пробуйте, должно работать, только имена меняйте на свои.

Но, движение получается рывками, от точке к точке.

Добавлено (15 марта 2017, 14:22)
---------------------------------------------
Можно закрывать...

Добавлено (15 марта 2017, 14:36)
---------------------------------------------
А вот, если заменить Update на такой, то будет плавно c:

Код
void Update ()
    {
  if (arr) {
   //gameObject.transform.position = Vector3.Lerp (gameObject.transform.position, transfArray [count].position, speed);
   transform.Translate(Vector3.Normalize(transfArray[count].position - transform.position) * Time.deltaTime * speed);
   if (Vector3.Distance (gameObject.transform.position, transfArray [count].position) < 0.2f) {
    if (count == size) {
     //Destroy (transfArray [count].gameObject);
     //Дамаг таверу.
    } else
     count++;
   }
  }
    }


Решено.
DeathgarДата: Среда, 15 Марта 2017, 11:26 | Сообщение # 2 | Тема: Передвижение по точкам.
уже был
Сейчас нет на сайте
На сцене есть точки, в которые должны мобы идти последовательно.
Первый вопрос:
Есть код:
Код

using UnityEngine;
using System.Collections;

public class Enemie : MonoBehaviour {
    public float hp;
    public float speed;
    public float damage;

    public Transform[] transfArray; // массив с позициями точек
    private int count; //переход к точке
    private int size; // размер массива
    private bool arr = true; // массив не равен нулю

    void Start()
    {

  size = transfArray.Length;
  Debug.Log (size);
  if (size == 0)
  {
   arr = false;
  }

    }

    public void hpDamage(float damageTover)
    {
  hp -= damageTover;
    }
    

        //Движение в "if" происходит
    void Update ()
    {
  if (arr) {
   gameObject.transform.position = Vector3.Lerp (gameObject.transform.position, transfArray [count].position, speed);
   if (Vector3.Distance (gameObject.transform.position, transfArray [count].position) < 0.2f) {
    if (count == size) {
     //Destroy (transfArray [count].gameObject);
     //Дамаг таверу.
    } else
     count++;
   }
  }
    }
}


Но выдаёт ошибку: NullReferenceException: Object reference not set to an instance of an object Enemie.Update ()
Каждая точка массива, это отдельный префаб(что категорически не удобно, это второй вопроса.)

Второй вопрос:

Пытался как-то автоматизировать:

Код

private Transform[] transfArray;
    private int count;
    private int size;
    public int max; //количество точек
    private bool arr = true;

    void Start()
    {
  transfArray = new Transform[max];
  for (int i = 1; i <= max; i++)
  {
   string name = "Sphere " + i.ToString();
   transfArray[i-1] = GameObject.Find(name).GetComponent<Transform>();
  }

  if (size == 0)
  {
   arr = false;
  }
    }


Но он выдаёт ошибку "NullReferenceException: Object reference not set to an instance of an object Enemie.Start ()", хотя, если отдельно написать GameObject.Find("Sphere 1"), то вроде находит.

Как быть? Помогите или поделитесь своими методами передвижения мобов, пожалуйста.
Форум игроделов » Записи участника » Deathgar [2]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг