仅在相机视图前生成敌人游戏对象,同时相机随玩家游戏对象移动

Posted

技术标签:

【中文标题】仅在相机视图前生成敌人游戏对象,同时相机随玩家游戏对象移动【英文标题】:Spawn Enemy GameObject only infornt of the Camera view while camera moves with the Player GameObject 【发布时间】:2020-09-23 01:55:40 【问题描述】:

我试图在固定的 z 轴和随机的 x 轴点之间生成敌人。我正在让地面成为玩家的孩子,所以它会随着玩家移动。玩家只能在水平轴上移动。我想让它看起来像敌人总是在玩家面前产卵。我怎么能这样做?现在,如果我与玩家一起移动地面,敌人只会在指定点生成。

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

public class SpawnManager : MonoBehaviour

[SerializeField] private GameObject _enemy;
// Start is called before the first frame update
void Start()

    StartCoroutine(SpawnRoutine());


// Update is called once per frame
void Update()




IEnumerator SpawnRoutine()

    while(true)
    
        Vector3 PosToSpawn = new Vector3(Random.Range(-23.6f, 23.6f),1, 16.6f);
        Instantiate(_enemy, PosToSpawn, Quaternion.identity);
        yield return new WaitForSeconds(1f);
    

【问题讨论】:

【参考方案1】:

新答案

使用与引用敌人对象相同的方法获取对 Ground 对象的引用。

[SerializeField]
private GameObject _ground;

替换:

Vector3 PosToSpawn = new Vector3(Random.Range(-23.6f, 23.6f),1, 16.6f);

与:

Vector3 PosToSpawn = new Vector3(Random.Range(_ground.transform.position.x - 23.6f, _ground.transform.position.x + 23.6f), 1, 16.6f);

只要您按照您所说的那样更新地面对象相对于玩家对象的位置,这将起作用。

旧答案(更改示例脚本后更改):

如果我正确理解您的问题/问题,即使您使用 Random.Range 设置它们的 x 值,每次运行游戏时,您的敌人都会在相同的地方生成。

如果这是您的实际问题,那是因为您的游戏总是使用相同的种子来生成随机数。

您可以在每次启动游戏时使用任意值(例如 System.DateTime.Now.Ticks)生成一个新的随机种子。将以下代码放入您的 Start 方法(不是您的 Update 方法):

int seed = (int) System.DateTime.Now.Ticks;
Random.InitState(seed);

上述代码的作用是,获取当前系统时间刻度(每次运行游戏时都会改变),然后使用该值作为种子初始化随机数生成器。这应该会导致您每次运行游戏时产生不同的生成位置。

更多信息请看:

https://docs.unity3d.com/530/Documentation/ScriptReference/Random-seed.html https://docs.unity3d.com/ScriptReference/Random.InitState.html

【讨论】:

嘿,对不起,这不是我要找的。无论我移动到哪里,我都试图在我的摄像机角度内产生敌人,而上面的脚本只是敌人的脚本。我有不同的生成和玩家移动脚本。 @kunalsingh 不用担心。我对您发布敌人脚本而不是生成脚本这一事实感到困惑,所以我认为您的问题与您更新敌人位置的行有关。要回答您的问题,我们需要了解您当前如何确定敌人的生成位置。如果没有这些信息,我只能说你必须使用相机截头体平面:docs.unity3d.com/ScriptReference/… 我把 Enemy 脚本改成了上面的 SpawnManager 脚本。请看一下

以上是关于仅在相机视图前生成敌人游戏对象,同时相机随玩家游戏对象移动的主要内容,如果未能解决你的问题,请参考以下文章

Ruby‘s Adventrue游戏制作笔记Unity相机跟随玩家移动

Ruby‘s Adventrue游戏制作笔记Unity相机跟随玩家移动

Java OpenGL - 如何使对象随相机旋转?

JavaFX中的2D相机?

Unity2.5 场景视图(Scene)

Unity2.6 游戏视图(Game)