3、计算地面高度。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GroundController : MonoBehaviour {
/// <summary>
/// 用于存放地块
/// </summary>
private ArrayList groundTiles;
// Use this for initialization
void Start () {
groundTiles = new ArrayList();
#region 遍历子物体存于arraylist
for (int i = 0; i < transform.childCount; ++i)
{
Transform t = transform.GetChild(i);
if (i > 5)//游戏开始的前几块地砖不需要有起伏
{
t.localPosition = SetPosition(i);
}
//注册进arraylist
groundTiles.Add(t);
}
#endregion
}
/// <summary>
/// 计算起伏坐标
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public Vector3 SetPosition(int i)
{
Vector3 temp = Vector3.zero;
Vector3 lastPos = transform.GetChild(i - 1).localPosition;//上一个砖块的相对坐标
float x = lastPos.x + 0.16f;//横坐标为上一个坐标加长度
float y = 0.16f * Random.Range(-2, 2);//竖坐标随机向上一格或向下两格或不动
temp = new Vector3(x, y, 0);
return temp;
}
}
此时随机出来的地面高度有时会过高,加些限制。
脚本放于父物体。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GroundController : MonoBehaviour {
/// <summary>
/// 用于存放地块
/// </summary>
private ArrayList groundTiles;
// Use this for initialization
void Start () {
groundTiles = new ArrayList();
#region 遍历子物体存于arraylist
for (int i = 0; i < transform.childCount; ++i)
{
Transform t = transform.GetChild(i);
if (i > 5)//游戏开始的前几块地砖不需要有起伏
{
t.localPosition = SetPosition(i);
}
//注册进arraylist
groundTiles.Add(t);
}
#endregion
}
/// <summary>
/// 计算起伏高度
/// </summary>
/// <param name="i"></param>
/// <returns></returns>
public Vector3 SetPosition(int i)
{
Vector3 temp = Vector3.zero;
Vector3 lastPos = transform.GetChild(i - 1).localPosition;//上一个砖块的相对坐标
float x = lastPos.x + 0.16f;//横坐标为上一个坐标加长度
float y = 0.16f * Random.Range(-2, 2);//竖坐标随机向上一格或向下两格或不动(以本地坐标(0,0,0)为准)
if (y - lastPos.y > 0.16f)//新的地面比上一块地砖高2倍多时
{
y = lastPos.y + 0.16f;
}
else if (lastPos.y - y > 0.16f)//新的地面比上一块地砖低2倍多时
{
y = lastPos.y - 0.16f;
}
temp = new Vector3(x, y, 0);
return temp;
}
}
交流群 962257105