正经人谁写日记啊
--汪涵
我以前也一直认为一个正经忙碌的人哪有时间和精力去写日记呢?
但是我错了,正因为忙绿没有精力,才要将重要的事情记录下来.
我记录的东西也都是一些比较简单的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