由Resources.Load加载的预制件无法在场景上渲染

时间:2018-04-06 21:35:28

标签: c# unity3d

我创建了一个Prefab,然后使用以下代码将其加载到Awake函数中:

GameObject bulletPrefab = Resources.Load<GameObject>("Enemy/Bullet");
bulletPrefab.transform.position = new Vector3(0,0,0);

问题是bulletPrefab不会出现在游戏场景中。其activeSelf属性为true,但其activeInHierarchy属性为false。有谁知道为什么会这样,以及如何在场景中制作bulletprefab节目?

1 个答案:

答案 0 :(得分:2)

不要修改预制件。您尝试bulletPrefab.transform.position = ...

时尝试修改它

bulletPrefab是一个加载的GameObject,它只存储在内存中。要查看它,您必须使用Instantiate函数对其进行实例化。您似乎已经在其他question中完成了此操作,但出于某种原因决定删除此问题中的关键部分。

看看你的上一篇question,看来你的问题就是拍摄预制件。您不要通过将子弹的位置设置到一个框架中的另一个位置来拍摄预制件。您可以使用协程并在多个帧上执行该操作,或者您可以使用Rigidbody。我建议使用Rigidbody,因为这是为它制作的东西。

确保Rigidbody附加到您要加载的预制件上。加载预制件,实例化它然后连接Rigidbody。将子弹移动到播放器+相机的前面,然后使用Rigidbody.velocityRigidbody.AddForce将子弹射向CameraTransform.forward方向,这样子弹将朝相机方向移动面对

请参阅下文,了解按下空格键时加载和拍摄子弹预制件的示例。

GameObject bulletPrefab;
Transform cameraTransform;
public float bulletSpeed = 300;

private void Start()
{
    //Load Prefab
    bulletPrefab = Resources.Load<GameObject>("Enemy/Bullet");

    //Get camera transform
    cameraTransform = Camera.main.transform;
}

void Update()
{
    //Shoot bullet when space key is pressed
    if (Input.GetKeyDown(KeyCode.Space))
    {
        shootBullet();
    }
}

void shootBullet()
{
    //Instantiate prefab
    GameObject tempObj = Instantiate(bulletPrefab) as GameObject;

    //Set position of the bullet in front of the player
    tempObj.transform.position = transform.position + cameraTransform.forward;

    //Get the Rigidbody that is attached to that instantiated bullet
    Rigidbody projectile = GetComponent<Rigidbody>();

    //Shoot the Bullet 
    projectile.velocity = cameraTransform.forward * bulletSpeed;
}