
1.制作障碍系统 (1.制作几种类型的障碍物的预制体 ((*.编写障碍物基类,以下几种均继承自基类,含碰撞体,RememberY(生成障碍物时该有多大的Y) ((1.矮障碍,仅碰撞体 ((2.高障碍,仅碰撞体 ((3.可冲破障碍 (((1.除基本碰撞体外,额外包含一个触发器,比碰撞体先检测到马,同时获取马的x速度,大于阈值则给障碍做破碎,用马的力度决定破碎力,关闭碎块和马的碰撞 (((*.导入某2D破碎插件 ((4.人马分离障碍 (((WAIT,需要等待人马分离系统先搭建 (2.编写障碍物生成系统 ((1.每若干时间,生成一个随机一种障碍,若干的范围可控 (((1.设计协程,从预制体列表中随机出一种,并在计算好的位置实例化,随后等待范围内的若干时间,然后检查马的存活情况,若马仍存活,重新调用本协程 ((2.生成的位置:x在相机右侧若干不变距离,y根据障碍物的不同而不同,需要计算保存。 (3.编写障碍物消亡系统 ((1.每个障碍物和碎片都会在离开镜头后被删除
50 lines
1.2 KiB
C#
50 lines
1.2 KiB
C#
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Delaunay
|
|
{
|
|
namespace Geo
|
|
{
|
|
public sealed class Polygon
|
|
{
|
|
private List<Vector2> _vertices;
|
|
|
|
public Polygon (List<Vector2> vertices)
|
|
{
|
|
_vertices = vertices;
|
|
}
|
|
|
|
public float Area ()
|
|
{
|
|
return Mathf.Abs (SignedDoubleArea () * 0.5f); // XXX: I'm a bit nervous about this; not sure what the * 0.5 is for, bithacking?
|
|
}
|
|
|
|
public Winding Winding ()
|
|
{
|
|
float signedDoubleArea = SignedDoubleArea ();
|
|
if (signedDoubleArea < 0) {
|
|
return Geo.Winding.CLOCKWISE;
|
|
}
|
|
if (signedDoubleArea > 0) {
|
|
return Geo.Winding.COUNTERCLOCKWISE;
|
|
}
|
|
return Geo.Winding.NONE;
|
|
}
|
|
|
|
private float SignedDoubleArea () // XXX: I'm a bit nervous about this because Actionscript represents everything as doubles, not floats
|
|
{
|
|
int index, nextIndex;
|
|
int n = _vertices.Count;
|
|
Vector2 point, next;
|
|
float signedDoubleArea = 0; // Losing lots of precision?
|
|
for (index = 0; index < n; ++index) {
|
|
nextIndex = (index + 1) % n;
|
|
point = _vertices [index];
|
|
next = _vertices [nextIndex];
|
|
signedDoubleArea += point.x * next.y - next.x * point.y;
|
|
}
|
|
return signedDoubleArea;
|
|
}
|
|
}
|
|
}
|
|
} |