目录
场景搭建
代码实现
注:物体命名中注意不要有空格,不然可能会产生自己很难找的问题。
1.新建两个Plane
Plane(1)设置位置如图,使两个Plane拼接起来
可以在Project面板右击Create->Material 创建新的材质,选择颜色,然后将此Material(blue或者red)托给任意Plane即可为其上色
箭头所指为颜色选择器
最终结果如下
将Main Camera放到cube下,调整相机视角如图(方便我们的观察)
点击cube,然后在Inspector点击Add Component,在Physics中选择添加Rigidbody,为cube添加刚体。
3.添加道路循环生成触发器
新建一个名为loop的空物体(在Hierarchy面板右击->Create Empty),并为其添加Box Collider属性进行碰撞检测,各项属性设置如图:
将 loop 复制一份并分别放到两个Plane下,如图
1.cude移动代码
新建一个名为 PlayControl 的c#文件如图,并将此文件托给cube物体,以实现控制cube的移动,将cube的Tag设置为Palyer:
代码内容为:
using UnityEngine;
using System.Collections;
public class PlayControl : MonoBehaviour
{
public float movespeed = 10f;
void Update()
{
if (Input.GetKey(KeyCode.UpArrow))
transform.Translate(Vector3.forward * movespeed * Time.deltaTime);
if (Input.GetKey(KeyCode.DownArrow))
transform.Translate(Vector3.back * movespeed * Time.deltaTime);
if (Input.GetKey(KeyCode.LeftArrow))
transform.Translate(Vector3.left * movespeed * Time.deltaTime);
if (Input.GetKey(KeyCode.RightArrow))
transform.Translate(Vector3.right * movespeed * Time.deltaTime);
}
}
2.道路循环实现:
新建两个C#文件,命名和代码如下:
Loop:
using UnityEngine;
using System.Collections;
public class Loop : MonoBehaviour
{
GameObject gb;
void Start()
{
gb = new GameObject();
}
void OnTriggerEnter(Collider e)
{
if (e.CompareTag("Player"))
{
if (gameObject.transform.parent.CompareTag("Plane"))
{
gb = GameObject.Find("Plane(1)");
gb.transform.position = new Vector3(0, 0, gb.transform.position.z + 18);
}
}
}
}
Loop1:
using UnityEngine;
using System.Collections;
public class Loop1 : MonoBehaviour
{
GameObject gb;
GameObject gb2;
void Start()
{
gb = new GameObject();
}
void OnTriggerEnter(Collider e)
{
if (e.CompareTag("Player"))
{
if (gameObject.transform.parent.CompareTag("Plane(1)"))
{
gb = GameObject.Find("Plane");
gb.transform.position = new Vector3(0, 0, gb.transform.position.z + 18);
}
}
}
}
点击Tag,新建两个Tag分别为 Plane 和 Plane(1),将Plane和Palne(1)物体(两个蓝红道路)的Tag设置为对应的Plane 和 Plane(1)Tag。
添加Tag:
设置Tag:
将两个C#文件分别托给 loop 和 loop(1)物体,用于当 cube 和两个物体碰撞时触发脚本使道路前移,实现道路循环。