佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1497|回复: 10

Unity OnCollisionEnter 问题

[复制链接]
发表于 17-10-2013 11:45 AM | 显示全部楼层 |阅读模式
我想问如果

void OnCollisionEnter (Collision collision){
if(collision.gameObject.tag ==objectA){
我想在这边加如果触碰到objectA的面积少于50%
然后就destroy collision的话应该怎么写?
}
}

p/s:我是c#的~

回复

使用道具 举报


ADVERTISEMENT

发表于 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 | 显示全部楼层
触碰到objectA的面积少于50%

好奇: 可不可以加 Empty/Dummy, scale down to the size required, then detect collision?
回复

使用道具 举报

Follow Us
 楼主| 发表于 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
                        }
             }


回复

使用道具 举报


ADVERTISEMENT

发表于 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 | 显示全部楼层
XiaoXiXi 发表于 9-12-2013 02:43 PM
两个box其实是一样大的 ~
所以才使用这个办法~

AABB OBB BSP是 Collision Detection Techniques
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 9-11-2025 10:02 AM , Processed in 0.110023 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表