今天要介绍最後一个小游戏,让我们开始吧!
目录
游戏机制介绍
障碍物-山的移动
障碍物-山随机产生
游戏机制介绍
只要侦测到手部Grab的动作,帝江就会往上飞一点,如果侦测到连续动作,帝江就会飞越高,玩家要用Grab动作控制帝江不要撞到并且飞越山脉。
使用素材
帝江 | 山 | 山 | 山 |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
障碍物-山的移动
Step1 变数宣告
- rec 稍後用来改变物件canvas的位置
- speed 方便移动调整速度
RectTransform rec;
public float speed;
Step2 函式宣告
在山的产生器再产生山以後,用来给山呼叫的set函式,设定山的初始位置以及旋转。
- setRec(RectTransform setPoint) 让生成器设定山的位置
- setRotation() 如果是上面的山,就旋转z轴180度,并调整成上面山的位置。
public void setRec(RectTransform setPoint) {
rec = setPoint;
}
public void setRotation(){
rec.localEulerAngles = new Vector3(0f, 0f, 180.0f);
rec.anchoredPosition = new Vector3(2755, 440, 0);
}
Step3 移动
- 山是往左边移动所以是-x,- new Vector3( speed * TimedeltaTime,0,0)。
void Update(){
rec.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
以上就是山的移动,接下来是山的产生。
障碍物-山的随机产生
时间到了就会产生新的山,所以需要计数器、山的物件、以及要产山生的点。
Step1 变数宣告
- f_nextGenTime 作为计数器
- mountainPrefab 储存要产生的山物件
- rec 储存生成山的UI位置的依据
float f_nextGenTime = 3;
public GameObject[] mountainPrefab;
public RectTransform rec;
Step2 判断产生时间到了没
先判断计数器超过1了没
- 如果超过了就Random出一个整数,选择要产生的山。
- 将Random数作为参数丢进产生山的函式。
- 产山完就将计数器归零。
- 如果计数器没有超过1,就计数。
void Update()
{
if (f_nextGenTime > 1f)
{
int num = Random.Range(0, 3);
Generate(num);
num = Random.Range(0, 3);
GenerateAbove(num);
f_nextGenTime = 0;
}
else {
f_nextGenTime += Time.deltaTime;
}
}
Step3 山的产生函式
- 将Random数作为参数,选择要产山的3种山的mountainPrefab
- 利用Instantiate生成山,如果是下面的山就呼叫setRec(),如果是上面的山就呼叫set。
void Generate(int num) {
GameObject mountain = Instantiate(mountainPrefab[num]) as GameObject;
mountain.GetComponent<MountainMove>().setRec(rec);
mountain.transform.SetParent(GameObject.FindGameObjectWithTag("canvas").transform, false);
}
void GenerateAbove(int num){
GameObject mountain = Instantiate(mountainPrefab[num]) as GameObject;
mountain.GetComponent<MountainMove>().setRotation();
mountain.transform.SetParent(GameObject.FindGameObjectWithTag("canvas").transform, false);
}
以上就是障碍物-山的移动与产生,明天会写到主角跳跃与手部侦测的部分,那就明天见罗~