Перемещение созданных во время выполнения объектов с использованием C# в Unity

Я создал объект во время выполнения с помощью перетаскивания, и я перемещаю объект и изменяю размеры объекта с помощью Input.getmousebutton,

Когда я пытаюсь переместить объект, я держу кнопку мыши, и я могу переместить ее, но когда я отпускаю кнопку и перемещаю курсор в пустое место, а затем нажимаю кнопку мыши, объект перемещается сюда.

Это моя главная проблема, но мне также нужно переместить камеру к объекту для увеличения.

MyCode - это:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class ClickAction : MonoBehaviour {
    //float distance=10;
    public GameObject gm;
    public string obj=null;
    public Destroyer destroy;
    //public MoveObject move;
    private Vector3 screenPoint;
    private Vector3 offset;
    void Update () 
    {
        if(Input.GetMouseButton(0))
        {
            if(gm)
            {
              gm.GetComponent<GameObject>();
              gm.transform.position=new Vector3(Input.mousePosition.x,Input.mousePosition.y,1);
            }
        }
        if (Input.GetMouseButtonDown (0)) 
        {
            Ray toMouse = Camera.main.ScreenPointToRay (Input.mousePosition);
            RaycastHit rhInfo;
            bool didHit = Physics.Raycast (toMouse, out rhInfo, 500.0f);
            if (didHit) 
            {
                gm=rhInfo.collider.gameObject;
                Debug.Log (rhInfo.collider.name+"--"+gameObject.name);
                obj=rhInfo.collider.name;
                //move.OnMouseDown();
                //move.OnMouseDrag();
                //Calling Destroyer script to destroy object
                destroy.getName(obj);
            }
        }
        if (Input.GetMouseButton (1)) 
        {
            if (gm) 
            {
                gm.GetComponent<GameObject> ();
                //gm.transform.localScale += new Vector3(0.3F, .3F, .3F);
                gm.transform.localScale = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 1);
            }
        }
    }
}

2 ответа

Первая часть вопроса:

Объект перемещается по второму щелчку, потому что оба Input.GetButtonDown(0) а также Input.GetButton(0) Вызваны в кадре, кнопка сначала нажата.

См. http://docs.unity3d.com/ScriptReference/Input.html

Обе части вызывают, потому что у вас есть два оператора if, когда вы, вероятно, хотите иметь:

if(Input.GetMouseButton(0)) { ... } else if(Input.GetMouseButtonDown(0)) { ... }

Кроме того, если вы хотите проверить на щелчок мыши, лучше использовать Input.GetMouseButtonUp(0) как это произойдет, когда пользователь отпустит кнопку мыши, и это поможет вам отличить щелчок от перетаскивания.

Для вашей первой проблемы

переместите курсор в пустое место и затем нажмите кнопку мыши, объект перемещается сюда.

Я бы предложил вам удалить свой первый if состояние т.е.

if(Input.GetMouseButton(0))
{
    if(gm)
    {
        gm.GetComponent<GameObject>();
        gm.transform.position=new Vector3(Input.mousePosition.x,Input.mousePosition.y,1);
    }
}

Этот фрагмент кода переместит вашего персонажа в положение курсора, когда вы нажмете левую кнопку мыши.

Для вашей второй проблемы:

Я также должен переместить камеру к объекту для увеличения

Я вижу, что вы меняете масштаб своего персонажа, но я предлагаю вам изменить положение вашей камеры. Все, что вам нужно сделать, это выяснить, насколько близко вы хотите переместить вашу камеру, и сохранить это значение (скорее всего, вам нужно будет только переместить ось Z вашей камеры).

Другие вопросы по тегам