Изначально планируется сделать персонажа, который будет вращаться лево/право и бегать, а также стрелять по направлению мышки. Но после того как перерыл с десяток видео проблема не решилась, а и важный момент стрельба происходит из определенной точки, которая не только визуально но и программно крутит перса (стреляет из посоха). Пули летят и вроде меняют вектор движения, и пытаются догнать мышку, но чтобы пуля летела куда я хочу нужно брать примерно на 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<Rigidbody2D>();
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<Rigidbody2D>();
}
// 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);
}
}
Belyaev Mikhail is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.