C# Пули летят криво относительно мыши [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 C# Пули летят криво относительно мыши [закрыто]

Сообщение Anonymous »

Изначально планируется сделать персонажа, который будет вращаться влево/вправо и бегать, а также стрелять по направлению мыши. Но просмотрев десяток видео, проблема так и не решилась, а важный момент заключается в том, что стрельба происходит с определенной точки, которая не только визуально, но и программно вращает перса (стреляет из посоха). Пули летят и вроде меняют вектор движения и пытаются догнать мышку, но для того, чтобы пуля полетела куда хочу ее нужно взять градусов на 45 - 60 больше, я не знаю что делать делать. Помоги мне, пожалуйста. Код переделал, но суть та же, есть отставание градусов 45-60.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bullet : MonoBehaviour
{
public float timeDestroy = 3f;
public float speed = 3f;
public Rigidbody2D rb;

void Start()
{
rb = GetComponent();

Vector3 diference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
float rotateZ = Mathf.Atan2(diference.y, diference.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0f, 0f, rotateZ);

rb.velocity = transform.up * speed;
Invoke("DestroyBullet", timeDestroy);
}

void DestroyBullet()
{
Destroy(this.gameObject);
}
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
[SerializeField] float speed;
[SerializeField] GameObject bullet;
[SerializeField] Transform shootPos;
Rigidbody2D rb;
Vector2 moveVelocity;
void Start()
{
rb = GetComponent();

}

// Update is called once per frame
void Update()
{
PlayerMirror();

if (Input.GetMouseButtonDown(0))
{
Shoot();
}
}
private void FixedUpdate()
{
Move();
}
#region Base Function (Rotate and Move)
void Move()
{
Vector2 moveInput = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));

moveVelocity = moveInput.normalized * speed;

rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
}
public bool FaceRight = true;
void PlayerMirror()
{
moveVelocity.x = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveVelocity.x * speed, rb.velocity.y);

if (Input.GetAxis("Horizontal") > 0)
{
FaceRight = true;

Quaternion rot = transform.rotation;
rot.y = 0;
transform.rotation = rot;
}

if (Input.GetAxis("Horizontal") < 0)
{
FaceRight = false;

Quaternion rot = transform.rotation;
rot.y = 180;
transform.rotation = rot;

}
}
#endregion
void Shoot ()
{
Instantiate(bullet, shootPos.position, shootPos.rotation);
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... -the-mouse
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»