在Unity中使用c#移动运行时创建的对象

时间:2015-07-03 16:00:16

标签: c# unity3d camera drag-and-drop mouseevent

我在运行时使用拖放创建了一个对象,我正在移动对象并使用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 个答案:

答案 0 :(得分:0)

问题的第一部分:

对象在第二次点击时移动,因为在按钮首次按下的框架中调用了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),因为当用户释放鼠标按钮时会发生这种情况,这将有助于您将拖拽告知点击。

答案 1 :(得分:0)

第一个问题

  

将光标移动到空白区域,然后单击鼠标按钮,将对象移动到此处。

我建议你删除你的第一个if条件,即

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

只要您点击鼠标左键,这段代码就会将您的角色移动到光标位置。

对于你的第二个问题:

  

我还必须将相机移向物体以进行缩放视图

我发现你正在改变角色的比例,但我建议你改变相机的位置。您所要做的就是弄清楚您想要移动相机多少近一些并保存该值(最有可能的是您只需要移动相机的z轴)。