Проблема с моим кодом заключается в том, что пули будут в основном выпадать из объекта игрока, но я не могу заставить их стрелять прямо вперед, чтобы попасть в препятствия.Вместо этого, когда игрок катит каждое направление, пули выходят с одним и тем же заданным вектором, что не то, что я хочу.Мне бы хотелось, чтобы пули стреляли вдоль оси x, а вместо этого они стреляют со всех сторон в зависимости от того, как игрок катится.
В этом случае я попытался изменить вращение и силу пули, в случаечто сила пули изменила направление и импульс игрока.Это не удалось, поэтому я убрал форвардную силу игроков для тестирования, но по-прежнему никакого прогресса.
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public Rigidbody rb;
public float backwardForce = -60f;
public float forwardForce = 100f;
public float sidewaysForce = 1f;
// Start is called before the first frame update
void Start()
{
rb.AddForce(0, 100, 200);
}
// Update is called once per frame
void FixedUpdate()
{
//Movement force
rb.AddForce(0, 0, 50.0f * Time.deltaTime);
if (Input.GetKey("a"))
{
rb.AddForce(-sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
}
else if (Input.GetKey("d"))
{
rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
}
else if (Input.GetKey("w"))
{
rb.AddForce(forwardForce * Time.deltaTime, 0, 0, ForceMode.Force);
}
else if (Input.GetKey("s"))
{
rb.AddForce(backwardForce * Time.deltaTime, 0, 0, ForceMode.Force);
}
/*switch (Input.GetKeyDown())
{
// case Input.GetKeyDown("a"):
//a: rb.AddForce(sidewaysForce * Time.deltaTime, 0, 0);
}
}
}
public class BulletShoot : MonoBehaviour
{
//Reference to bullet emitter
public GameObject Bullet_Emitter;
//Reference to bullet prefab
public GameObject Bullet;
//Forward force of bullet
public float Bullet_Force;// = 10.0f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//When "Space" key is pressed..
if (Input.GetKey("space")){
//Temp variable that will hold reference to bullet
GameObject tempBulletHandler;
//Temp then instantiates bullet to game using emitter position and angle
tempBulletHandler = Instantiate(Bullet, Bullet_Emitter.transform.position, Bullet_Emitter.transform.rotation);
//Corrects angle that bullets appear
tempBulletHandler.transform.Rotate(Vector3.left * 180);
//RigidBody instantiated to control bullet physics using bullet handler
Rigidbody tempRigidBody = tempBulletHandler.GetComponent<Rigidbody>();
//Add force to the rigidbody to simulate firing the bullet forward using set bullet force
tempRigidBody.AddForce(Vector3.forward * Bullet_Force);
//Free up space from bullets fired (after 4 sec)
Destroy(tempBulletHandler, 4.0f);
}
}
}
Ожидается: игрок постоянно движется вперед, имея возможность стрелять препятствия в линейном направлении.
Факт: игрок движется правильно, но пули излучают без контроля, как рис, выпадающий из мешка с одним отверстием, которое продолжает вращаться во всех направлениях.