SAIMA/Assets//脚本/障碍物系统/ObstacleManager.cs
Roman e6888a748d 任务:编写教程和开始场景
分析:分为五个阶段,每个阶段一屏宽。前四个阶段是教程阶段,分别仅放一种障碍(第一个无障碍)和提示,提示参照茶杯头教程关。
每个阶段间有明显间断、镜头固定,但当马通过该阶段的障碍后,镜头右移一个阶段。马不能倒退,相机左侧有空气墙。
到达最终阶段后,按流程点燃圣火进入游戏

设计:
1.搭建核心场景,放置障碍物。
DONE
2.设计教程及开始场景管理器
(1.控制相机,使马每通过一个阶段,相机运动到记录的位置
DONE
(2.给相机左侧添加空气墙
DONE
(3.管理器要明确记录此时玩家处于哪个阶段
DONE
(4.当玩家进入点燃圣火触发器,切断操控,等待动画结束或者一些信号,触发从右向左的渐变黑幕遮挡全屏,随后转场到新场景。
DONE

至此,基本逻辑完成,需要补充大量细节、替换大量美术素材。

修复问题:
1.人马分离障碍连续出现可能导致致命问题,修复使其不能连续出现
DONE
2.GamePlay中,远处的山需要补充运动逻辑
DONE
2022-08-26 18:11:05 +08:00

52 lines
1.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObstacleManager : UnitySingleton<ObstacleManager>
{
[Header("各种障碍物的预制体")]
public GameObject[] obstacles;
[Header("出现障碍物的时间间隔")]
public float creatObstaclesTimeInterval;
[Header("生成障碍物的位置仅控制xzy由预制体决定")]
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>();
}
}