|
查看: 1497|回复: 10
|
Unity OnCollisionEnter 问题
[复制链接]
|
|
|
我想问如果
void OnCollisionEnter (Collision collision){
if(collision.gameObject.tag ==objectA){
我想在这边加如果触碰到objectA的面积少于50%
然后就destroy collision的话应该怎么写?
}
}
p/s:我是c#的~
|
|
|
|
|
|
|
|
|
|
|
发表于 7-11-2013 07:31 PM
|
显示全部楼层
|
好难写呢,如果可以得到触碰面的交叉点,取几个点的位置就可以算面积了 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 11-11-2013 10:53 AM
|
显示全部楼层
gamer2088 发表于 7-11-2013 07:31 PM 
好难写呢,如果可以得到触碰面的交叉点,取几个点的位置就可以算面积了
没关系 我自己解决了
|
|
|
|
|
|
|
|
|
|
|
发表于 14-11-2013 10:02 AM
|
显示全部楼层
XiaoXiXi 发表于 11-11-2013 10:53 AM 
没关系 我自己解决了
你是用什么方法做到的?
|
|
|
|
|
|
|
|
|
|
|
发表于 14-11-2013 10:21 AM
|
显示全部楼层
XiaoXiXi 发表于 11-11-2013 10:53 AM 
没关系 我自己解决了
楼主可以分享一下怎样解决么?..
 |
|
|
|
|
|
|
|
|
|
|
发表于 24-11-2013 12:59 AM
|
显示全部楼层
好奇: 可不可以加 Empty/Dummy, scale down to the size required, then detect collision? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 3-12-2013 11:01 AM
|
显示全部楼层
gkheng2003 发表于 24-11-2013 12:59 AM 
好奇: 可不可以加 Empty/Dummy, scale down to the size required, then detect collision?
这样是可以的 但是弄了后其实是非常的麻烦的~
而且对之后的修改很大的问题~
|
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 3-12-2013 11:04 AM
|
显示全部楼层
gamer2088 发表于 14-11-2013 10:02 AM 
你是用什么方法做到的?
if (col.gameObject.tag == "BoxA")
{
BoxB = col.collider.transform;
if (blockTwo)
{
print("(" + name + ") - blocks array = (" + block + ")");
dist = Vector3.Distance(blockTwo.position, transform.position);
worldDistPosition = BoxB.transform.position.x;
Debug.Log(worldDistPosition);
calculatePoint = dist / 2;
Debug.Log("(" + name + ") - Distance = (" + calculatePoint + ")");
BoxB = null;
if (calculatePoint < 0.8500)
{
//Event
}
}
|
|
|
|
|
|
|
|
|
|
|
发表于 3-12-2013 02:05 PM
|
显示全部楼层
XiaoXiXi 发表于 3-12-2013 11:04 AM 
if (col.gameObject.tag == "BoxA")
{
BoxB = col.collider.tran ...
好奇:BoxB = col.collider.transform;
1) BoxB/col.collider 的面积是和col一样大?if (blockTwo)
{
print("(" + name + ") - blocks array = (" + block + ")");
dist = Vector3.Distance(blockTwo.position, transform.position);
2) blockTwo是另外一个Empty, with collider?calculatePoint = dist / 2;
Debug.Log("(" + name + ") - Distance = (" + calculatePoint + ")");
BoxB = null;
if (calculatePoint < 0.8500) 3) if ( Vector3.Distance(blockTwo.position, transform.position)/ 2 < 0.8500) ;
这个不是说他们的距离少过0.8500?
你要的不是50%面积吗?
我以为你要用:
1) AABB
2) BSP
3) OBB
不过这3个除非是自己的engine, 很难写道那个level
本帖最后由 gkheng2003 于 3-12-2013 02:09 PM 编辑
|
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 9-12-2013 02:43 PM
|
显示全部楼层
gkheng2003 发表于 3-12-2013 02:05 PM 
好奇:
1) BoxB/col.collider 的面积是和col一样大? ...
两个box其实是一样大的 ~
所以才使用这个办法~
blockTwo是另一个prefab来的~
就是只要达到整个function完成就会instantiate 新的block而我会assign as blockTwo,
0.8500是因为我之后还有一个不是完全达到一半的function出现了~
至于你说的什么AABB等等 我不会 ~
我只是初学者而已~
|
|
|
|
|
|
|
|
|
|
|
发表于 9-12-2013 11:30 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|