在Unity中单击和拖动时在另一个对象上触发脚本

本文关键字:一个对象 脚本 Unity 单击 拖动 | 更新日期: 2023-09-27 18:27:25

我正在做一个2D项目,我添加了一个精灵作为拍摄按钮。这个按钮工作正常。附加的脚本是:(我在精灵中添加了一个盒子碰撞器)

using UnityEngine;
using System.Collections;
public class ClickScript : MonoBehaviour {
    public shootTest _shooterScript;
    // Use this for initialization
    void Start () {
    }
    void LoadScript()
    {
        _shooterScript.ShootRock();
    }

    // Update is called once per frame
    void Update () {
        if(Input.GetMouseButtonDown(0)){
            Vector2 mousePosition = new Vector2();
            mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Collider2D hitCollider = new Collider2D();
            hitCollider = this.collider2D;
        hitCollider = Physics2D.OverlapPoint(mousePosition);
            Debug.Log("mouse pos "+mousePosition.x+" y "+mousePosition.y+" ");    

            if(hitCollider){
                LoadScript();
                Debug.Log("Hit "+hitCollider.transform.name+" x"+hitCollider.transform.position.x+" y "+hitCollider.transform.position.y);    
            }
    }
}}

然后我添加了一个十字准线,以便能够计算出要瞄准的方向。这是单击并拖动对象的脚本。在这个物体上圈出Colider 2D。

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(MeshCollider))]
public class Aim : MonoBehaviour 
{
    private Vector3 screenPoint;
    private Vector3 offset;
    void OnMouseDown()
    {
        screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
        offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
    }
    void OnMouseDrag()
    {
        Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
        Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint)+offset;
        this.transform.position = curPosition;
    }
}

当我添加这个瞄准脚本并点击十字线拖动它时,射击脚本就会关闭。

我对团结很陌生,所以我认为这是一件简单的事情。谢谢你的帮助。

在Unity中单击和拖动时在另一个对象上触发脚本

我将点击脚本中的更新功能更改为

void Update () {
    if(Input.GetMouseButtonDown(0)){
        Vector2 mousePosition = new Vector2();
        mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        if(this.collider2D.OverlapPoint(mousePosition)){
            LoadScript();
        }
}

因此,它只有在单击特定对象时才会触发。也许有一个更干净的方法,但这是有效的。