如何在2D游戏中,在摄像机进入房间之前,在设定的视口位置实例化敌人?(或其他解决方案!)

问题描述 投票:0回答:1

我目前正在制作一款2D游戏,我想在关卡中预置敌人,我希望当玩家进入房间时,敌人已经在房间里了。现在,当摄像机撞到对撞机时,在进入房间时就会触发相遇,而敌人会在视口位置被实例化,但是因为它是在摄像机进入房间时触发的,所以位置是不正确的。使用硬值不是一个选项,因为地图当然可能会改变,而且我可能希望它们在某些时候随机生成。所以我想最终的问题是相机在实例化时不在正确的位置,而不希望敌人一旦 "弹 "进来。

编辑:澄清一下,当我只是把摄像机移动到没有碰撞器的房间,并手动实例化时,敌人会出现在房间的正确位置,这基本上是我想要的,但在摄像机击中房间之前,所以敌人不会 "传送 "进来。

有什么方法可以让我在关卡开始时,无论分辨率如何,都能在屏幕上的同一点实例化敌人?

邂逅将有最多3个敌人,他们将始终保持相同的阵型(随机化的点位以增加多样性

这是我的实例化代码。

 [SerializeField] public List<GameObject> levelEnemies = new List<GameObject>();
 GameObject levelEnemy;
 Vector3 enemyPosition;
 Vector3 viewportPosition = new Vector3(0.8f, 0.5f, 10f); // Place on the screen I decided I want single enemies to appear
 Camera cam;

 void Start()
 {

     Debug.Log("Enemy Triggered");
     cam = Camera.main;
     enemyPosition = cam.ViewportToWorldPoint(viewportPosition);
     levelEnemy = Instantiate(levelEnemies[0], enemyPosition, Quaternion.identity); //instantiate test enemy at the converted position

     //navigation.DisableNavigation();
 }

如果有任何正确的帮助,我将非常感激,或者是一个变通的方法!

unity3d camera viewport instantiation
1个回答
0
投票

使用一个放置在房间里的产卵游戏对象来产卵你的敌人可能会更容易。在醒着的时候,你将它们实例化,所以应该不会出现它们被产卵在视图上或错误位置上的问题。


0
投票

我建议的几个(替代)解决方案是:1:

  1. 在场景中放置特殊类型的对象,这些对象与触发器相连,当触发器被击中时,在他们的位置上生成敌人(如其他用户所建议的)。

  2. 将敌人作为关卡设计的一部分,但将其设置为非活动状态,然后仅使用触发器对其进行调用SetActive(true)(在性能上实现第1点的想法更简单快捷)

  3. 在相对于玩家的位置而不是相机的位置上生成敌人。

4.使产卵位置相对于触发本身而言

试着用没有这种随机性的工作方式来实现它,以后再添加随机性,当你会知道什么类型的随机结果范围满足你的要求.为了防止地图改变的问题,使用两种解决方案之一。

  1. 使用可序列化( https:/docs.unity3d.comManualscript-Serialization.html。 )(如果你还没有使用它们,你真的应该经常使用它们)
  2. 将这些点连接到一些游戏对象上(同样可能是通过序列化)。

希望能解决你的问题

© www.soinside.com 2019 - 2024. All rights reserved.