仅在相机视图前生成敌人游戏对象,同时相机随玩家游戏对象移动
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相机跟随玩家移动