
分析:分为五个阶段,每个阶段一屏宽。前四个阶段是教程阶段,分别仅放一种障碍(第一个无障碍)和提示,提示参照茶杯头教程关。 每个阶段间有明显间断、镜头固定,但当马通过该阶段的障碍后,镜头右移一个阶段。马不能倒退,相机左侧有空气墙。 到达最终阶段后,按流程点燃圣火进入游戏 设计: 1.搭建核心场景,放置障碍物。 DONE 2.设计教程及开始场景管理器 (1.控制相机,使马每通过一个阶段,相机运动到记录的位置 DONE (2.给相机左侧添加空气墙 DONE (3.管理器要明确记录此时玩家处于哪个阶段 DONE (4.当玩家进入点燃圣火触发器,切断操控,等待动画结束或者一些信号,触发从右向左的渐变黑幕遮挡全屏,随后转场到新场景。 DONE 至此,基本逻辑完成,需要补充大量细节、替换大量美术素材。 修复问题: 1.人马分离障碍连续出现可能导致致命问题,修复使其不能连续出现 DONE 2.GamePlay中,远处的山需要补充运动逻辑 DONE
52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
|
||
public class ObstacleManager : UnitySingleton<ObstacleManager>
|
||
{
|
||
[Header("各种障碍物的预制体")]
|
||
public GameObject[] obstacles;
|
||
[Header("出现障碍物的时间间隔")]
|
||
public float creatObstaclesTimeInterval;
|
||
[Header("生成障碍物的位置,仅控制xz,y由预制体决定")]
|
||
public Transform obstacleCreatPostion;
|
||
|
||
private Horse horse;
|
||
private Obstacle lastObstacle;
|
||
|
||
void Start()
|
||
{
|
||
horse = FindObjectOfType<Horse>();
|
||
}
|
||
|
||
public void StartCreatObstacle()
|
||
{
|
||
StartCoroutine(CreatAObstacle());
|
||
}
|
||
|
||
private IEnumerator CreatAObstacle()
|
||
{
|
||
float randomT = Random.Range(0f,1f);
|
||
GameObject obstacle;
|
||
if(randomT < 0.25f)
|
||
obstacle = obstacles[0];
|
||
else if(randomT < 0.5f)
|
||
obstacle = obstacles[1];
|
||
else if(randomT < 0.75f)
|
||
obstacle = obstacles[2];
|
||
else if(lastObstacle != null && lastObstacle.obstacleType != ObstacleType.humanHorseBreak)
|
||
obstacle = obstacles[3];
|
||
else{
|
||
StartCoroutine(CreatAObstacle());
|
||
yield break;
|
||
}
|
||
Vector3 xz = obstacleCreatPostion.position;
|
||
Vector3 pos = new Vector3(xz.x,obstacle.transform.position.y,xz.z);
|
||
GameObject.Instantiate(obstacle, pos, Quaternion.identity);
|
||
yield return new WaitForSeconds(creatObstaclesTimeInterval);
|
||
if(horse.IsHorseStillAlive()) StartCoroutine(CreatAObstacle());
|
||
lastObstacle = obstacle.GetComponent<Obstacle>();
|
||
}
|
||
}
|