Unity2D 通过射线碰撞检测选取物体

实现选取物体,有两种方案

第一种,使用3D射线碰撞检测

第二种,使用2D射线碰撞检测

3D射线碰撞检测

从屏幕向鼠标点击位置发射一条三维射线,可能会出现一些偏移

这里省略实现方法

2D射线碰撞检测

从屏幕上对应的点,向鼠标点击位置垂直发射射线

写法一

从屏幕向鼠标点击位置的正后方垂直发射一条射线

 RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

写法二

//从摄像机发射一条射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//2D射线碰撞检测
var hit = Physics2D.Raycast(ray.origin,Vector2.zero);

//输出射线起点
Debug.Log(new Vector2(ray.origin.x, ray.origin.y).ToString());

//显示射线
Debug.DrawRay(ray.origin, ray.direction * 20f, Color.blue, duration: 3.0f);

效果

网上相关不准确写法

这种写法虽然也能实现,但是它是从鼠标点击位置往屏幕下方射一条线,所以会出现选取不准确的严重问题
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast(ray.origin,Vector2.down);

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Pair : MonoBehaviour
{
    //已选择数
    int SelectedNum = 0;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        //物体被选择后的颜色,必须写在Update()里
        Color col1, col2;
        ColorUtility.TryParseHtmlString("#374361", out col1);
        ColorUtility.TryParseHtmlString("#FFFFFF", out col2);

        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

            if (hit.collider)
            {
                if (hit.collider.GetComponent<SpriteRenderer>().color != col1)
                {
                    hit.collider.GetComponent<SpriteRenderer>().color = col1;
                    SelectedNum++;
                }
                else
                {
                    hit.collider.GetComponent<SpriteRenderer>().color = col2;
                    SelectedNum--;
                }
                Debug.Log(SelectedNum);
            }
        }
    }
}

 

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:点我我会动 设计师:我叫白小胖 返回首页

打赏作者

海 月

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值