
1.制作障碍系统 (1.制作几种类型的障碍物的预制体 ((*.编写障碍物基类,以下几种均继承自基类,含碰撞体,RememberY(生成障碍物时该有多大的Y) ((1.矮障碍,仅碰撞体 ((2.高障碍,仅碰撞体 ((3.可冲破障碍 (((1.除基本碰撞体外,额外包含一个触发器,比碰撞体先检测到马,同时获取马的x速度,大于阈值则给障碍做破碎,用马的力度决定破碎力,关闭碎块和马的碰撞 (((*.导入某2D破碎插件 ((4.人马分离障碍 (((WAIT,需要等待人马分离系统先搭建 (2.编写障碍物生成系统 ((1.每若干时间,生成一个随机一种障碍,若干的范围可控 (((1.设计协程,从预制体列表中随机出一种,并在计算好的位置实例化,随后等待范围内的若干时间,然后检查马的存活情况,若马仍存活,重新调用本协程 ((2.生成的位置:x在相机右侧若干不变距离,y根据障碍物的不同而不同,需要计算保存。 (3.编写障碍物消亡系统 ((1.每个障碍物和碎片都会在离开镜头后被删除
54 lines
1.5 KiB
C#
54 lines
1.5 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
|
||
public class BreakAbleObstacle : Obstacle
|
||
{
|
||
|
||
[Header("要破坏可破坏障碍物,需要多大的水平速度")]
|
||
public float breakSpeedThreshold = 1f;
|
||
|
||
[Header("爆破碎片飞出时有多大力")]
|
||
public float breakForce = 1f;
|
||
|
||
|
||
|
||
|
||
private Explodable explodable;
|
||
private ExplosionForce explosionForce;
|
||
|
||
|
||
|
||
protected override void FindSth()
|
||
{
|
||
base.FindSth();
|
||
explodable = transform.Find("Obstacle").GetComponent<Explodable>();
|
||
explosionForce = transform.Find("Force").GetComponent<ExplosionForce>();
|
||
}
|
||
|
||
void OnTriggerEnter2D(Collider2D other) {
|
||
if(other.tag == "HorseHead")
|
||
{
|
||
if(other.transform.parent.tag != "Horse")
|
||
Debug.LogWarning("用于检查可破碎障碍物的触发器捕获到了马头,但是通过马头没有找到马,很可能是马的树状结构或者tag的赋予上出了问题");
|
||
CheckHorseSpeed(other.transform.parent);
|
||
}
|
||
}
|
||
|
||
void CheckHorseSpeed(Transform horse)
|
||
{
|
||
if(horse.GetComponent<Rigidbody2D>().velocity.x > breakSpeedThreshold)
|
||
BreakObstacle(horse);
|
||
}
|
||
|
||
void BreakObstacle(Transform horse)
|
||
{
|
||
explodable.explode();
|
||
float force = horse.GetComponent<Rigidbody2D>().velocity.x * breakForce + 1;
|
||
explosionForce.force = force;
|
||
explosionForce.doExplosion(explosionForce.transform.position);
|
||
GetComponent<BoxCollider2D>().enabled = false;
|
||
}
|
||
}
|