【问题标题】:Triggering a script on another object when Clicking and Dragging in Unity在 Unity 中单击和拖动时触发另一个对象上的脚本
【发布时间】:2015-12-18 06:39:00
【问题描述】:

我正在做一个 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);    
            }
    }
}}

然后我添加了一个十字准线,以便能够计算瞄准方向。这是单击并拖动对象的脚本。此对象上的圆形对撞机 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;

    }

}

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

我对统一很陌生,所以我假设它很简单。感谢您的帮助。

【问题讨论】:

    标签: c# unity3d unity3d-2dtools unity5


    【解决方案1】:

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

    void Update () {
        if(Input.GetMouseButtonDown(0)){
            Vector2 mousePosition = new Vector2();
            mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    
    
            if(this.collider2D.OverlapPoint(mousePosition)){
                LoadScript();
    
            }
    }
    

    因此它仅在单击该特定对象时触发。也许有一种更清洁的方法,但这很有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多