鼠标单击时如何销毁特定对象?

时间:2019-02-17 16:50:22

标签: c# unity3d

我目前正在制作一个沙盒游戏,它能够通过单击鼠标左键来创建对象。但是,当右键单击某个特定对象时,我正在努力销毁它。我在这里看过以前的问题,但是它们并不能完全回答我的问题。

using UnityEngine;
using System.Collections;

public class ControlObjects : MonoBehaviour
{

    Vector3 mousePosition, targetPosition;

    //To Instantiate TargetObject at mouse position
    public Transform targetObject;
    public GameObject Prefab;

    float distance = 10f;

    Ray ray;
    RaycastHit hit;

    //public int item_num = 1;

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        transform.position = targetPosition;


        //To get the current mouse position
        mousePosition = Input.mousePosition;

        //Convert the mousePosition according to World position
        targetPosition = Camera.main.ScreenToWorldPoint(new Vector3(mousePosition.x, mousePosition.y, distance));

        //Set the position of targetObject
        targetObject.position = targetPosition;

        //Debug.Log(mousePosition+"   "+targetPosition);


        //If Left Button is clicked
        if (Input.GetMouseButtonDown(0))
        {
            //create the instance of targetObject and place it at given position.
            Instantiate(targetObject, targetObject.transform.position, targetObject.transform.rotation);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

满足您的需求,但这是基础。

using UnityEngine;

public class Test : MonoBehaviour
{
    private float distance = 10;
    private float offset = -4;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse1))
        {
            GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);

            go.transform.position = new Vector3
            {
                x = offset += 1.5f,
                y = 0,
                z = 0
            };
        }

        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            if(Physics.Raycast(ray, out RaycastHit hit, distance))
            {
                Destroy(hit.transform.gameObject);
            }
        }
    }
}

答案 1 :(得分:0)

您应该看看IPointerClickHandler。将此脚本附加到您想要单击的对象上

using UnityEngine;
using UnityEngine.EventSystems;

public class DestroyOnRightClick : MonoBehaviour, IPointerClickHandler 
{
    public void OnPointerClick (PointerEventData eventData) 
    {
        if (eventData.button == PointerEventData.InputButton.Right) 
        {
             Debug.Log ("Right Mouse Button Clicked on: " + name);
             Destroy(gameObject);
        }
    }
}

注意

  

确保场景中存在EventSystem,以允许单击检测。对于非UI 游戏对象的点击检测,请确保将PhysicsRaycaster附加到Camera