【问题标题】:Prefab loaded by Resources.Load can not be rendered on sceneResources.Load 加载的 Prefab 无法在场景中渲染
【发布时间】:2018-04-06 21:35:27
【问题描述】:

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

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

问题是bulletPrefab 不会出现在游戏场景中。它的activeSelf 属性是true,但它的activeInHierarchy 属性是false。有谁知道为什么会这样以及如何让bulletprefab在场景中显示?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    不要修改预制件。你在做bulletPrefab.transform.position = ...时尝试修改它

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


    查看您的最后一个question,您的问题似乎是拍摄预制件。您不会通过将子弹的位置设置到 one 帧中的另一个位置来射击预制件。您可以使用协程并在多个帧上执行此操作,也可以为此使用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;
    }
    

    【讨论】:

    • 非常感谢您的详细解释,这正是我一直在寻找的。我会尝试你的解决方案,然后回来告诉你结果。
    • Np。请注意,使用了transform.position + cameraTransform.forward。这假设此脚本附加到玩家或您希望子弹射击的地方。这就是transform.position 的用途。
    • 还是没有运气。我尝试了上面的代码,它给了我类似的不需要的线索。在这两种方法中,不需要的痕迹在出现几次后就会停止显示。
    • 不想要的轨迹实际上是子弹的起始位置和子弹预制件之间的一条线。真正的轨迹是一条移动的线段。我不知道是什么导致了这种行为。
    • 什么是子弹对象?什么类型的对象?你能播放视频来描述你所说的踪迹吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多