Изначально планируется сделать персонажа, который будет вращаться влево/вправо и бегать, а также стрелять по направлению мыши. Но просмотрев десяток видео, проблема так и не решилась, а важный момент заключается в том, что стрельба происходит с определенной точки, которая не только визуально, но и программно вращает перса (стреляет из посоха). Пули летят и вроде меняют вектор движения и пытаются догнать мышку, но для того, чтобы пуля полетела куда хочу ее нужно взять градусов на 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
C# Пули летят криво относительно мыши [закрыто] ⇐ C#
Место общения программистов C#
-
Anonymous
1719999993
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);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78694440/c-sharp-bullets-fly-crookedly-relative-to-the-mouse[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия