项目最近的一个需求是做掉落,就是打完怪爆装备,不想用碰撞因为要给地板和掉落的物品都加上碰撞体太损耗了,所以决定由代码计算。
不过这里有个前提,因为掉落要掉到地板上这个其实不好计算,因为很难判断哪里是地板
我们项目用了寻路,所以我选择的方法是先随机掉落方向,给一定的掉落距离,找出最近的寻路点,这个寻路点作为掉落的终点。
掉落主要分几个状态:
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秒)
计时器到时就停止移动并跳到第三步。
这样子的做法就不用碰撞并到指定点了。
之后就按一般的做法