项目最近的一个需求是做掉落,就是打完怪爆装备,不想用碰撞因为要给地板和掉落的物品都加上碰撞体太损耗了,所以决定由代码计算。

不过这里有个前提,因为掉落要掉到地板上这个其实不好计算,因为很难判断哪里是地板

我们项目用了寻路,所以我选择的方法是先随机掉落方向,给一定的掉落距离,找出最近的寻路点,这个寻路点作为掉落的终点。

掉落主要分几个状态:

1.实例化一个物品

2.随机一个方向,抛物线移动物品

3.掉落地板后检测与主角距离是否在区域内,区域内吸附

4.区域外的物品在指定时候后吸附。

5.销毁回收物品

因为公司网络屏蔽无法直接获取代码,挑着重点来讲。

1.实例化没什么好讲的。

2.随机一个方向就用Random.insideUnitCircle获取一个vector2的随机值。

int radius =2//掉落半径
Vector2 random = Random.insideUnitCircle;

//m_position是掉落物品的坐标
Vector3 relativePosition = new Vector3(m_position.x + random.x * radius,m_position.y,m_position.z + random.y.*radius);//获取掉落随机方向上的准备掉落的点(这时候y值不确定,所以不是最终值)
vector3 genPosition = NavSampelPosition(relativePosition ) ;//获取最近的寻路点,这个其实是同事封装接口,但里面也没什么代码,用的也是unity自带接口

而根据抛物线移动物品用这个

http://www.cnblogs.com/jqg-aliang/p/4806017.html

这个demo主要是把移动分两部分,一个是按两点直接的方向,一个是重力方向

使用这个demo就可以做到,给定时间,给两个点,就可以像抛物线一样从起点到终点。  

在开启移动的同时,打开一个定时器,并设定与上面一样的时间(如果Update的不及时,可以定的时间少0.2f秒)

计时器到时就停止移动并跳到第三步。

这样子的做法就不用碰撞并到指定点了。

之后就按一般的做法