SAIMA/Assets//脚本/障碍物系统/ObstacleManager.cs
Roman e3e11e2556 任务:编写玩法框架
1.制作障碍系统

(1.制作几种类型的障碍物的预制体
((*.编写障碍物基类,以下几种均继承自基类,含碰撞体,RememberY(生成障碍物时该有多大的Y)
((1.矮障碍,仅碰撞体
((2.高障碍,仅碰撞体
((3.可冲破障碍
(((1.除基本碰撞体外,额外包含一个触发器,比碰撞体先检测到马,同时获取马的x速度,大于阈值则给障碍做破碎,用马的力度决定破碎力,关闭碎块和马的碰撞
(((*.导入某2D破碎插件
((4.人马分离障碍
(((WAIT,需要等待人马分离系统先搭建

(2.编写障碍物生成系统
((1.每若干时间,生成一个随机一种障碍,若干的范围可控
(((1.设计协程,从预制体列表中随机出一种,并在计算好的位置实例化,随后等待范围内的若干时间,然后检查马的存活情况,若马仍存活,重新调用本协程
((2.生成的位置:x在相机右侧若干不变距离,y根据障碍物的不同而不同,需要计算保存。

(3.编写障碍物消亡系统
((1.每个障碍物和碎片都会在离开镜头后被删除
2022-07-30 00:47:44 +08:00

44 lines
1.3 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;
void Start()
{
horse = FindObjectOfType<Horse>();
}
public void StartCreatObstacle()
{
StartCoroutine(CreatAObstacle());
}
private IEnumerator CreatAObstacle()
{
float randomT = Random.Range(0f,1f);
GameObject obstacle;
if(randomT < 0.33f)
obstacle = obstacles[0];
else if(randomT < 0.66f)
obstacle = obstacles[1];
else
obstacle = obstacles[2];
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());
}
}