unity跑酷无限路
一直想学习制作跑酷游戏,但始终找不到关于“Unity跑酷无限路”的教程,最近终于让我找到了。现在将其分享给大家。下面先来看一下效果图:
1. 项目初始化
打开Unity,新建一个Project,在纯净状态下导入NGUI 3.6.0以及自带的Scripts。若一切正常,你的画面将和我的一样。
2. 创建场景元素
2.1 平面和灯光
新建一个Plane和Directional Light。将Plane的Z轴大小设置为10,并调整摄像机角度,使这个平面看上去像跑道。为了更清晰地观察,我添加了一个正方体。
选中Plane,按Ctrl + D复制一个平面,此时有两个平面,分别将它们改名为bg1和bg2。设置bg1的position的Z值为50,bg2的position的Z值为150,这样它们就连成了一条大道。
2.2 主角移动脚本
把立方体改名为player,在Project栏目里新建文件夹Scripts,然后在该文件夹下新建C#脚本playControl。以下是playControl的代码,此代码用于临时测试(后期将被Mecanim、Root Motion、Blend tree、阿凡达等更高级的技术取代):
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);
}
}
将playControl脚本绑定给立方体player。摄像机(Main Camera,以后统称摄像机)绑定Unity自带的Script脚本——SmoothFollow,并指定Target为player,同时设置相关数值。
2.3 素材处理
新建文件夹Materials和Textures(游戏相关所有素材由我提供)。在Materials文件夹中新建一个Material,指定Textures里的贴图,然后为bg1和bg2更换外观。按照工业规则,相关文件应放在相关文件夹,后续将不再特意说明。一切就绪后,你的场景将和我的一样。
此时,按键盘上下左右键可以控制player移动。若一直按向上键,player很快就会走完这条道路,而我希望实现一条无尽循环的路。接下来,我们一鼓作气实现这条“不归路”。
3. 触发器设置
3.1 创建第一个触发器
通过Unity菜单 - GameObject - Create Empty创建一个空对象,改名为trag1,将其坐标设置为(0, 3.5, 15),缩放设置为(1, 1, 0.2)。为其添加Box Collider,将Size设置为(10, 7, 1),并勾选Is Trigger。设置这些的目的是让player经过这个触发器时,触发bg1和bg2的动态自我复制,从而实现循环。
3.2 创建第二个触发器
同理,bg2也需要一个触发器。将其坐标设置为(0, 3.5, 115)。这样我们就得到了两个触发器。为了符合工业流程,将这两个触发器分别作为bg1和bg2的子项。
3.3 触发器脚本
新建C#脚本bgtrigger,代码如下:
using UnityEngine;
using System.Collections;
public class bgtrigger : MonoBehaviour
{
GameObject bg;
void Start()
{
bg = new GameObject();
}
void OnTriggerEnter(Collider e)
{
if (e.CompareTag("Player"))
{
if (gameObject.transform.parent.CompareTag("bg2")) // 父类
{
bg = GameObject.FindGameObjectWithTag("bg1");
bg.transform.position = new Vector3(0, 0, bg.transform.position.z + 200);
}
else
{
bg = GameObject.FindGameObjectWithTag("bg2");
bg.transform.position = new Vector3(0, 0, bg.transform.position.z + 200);
}
}
}
}
为立方体player添加名为“Player”的Tag,并添加刚体。同时,新增两个Tag,分别为平面bg1和平面bg2添加名为bg1、bg2的Tag。最后,将新添加的C#脚本bgtrigger分别绑定给trag1和trag2。
将player立方体的坐标设置为(0, 0.5, 20),运行游戏,美好的事情就会发生。player一直前进,经过触发器后,上一个平面将复制到前面,无限循环的马赛克路就实现了!
4. 后续计划
下一课将复杂粗暴地实现人物模型导入、关卡制作心得、悟空降临、Mecanim调研、阿凡达、动画片段循环设置、Root Motion脚本处理、复合Blend Tree、动画状态机过渡设置等内容。