#c# #unity3d #rotation #rigid-bodies
#c# #unity3d #вращение #жесткие тела
Вопрос:
Я нашел способ найти то, что указано в названии для Rigidbody, но не для Rigidbody2D, поскольку исходный метод предполагает использование Transform .TransformDirection() , который работает только на Vector3, в то время как Rigidbody2D.MovePosition работает на Vector2. По сути, мне нужна пуля для перемещения вперед, при этом еще две пули движутся вперед, но поворачиваются под углом 45 градусов. разница.
Как бы я это сделал?
Комментарии:
1. Что вы уже пробовали?
Ответ №1:
Ваш вопрос напомнил мне об игре, которую я недавно создал для game jam, поэтому я проверил код, и, похоже, я Quaternion.AngleAxis
вращал маркеры.
Я предполагаю, что у вас есть ссылка на сборку, которую вы хотите клонировать (в данном примере это projectilePrefab
), а также firePoint
преобразование, представляющее позицию, из которой вы хотите стрелять, и вращение среднего снаряда.
// Middle Bullet
GameObject mBullet = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);
var mRb = mBullet.GetComponent<Rigidbody2D>();
middleRb.AddForce(mRb.transform.up * velocity, ForceMode2D.Impulse);
// Left Bullet
GameObject lBullet = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);
// Rotate here
lBullet.transform.up = Quaternion.AngleAxis(-45, Vector3.forward) * firePoint.transform.up;
var lRb = lBullet.GetComponent<Rigidbody2D>();
lRb.AddForce(lBullet.transform.up * velocity, ForceMode2D.Impulse);
// Right Bullet
GameObject rBullet = Instantiate(projectilePrefab, firePoint.position, firePoint.rotation);
// Rotate here
rBullet.transform.up = Quaternion.AngleAxis(45, Vector3.forward) * firePoint.transform.up;
var lRb = lBullet.GetComponent<Rigidbody2D>();
lRb.AddForce(lBullet.transform.up * velocity, ForceMode2D.Impulse);
Дайте мне знать, если у вас возникнут какие-либо проблемы с этим кодом, я не могу протестировать его прямо сейчас.
Ответ №2:
Я предполагаю, что у вас есть сборный элемент, и вы создаете экземпляры 3 маркеров одновременно, но хотите, чтобы 2 из них были под углом -45 и 45 градусов соответственно.
//bullet — это любой сборный файл, который у вас есть
var bl = Instantiate(bullet);
var bl = Instantiate(bullet);
bl.transform.rotation = //Set rotation here to 45 deg
var bl = Instantiate(bullet);
bl.transform.rotation = //Set rotation here to -45 deg
Ответ №3:
Между Vector2
и Vector3
существует неявное преобразование и наоборот. Оба типа могут быть более или менее взаимозаменяемыми, которые либо создадут Vector3
where z
просто 0
, либо создадут Vector2
только с использованием x
and y
и просто игнорируют z
.
Вы можете просто передать Vector3
параметр as Rigidbody2D.MovePosition
в, и он неявно преобразует его в Vector2
игнорирующий Z
компонент.