[Unity3D] 关于触屏用Ray来Hit场景中GameObject的笔记(copy的,转不来)

本文介绍了一段Unity脚本代码,该代码用于通过触屏输入发射射线,并检测射线是否击中带有碰撞器的游戏对象。文中详细解释了如何使用`Input.GetTouch`获取触摸位置,`Camera.ScreenPointToRay`创建射线,以及`Physics.Raycast`进行射线投射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先放一段JS代码(出自:http://game.ceeger.com/forum/read.php?tid=4&fpage=2)
///////////////////////////////////////////////////////////////////////////
function Update ()
{
    for (var i = 0; i < Input.touchCount; ++i) {
        if (Input.GetTouch(i).phase == TouchPhase.Began) {
            var hit:RaycastHit;
            // 从目前的触摸坐标,构建射线
            var ray : Ray = camera.ScreenPointToRay (Input.GetTouch(i).position);
            print("ray="+ray);
            
            if (Physics.Raycast (ray, hit))
                print ("I'm looking at " + hit.transform.name);
            else
                print ("I'm looking at nothing!");
        }
    }
}
///////////////////////////////////////////////////////////////////////////

我经过实验后的理解是:
①这段代码是放在camera上的
②需要被击中的对象必须加collider
③被射中的Object可以用"hit"来调用。
例如,我可以写“hit.transform.position.x+=0.1”测试成功。
因此,可以用SendMessage来调用被击中对象自身内的函数。
例如直接调用“hit.transform.SendMessage(OnMouseDown)”的话,可以用鼠标测试单点效果了!
④Ray不会贯穿Object,当我放两个cube在有遮挡的地方,之后触发前面的碰撞。

重点语句:
①发射Ray用:
var ray : Ray = camera.ScreenPointToRay (Input.GetTouch(i).position); 
②撞击用:
var hit:RaycastHit; 
Physics.Raycast (ray, hit) 
撞到东西,返回true值,并给“hit”赋值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值