当摄像机随玩家游戏对象移动时,只在摄像机视图中产生敌人游戏对象。

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

我试图在固定的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);
    }
}

}

c# unity3d
1个回答
0
投票

新答案

使用与你对敌方对象的引用相同的方法获得对地面对象的引用。

[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);

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

更多信息请看。

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