美文网首页
2D小游戏——地形(1)

2D小游戏——地形(1)

作者: GZoO | 来源:发表于2019-02-23 18:57 被阅读0次
    1、父物体为标准点,放在摄像机之外,高度适中,原因稍后解释。如图: 子物体坐标为(0,0,0) 2、复制,把地面铺满。 地面

    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

    相关文章

      网友评论

          本文标题:2D小游戏——地形(1)

          本文链接:https://www.haomeiwen.com/subject/mkupyqtx.html