You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity无限滑雪跑酷地形生成问题:如何获取地形末端位置

无限滑雪地形生成解决方案

核心问题分析

你当前的代码硬编码了地形生成坐标,所以只能固定生成一块地形。要实现无限延伸,关键是动态获取上一块地形的末端位置,以此作为下一块地形的生成起点。

具体实现步骤

  1. 给地形预制体添加生成标记点
    在你的雪地地形预制体中,创建一个空物体命名为SpawnPoint,将其放在地形的末端位置(也就是下一块地形应该生成的起始坐标处),确保和地形边缘完全对齐,避免出现缝隙。

  2. 修改生成逻辑代码
    替换你当前的OnTriggerEnter方法,改为动态获取上一块地形的标记点位置来生成新地形:

    public GameObject terrainPrefab; // 拖拽你的地形预制体到这里
    private GameObject _lastSpawnedTerrain;
    
    private void OnTriggerEnter(Collider other)
    {
        // 只响应玩家触发,记得给玩家对象添加"Player"标签
        if (!other.CompareTag("Player")) return;
    
        Vector3 spawnPos;
        if (_lastSpawnedTerrain == null)
        {
            // 第一次生成,用你原来的初始坐标
            spawnPos = new Vector3(-477.1f, -1, 959.35f);
        }
        else
        {
            // 获取上一块地形的末端标记点位置
            Transform spawnPoint = _lastSpawnedTerrain.transform.Find("SpawnPoint");
            spawnPos = spawnPoint.position;
        }
    
        // 生成新地形并记录
        _lastSpawnedTerrain = Instantiate(terrainPrefab, spawnPos, Quaternion.identity);
    
        // 优化建议:移动触发盒到新地形的触发位置
        // 如果触发盒是独立的,把它移到新地形的后半段(比如新地形的SpawnPoint往前一段距离)
        // 如果把触发盒做成地形预制体的一部分,这一步可以省略,每块地形自带触发盒
        Debug.Log("已生成新地形");
    }
    

额外优化建议

  • 触发盒复用:推荐把触发盒整合到地形预制体中,放在地形的后半段位置,这样玩家每进入一块地形的触发区域,就自动生成下一块,无需手动移动触发盒。
  • 旧地形清理:维护一个地形列表,当玩家距离某块地形超过视野范围时,销毁该地形,避免内存占用过高。
  • 坐标对齐检查:运行时可以开启Gizmos查看SpawnPoint的位置,确保每块地形生成后完全衔接,没有错位。

内容的提问来源于stack exchange,提问作者Adam Dalton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:20:34