跑酷类游戏地形循环

具体实现效果是:创建一个预设体做为当前路,在当前路的结尾处创建一个新的路;当前的路和第二个路上加上路点,让玩家沿着设置的路点前行,当玩家走到第二个路的时候,第一个路销毁,然后在第二个路后面创建一个新的路作为下一个路,然后当前所在的路(开始时的第二个路)作为第一个当前路,依次循环........。

具体方法:
创建三个类:

Road类:

using UnityEngine;
using System.Collections;

public class Road : MonoBehaviour {

    public float width;
    public float length;
    public Transform[] road_points;
}

具体实现效果是:创建一个预设体做为当前路,在当前路的结尾处创建一个新的路;当前的路和第二个路上加上路点,让玩家沿着设置的路点前行,当玩家走到第二个路的时候,第一个路销毁,然后在第二个路后面创建一个新的路作为下一个路,然后当前所在的路(开始时的第二个路)作为第一个当前路,依次循环........。

具体方法:
创建三个类:

Road类:

using UnityEngine;
using System.Collections;

public class Road : MonoBehaviour {

    public float width;
    public float length;
    public Transform[] road_points;
}

Player类:
using UnityEngine;
using System.Collections;

public class Player : MonoBehaviour {

    public float move_speed;
    public Vector3 move_dir;

    void Update()
    {
        Move();
    }

    void Move()
    {
        move_dir = RoadManager.GetInstance().GetDir(transform);
        transform.Translate(move_dir * move_speed *Time.deltaTime);
    }
}

RoadManager类:

using UnityEngine;
using System.Collections;

public class RoadManager : MonoBehaviour {
    
    public Road current_road;
    public Road next_road;
    private Vector3 move_dir;
    public GameObject road_prefab;
    static RoadManager instance;

    public static RoadManager GetInstance()
    {
        return instance;

    }
    void Awake()
    {
        instance = this;
    }

    public Road CreateRoad()
    {
        //创建的路 = 实例化(路的预设体, 当前路的位置 + 路的长度,没有旋转)
        GameObject road = (GameObject)Instantiate(road_prefab, current_road.transform.position + new Vector3(0, 0, current_road.length), Quaternion.identity);

        return road.GetComponent<Road>();
    }
    // 销毁路
    public void DestoryRoad(Road road)
    {
        Destroy(road.gameObject);

    }
    //目标路点的索引
    int target_point_index;
    public Vector3 GetDir(Transform player_transform)
    {
        // 判断是否切换地形(玩 家的位置 和 当前路的路点的位置 小于1米时)
        if (Vector3.Distance(player_transform.position, current_road.road_points[target_point_index].position) < 1f)
        {

            target_point_index++;
            //到达最后一个路点的时候
            if (target_point_index == current_road.road_points.Length)
            {
                //销毁当前路
                DestoryRoad(current_road);
                //第二个路作为当前路
                current_road = next_road;
                //创建新的地形为下一个路
                next_road = CreateRoad();
                //路径点为1
                target_point_index = 1;
            }
        }
        //路的移动的方向 =  当前路的路点 - 当前路的上一个路点
        move_dir = current_road.road_points[target_point_index].position - current_road.road_points[target_point_index - 1].position;

        return move_dir;
    }
}

然后在Unity3d引擎中创建一个玩家和路

Paste_Image.png
Paste_Image.png

![Uploading Paste_Image_268305.png . . .]

推荐阅读更多精彩内容