Unity 中的 3D 等距游戏 - 弹丸跟随玩家移动

3D Isometric game in Unity - Projectile follows player movements

我正在尝试制作一个巫师射击火球的 3D 等距游戏。我设法让它射出火球,但它们朝着巫师面对的方向前进:如果我旋转巫师,火球就会改变方向。我能做什么?谢谢你帮助我。 这是我做的脚本(附播放器):

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class WizardController : Characters
{
    [SerializeField]
    public Transform spawnMagic;

    private GameObject magicShot;
    public List<GameObject> magicBullets = new List<GameObject>();

    private void Start()
    {
        maxHP = 150.0f;
        magicShot = magicBullets[0];
    }

    void Update()
    {
        GetInputs();
        Attack();
        Defend();
        cameraFollow();
    }

    private void FixedUpdate()
    {
        LookAt();
        Move();
    }

    public override void Attack()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            GameObject magicBullet;

            isAttacking = true;
            GetComponent<Animator>().SetBool("hit1", true);

            if (spawnMagic != null)
            {
                magicBullet = Instantiate(magicShot, spawnMagic.transform.position, Quaternion.identity);
            }
        }
        else
        {
            GetComponent<Animator>().SetBool("hit1", false);
        }
    }
}

子弹的移动脚本是一个简单的“transform.position”行:

transform.position += spawnMagic.forward * (speed * Time.deltaTime);

这就是玩家射击时发生的情况:

https://youtu.be/TYwWDr8W4Q4

要解决这个问题,你必须让子弹的运动独立于任何Child向导的对象或依赖于它的转换。 如果你小心点,spawnMagic 会随着向导移动而旋转,子弹被 spawnMagic.forward 引用。

首先你需要在制作过程中将子弹旋转与 spawn spawnMagic 旋转相同。

magicBullet = Instantiate(magicShot, spawnMagic.transform.position, spawnMagic.transform.rotation)

然后在移动部分用局部子弹向前替换spawnMagic.forward,这将使子弹移动独立于移动阶段的spawnMagic方向:

 transform.position += transform.forward * (speed * Time.deltaTime)