Unity地形动态生成的一些经验记录

        正经人谁写日记啊
                                                --汪涵

        我以前也一直认为一个正经忙碌的人哪有时间和精力去写日记呢?

        但是我错了,正因为忙绿没有精力,才要将重要的事情记录下来.

        我记录的东西也都是一些比较简单的Unity使用,C#程序设计的浅显的东西.

        但是谁知道呢,当我不停地探索之后,发出来的内容,也许对于那些刚入门的新人来说,会是一个引导.

关于地形(terrain)对象

        有四个重要参数,地形宽度,地形长度和地形高度,以及高度图分辨率.

        前面三个都好理解,主要是最后一个高度图分辨率,它是一个二维的平面图,用灰色深度来代表地形高低起伏的一个图.(最黑为0)

        它不直观展示出来,它只在程序计算地形高度时起作用,这就比较抽象.

        并且高度图的分辨率和地形分辨率(长*宽)可以不是一样的.

        更低的分辨率在生成地形高度时会变得更陡峭.(这不是创建陡峭地形的方法,这种只会影响玩家的游戏体验.)

        一个1024*1024的地形图如果配上513*513的高度图那么整个地形的起伏会非常平滑

但是一个10240*10240的地形图,如果配上513*513的高度图,那么整个地形的起伏会变得非常突兀.

因为每个高度图的像素点,将要承担10倍于1024*1024地形图的起伏.

   

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

public class CreateTerrain : MonoBehaviour
{
    public int seed;
    public float terrainWidth = 1024f;//地形的宽度
    public float terrainLength = 1024f;//地形的长度
    public int terrainHeight = 50;//地形的高度

    public Texture2D[] terrainTexture;
    public float perlinScale = 10.0f;
    public float[] perlinThreshold = {0.25f, 0.5f, 0.75f };

    private float randomOffsetX;
    private float randomOffsetY;
    public float centerHeight ;
    public float edgeHeight ;
    [Range(0, 2048)]
    public float slopeRadius;
    int terrainResolution;

    public static float Add(float a, float b)
    {
        float c = a + b;
        return c;
        //计算高度图分辨率
    }

    所以在创建高度图分辨率时应该和地形宽度和长度进行一个动态改变.

将长度和宽度相加,并且除以2,已达到清晰度和兼顾配置的需求.

 void Start()
    {
        terrainResolution = ((int)Add(terrainWidth,terrainLength)/2);
        Random.InitState(seed);
        randomOffsetX = Random.Range(0f, 1
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值