Понедельник, 25 Ноября 2024, 19:27

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Отклонение от курса стрельбы
SagikДата: Понедельник, 02 Июля 2018, 16:26 | Сообщение # 1
был не раз
Сейчас нет на сайте
Я долго пытался найти проблему но не смог((. В общем когда я навожу курсор вниз то никаких отклонений нет, но по мере поднятия курсора вверх появляется отклонение и оно постоянно увеличивается. На картинке ак-47 поднят на максимальный угол. На скрине курсора не было, я нарисовал вектор куда должны были стрелять пули. Я думаю ошибка в методе Fire() так как именно там им задается направление движения. На код перезарядки не обращайте внимания, я знаю что он хреновый и к делу он не причастен (ошибка была до него)

http://s1.uploadpics.ru/images/-kzTfxon57.png (у меня не получилось по другому вставить скрин)

[/code]using UnityEngine;
using System.Collections;

public class FireScript2D : MonoBehaviour
{

public float speed = 30; // скорость пули
public Rigidbody2D bullet; // префаб пули
public Transform gunPoint; // точка рождения
public float fireRate = 0.1f; // скорострельность
public bool facingRight = true; // направление на старте сцены, вправо?
public float timer = 4; // время стрельбы из одного магазина
public int charger = 8; // обоймы
public float timerp = 3; // время перезарядки (время анимации перезарядки)
public Transform zRotate; // объект для вращения по оси Z

// ограничение вращения
public float minAngle = -30;
public float maxAngle = 30;

private float curTimeout, angle;
private int invert;
private Vector3 mouse;

void Start()
{
if (!facingRight) invert = -1; else invert = 1;
}

void SetRotation()
{
Vector3 mousePosMain = Input.mousePosition;
mousePosMain.z = Camera.main.transform.position.z;
mouse = Camera.main.ScreenToWorldPoint(mousePosMain);
Vector3 lookPos = mouse - transform.position;
angle = Mathf.Atan2(lookPos.y * invert, lookPos.x * invert) * Mathf.Rad2Deg;
angle = Mathf.Clamp(angle, minAngle, maxAngle);
zRotate.rotation = Quaternion.AngleAxis(angle, Vector3.forward);
}
void FixedUpdate()
{
if (Input.GetMouseButton(0) && charger > 0) Timer();
if (timer <= 0) TimerP();
}
void Update()
{
if (timer <= 0)
{
if (timerp <= 0)
{
timer = 4;
charger -= 1;
timerp = 2;
}
}
if (Input.GetMouseButton(0) && charger > 0)
{
if (timer > 0)
{
Fire();
}
}
else
{
curTimeout = 1000;
}

if (zRotate) SetRotation();

if ((angle == maxAngle || angle == minAngle) && mouse.x < zRotate.position.x && facingRight) Flip();
else if ((angle == maxAngle || angle == minAngle) && mouse.x > zRotate.position.x && !facingRight) Flip();
}

void Flip() // отражение по горизонтали
{
facingRight = !facingRight;
Vector3 theScale = transform.localScale;
theScale.x *= -1;
invert *= -1;
transform.localScale = theScale;
}

void Fire()
{
curTimeout += Time.deltaTime;
if (curTimeout > fireRate)
{
curTimeout = 0;
Vector3 direction = gunPoint.position - transform.position;
Rigidbody2D clone = Instantiate(bullet, gunPoint.position, Quaternion.identity) as Rigidbody2D;
clone.velocity = transform.TransformDirection(direction.normalized * speed);
clone.transform.right = direction.normalized;
}
}

void Timer()
{
if (timer > 0) timer = timer - Time.deltaTime;
}
void TimerP()
{
if (timerp > 0) timerp = timerp - Time.deltaTime;
}
}[code]
Storm54Дата: Понедельник, 02 Июля 2018, 17:43 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
В каких точках находится gunPoint.position и transform.position? Возможно, что их некорректное расположение и вызывает проблему.
SagikДата: Понедельник, 02 Июля 2018, 18:51 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата Storm54 ()
В каких точках находится gunPoint.position и transform.position? Возможно, что их некорректное расположение и вызывает проблему.

Спасибо. Я бы в жизни не нашел!
  • Страница 1 из 1
  • 1
Поиск:

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