跑酷类游戏地形循环

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

具体方法:
创建三个类:

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 . . .]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我们知道 在RPG里单机游戏里 游戏存档功能必不可少 在这里 网上有个教程 非常的好 是基于xml下的保存 保...
    Unity与iOS的灵魂小白阅读 3,645评论 1 2
  • 希望我的开发日志记录的经验越来越多,给以后得自己留个记录和参考,同时也能为广大的同样是想做unity独立开发者的朋...
    文坛小生阅读 689评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,947评论 18 139
  • 新的一天又要开始了 我们数着夜晚的每时每分 直到天亮 如果彻夜不眠 能不能使它充实 祈祷着 期待着 希望能够将睡眠侵蚀。
    shinesshadow阅读 89评论 0 0