在Unity中使用c#移动运行时创建的对象
本文关键字:运行时 创建 对象 移动 Unity | 更新日期: 2023-09-27 18:00:55
我在运行时使用拖放创建了一个对象,我正在使用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);
}
}
}
}
问题的第一部分:
对象在第二次单击时移动,因为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轴(。