Пушка и гаубица

173
06 августа 2017, 05:40

У меня 2 вопроса:

  1. Есть у меня танк, из которого вылетает пуля. С помощью Rigidbody.velocity, AddForce она летит по прямой. Как мне сделать так, чтобы она полетела как "по дуге" по кругу в цель, чтобы летела не прямо, а долетела прямо вверх, потом опустилась в точку? Артиллерия. Пытался сложить 2 вектора: Vector3.forward + Vector3.up, не выходит, летит по диагонали и не падает.

Вот код:

using UnityEngine;
using System.Collections;
public class Point : MonoBehaviour {
private Transform point;
public Rigidbody force;
public GameObject effect;
public Transform to;
void Start () {
    force.transform.position = transform.position;
}
void Update () {
    Vector3 dir = (to.transform.position - force.transform.position +      transform.up);
    force.AddForce (dir);
}
}
  1. Есть турель, её пушка прицеливается на объект, который вошёл в радиус её зрения, как только подходит другой, она сразу начинает переключаться на него (это мне нужно убрать). Как сделать так, чтобы пушка нацелилась на тот объект, который вошёл в радиус её зрения, но не переключалась на другой до тех пор, пока не добьёт первый? Чтобы куча объектов к ней подходило, а она не переключалась на другой, пока не добьёт первый. Как уничтожит, сразу переходит у другому. И если тот объект, который был в радиусе её зрения (атакуемый), вышел с её поля зрения, она сразу начинает переключаться на другой.

Вот код:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Tower : MonoBehaviour {
public Transform spawn;
public Rigidbody bullet;
public float delay = 0.5f;
private List<GameObject> target;
private GameObject unit;
private bool can_shoot = true;
private float shoot_timer = 0.0f;
private float distance;
void Attack() {
    target = new List<GameObject> ();
    target.AddRange(GameObject.FindGameObjectsWithTag("Unit"));
    foreach (GameObject t in target) {
        float distance = Vector3.Distance (transform.position, t.transform.position);
        if (distance < 25) {
            Vector3 dir = t.transform.position - transform.position;
            transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(dir), Time.deltaTime * 15.0f);
        }
    }
    Ray ray = new Ray (spawn.position, transform.forward);
    RaycastHit hit;
    if (Physics.Raycast (ray, out hit)) {
        if (hit.collider.tag == "Unit") {
            hit.collider.gameObject.GetComponent<Unit> ().health -= 1.0f;
        }
    }
    Rigidbody go = (Rigidbody)Instantiate (bullet, spawn.position, Quaternion.identity);
    go.velocity = transform.forward * 16.0f;
    can_shoot = false;
}
void Update () {
    if (!can_shoot) {
        shoot_timer += Time.deltaTime;
        if (shoot_timer >= delay) {
            shoot_timer = 0.0f;
            can_shoot = true;
        }
    }
    if (can_shoot) {
        Attack ();
    }
}
}

Жду ваших ответов.

Answer 1

По 2ому вопросу. Раздели функцию атаки на поиск целей и конкретно атаку текущей. Ищешь цель. Нашел запомнил, проверяешь 3 условия цель не null, цель жива и цель находится в радиусе атаки, если все условия выполнились то вызывает атаку. Иначе снова ищем цель

Answer 2

Решил проблему сам. Вот код:

bool nav = true;
    if (nav == true) {
        for (int i = 0; i < target.Count; i++) {
            float distance = Vector3.Distance (transform.position, target [i].transform.position);
            if (distance < 25 && nav == true) {
                current = target [i];
                nav = false;
            }
        }
    }
    Vector3 dir = current.transform.position - transform.position;
    transform.rotation = Quaternion.Lerp (transform.rotation, Quaternion.LookRotation (dir), Time.deltaTime * 15.0f);

Причина: когда раньше пытался реализовать такую логику, неправильно использовал логическую переменную.

READ ALSO
Можно ли узнать количество кликов или нажатий мыши по canvas в JS?

Можно ли узнать количество кликов или нажатий мыши по canvas в JS?

Можно ли узнать количество кликов или нажатий мыши по canvas в JS? Реально ли это?

412
Возможно ли как то оптимизировать код?

Возможно ли как то оптимизировать код?

Пока еще не силен в jsНаписал работающий код, но мне кажется что может быть его можно как то сократить

290
Как вывести на сайт данные из коллекции mongo

Как вывести на сайт данные из коллекции mongo

Как вывести на сайт данные из коллекции mongo

319