繁体   English   中英

使用 Raycasting 在触摸时移除 2D 对象?

[英]Removing 2D objects on touch using Raycasting?

我现在大部分时间都在尝试使用光线投射来移除 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 上触摸一个对象时,它会在控制台上输出“we hit something”,但除了说我的 Input.GetTouch(0).position 索引超出弹跳之外,它什么也没做。 尽管它说这个它经常说这个但是对于其他代码,它仍然设法执行我想要的,但是对于这个代码,它不起作用并且仍然说索引没有反弹。

您收到的错误是因为调用该函数时未单击鼠标。

您必须在OnMouseDown方法中执行此操作,或者将其放在 if 语句中,该语句仅在实际单击鼠标时才允许它运行。

一个很好的教程可以在这里找到。

最好的方法(如果你只使用 2D)是检查鼠标点击是否在点击它时的形状:

  1. 检查鼠标何时被点击并获得它的位置。

  2. 获取身体的矩形并将其与鼠标位置进行比较。

  3. 如果主体的矩形包含鼠标位置,则鼠标单击了主体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM