预制对象正确显示,直到实例化

对于简单的2D游戏,我有以下代码。此刻游戏被定向灯照亮,该背景灯和玩家都亮起。

public class BlockSpawner : MonoBehaviour
    {
        public GameObject blockPrefab; // a purple cube
        public Vector2 spawnSizeMinmax;
        private double _secondsBetweenSpawns = 0.5;
        private float _nextSpawnTime;
        private void Update()
        {
            if (Time.time > _nextSpawnTime)
            {
                _nextSpawnTime = (float) (Time.time + _secondsBetweenSpawns);
                float spawnSize = Random.Range(spawnSizeMinmax.x,spawnSizeMinmax.y);
                Vector3 spawnPosition =
                    new Vector3(
                        Random.Range(Player.screenHalfWidth - spawnSize,-Player.screenHalfWidth + spawnSize),Player.screenHalfHeight + spawnSize,5
                    );
                GameObject block = Instantiate(blockPrefab,spawnPosition,Quaternion.identity);

                block.transform.parent = transform;
                block.transform.localScale = Vector2.one * spawnSize;
                block.transform.Rotate(new Vector3(0,Random.Range(-20,20)));
            }
        }
    }

当我将预制件拖到场景上时,它显示为3d红色立方体。当我使用此代码生成它时,它显示为2d黑色正方形,完全不响应照明。它以其他方式表现出预期的效果。

是否有某种方法可以使其接受光?我已经尝试了检查器中的所有内容。

编辑:这是一些屏幕截图

预制对象正确显示,直到实例化

预制对象正确显示,直到实例化

xaut2008 回答:预制对象正确显示,直到实例化

正如您所注意到的,这是因为秤中的分量为零。您应该计算局部比例,以使任何分量都不为零。您可以通过在作业中使用Vector3.one而不是Vector2.one来做到这一点:

block.transform.parent = transform;
block.transform.localScale = Vector3.one * spawnSize;
block.transform.Rotate(new Vector3(0,Random.Range(-20,20)));

具有零成分标度的事实不符合发动机在确定表面是否被光照射时照明计算所依据的某些假设。

本文链接:https://www.f2er.com/3148381.html

大家都在问