具体实现效果是:创建一个预设体做为当前路,在当前路的结尾处创建一个新的路;当前的路和第二个路上加上路点,让玩家沿着设置的路点前行,当玩家走到第二个路的时候,第一个路销毁,然后在第二个路后面创建一个新的路作为下一个路,然后当前所在的路(开始时的第二个路)作为第一个当前路,依次循环........。
具体方法:
创建三个类:
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引擎中创建一个玩家和路
![Uploading Paste_Image_268305.png . . .]