Unity3D中的拍摄;子弹没有笔直或在正确的方向上

atmip9wb  于 2022-11-16  发布在  其他
关注(0)|答案(3)|浏览(246)

我正在制作一个自上而下的射击游戏,但是我在得到我想要的射击效果时遇到了麻烦。目前,我有一个玩家脚本来处理移动和射击。

void Update()
{
    //Player face mouse
    Plane playerPlane = new Plane(Vector3.up, transform.position);
    Ray ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);
    float hitDist = 0.0f;

    if(playerPlane.Raycast(ray, out hitDist))
    {
        Vector3 targetPoint = ray.GetPoint(hitDist);
        Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
        targetRotation.x = 0;
        targetRotation.z = 0;
        playerObj.transform.rotation = Quaternion.Slerp(playerObj.transform.rotation, targetRotation, 7f * Time.deltaTime);
    }
    //Player Movement
    if (Input.GetKey(KeyCode.W))
    {
        transform.Translate(Vector3.forward * movementSpeed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.A))
    {
        transform.Translate(Vector3.left * movementSpeed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.S))
    {
        transform.Translate(Vector3.back * movementSpeed * Time.deltaTime);
    }
    if (Input.GetKey(KeyCode.D))
    {
        transform.Translate(Vector3.right * movementSpeed * Time.deltaTime);
    }

    //Shooting
    if (Input.GetMouseButtonDown(0))
    {
       Shoot();
        
     
        gunAudio.Play();
    }

}

void Shoot()
{
    Instantiate(bullet.transform, bulletSpawnPoint.transform.position, playerObj.transform.rotation);  
}

到目前为止,子弹并不总是沿着直线射出。当玩家开始移动时,子弹似乎落后了,并且并不总是从我在武器尖端设置的子弹产卵点射出。所以如果玩家面向左或右,子弹将从玩家身后的左侧或右侧射出。如果玩家面向前,子弹总是从前面出来。
我试过在检查器中增加子弹速度,但似乎并不能解决子弹并不总是沿着正确的方向直线射出的问题。我得到的提示是,使用前向矢量可能会有所帮助,但我该如何改变我必须加入的东西呢?

62o28rlo

62o28rlo1#

如果我理解你的问题,你设置的子弹旋转是相同的球员,而不是你必须设置它是相同的Bulletspawner。而且,而不是子弹转换你应该示例化子弹作为游戏对象
因此,您的示例化应该如下所示。

// Variables
    Gameobject bullet;
    Transform bulletSpawnPoint;
    
  //  Instantiate bullet at bulletSpawn
    Instantiate(bullet, bulletSpawnPoint.position, bulletSpawnPoint.rotation);
xn1cxnb4

xn1cxnb42#

您可以用途:

playerObj.transform.forward

代替

playerObj.transform.rotation
x7rlezfr

x7rlezfr3#

我不知道您是否仍然有这个问题,但我有一个类似的问题,我通过在示例化后立即将子弹轨迹作为bulletSpawnPoint的子对象来修复它。

TrailRenderer trail = Instantiate(BulletTrail, ShootFrom.transform.position, ShootFrom.transform.rotation);

trail.transform.parent = ShootFrom.transform;

相关问题