c# - 使用 Raycasting 删除触摸时的 2D 对象?
问题描述
我现在大部分时间都在尝试使用光线投射来删除 2D 对象。我知道如何使用 OnMouseDown 方法有效地做同样的事情,到目前为止我一直在使用它。但是我读到使用 raycastign 比使用 OnMOuseDown 方法更有效,因为 OnMouseDOwn 方法是专门为鼠标点击而设计的。查看教程以及阅读论坛,我看到人们使用 Unity 库中提供的不同光线投射技术、类和方法,但这些主要用于 3D 对象。因为我正在设计一个 2D 游戏,所以我想了解如何为 2D 对象做这件事。我已经尝试了几件事以使其正常工作,但似乎没有任何效果:
我尝试过使用 Raycasthit2D、Raycast2D,但似乎没有任何效果
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TouchTest : MonoBehaviour
{
void Start()
{
}
//public Vector2 direction;
void Update()
{
//Cast a ray in the direction specified in the inspector.
RaycastHit2D hit =
Physics2D.Raycast(this.gameObject.transform.position,
Input.GetTouch(0).position);
//If something was hit.
if (hit.collider != null)
{
//Display the point in world space where the ray hit the collider's surface.
Debug.Log("We Hit something");
}
}
}
结果应该是,当我在 Unity Remote 上触摸一个对象时,它会在控制台上输出“我们碰到了某些东西”,但它什么也没做,只是说我的 Input.GetTouch(0).position 索引没有反弹。尽管它这么说它经常这么说,但对于其他代码,它仍然设法执行我想要的,但是对于这个代码,它不起作用并且仍然说索引没有反弹。
解决方案
您收到的错误是因为在调用该函数时,未单击鼠标。
您必须在OnMouseDown
方法中执行此操作,或者将其放入 if 语句中,仅在实际单击鼠标时才允许它运行。
可以在这里找到一个很好的教程。
最好的方法(如果你只使用 2D)是检查鼠标点击时是否在形状中:
检查何时单击鼠标并获取其位置。
获取 body 的矩形并将其与鼠标位置进行比较。
如果主体的矩形包含鼠标位置,则鼠标单击了主体。
推荐阅读
- javascript - 尝试使用 setTimeout 更新时 useState
- python - 在数组中搜索重复项
- excel - 更新/更改图表时,Application.ScreenUpdating 不起作用?
- apache-spark - Kafka 2.4 是否与 Spark 2.4 兼容?
- vbscript - VBS 文件不打印
- node.js - VS Code - 调试器不会进入函数
- string - 比较字符串的Makefile问题
- linux - 在 bash 脚本中转义大括号
- python - 我不理解的 Python 代码或 CNN 架构功能的错误
- reactjs - 反应大日历时间更改错误的偏移量