Добрый вечер.
Имею следующую структуру:
- Объект, который передвигается. Не вращается. Ходовая часть.
-- Объект, который вращается за курсором. Пушка.
--- Объект, который служит фабрикой объектов (инициализирует объекты снарядов).
Исходя из логики вещей снаряды должны лететь в сторону поворота пушки на момент выстрела. Раньше движение было реализовано с помощью AddForce, теперь хочу переделать на ручное управление transform. Но столкнулся с тем, что при манипуляции с transform снаряды двигаются в непонятном для меня направление.
Подскажите пожалуйста, где моя ошибка? Чего я не понимаю?
GunBase.cs (Пушка)
Код
using UnityEngine;
using System.Collections;
public class GunBase : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
var target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 diff = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
diff.Normalize();
float rotZ = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, (rotZ + 90));
}
}
GunFire.cs (Место спавна снарядов)
Код
using UnityEngine;
using System.Collections;
public class GunFire : MonoBehaviour {
public GameObject Bullet;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0))
{
var bullet = (GameObject)Instantiate(Bullet, transform.position, Quaternion.identity);
bullet.transform.up = transform.up;
var lineBullet = bullet.GetComponent<LineBullet>();
lineBullet.SetMovement(new LinerMovement());
lineBullet.IsEnemy = false;
}
}
}
Реализация движения снаряда
Код
using UnityEngine;
using System.Collections;
public class LinerMovement : IMovement {
bool IsAlreadyFired = false;
public void Move(GameObject entity)
{
if (!IsAlreadyFired)
{
entity.transform.Translate(entity.transform.up * Time.deltaTime); // не понятное направление
//entity.GetComponent<Rigidbody2D>().AddForce(entity.transform.up * 1000); // всё работает как нужно
//IsAlreadyFired = true;
}
}
}