如何使用鼠标将选定的GameObject移至某个位置

在使用raycast选择对象并将其移动到播放器左键单击的其他位置时,我需要帮助。到目前为止,我的表现不错,但是我无法选择移动的油缸。这是我到目前为止的代码:

public class ClicknDrag : MonoBehaviour {

private GameObject selected;
private bool unselected = true;

void Update ()
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    if (Physics.Raycast(ray,out hit) && Input.GetMouseButtonDown(0) && hit.transform.tag == "Cylinder" && unselected == true)
    {
        selected = hit.transform.gameObject;
        unselected = false;
    }

    if (Physics.Raycast(ray,out hit) && unselected == false && Input.GetMouseButtonDown(0))
    {
        selected.transform.position = hit.transform.position;
        unselected = true;
    }
}
tiny56 回答:如何使用鼠标将选定的GameObject移至某个位置

如果需要射线投射的位置,则需要使用hit.point而不是hit.transform.position。 hit.TRANSFORM.position将返回对象命中的位置。

此外,在您的情况下,即使在选择后,仍会射线投射到圆柱体上,因此可以在选定对象时禁用其碰撞器。这样,光线投射会忽略它,它将撞击找到的下一个物体(例如地板)。

https://docs.unity3d.com/ScriptReference/RaycastHit.html https://docs.unity3d.com/ScriptReference/RaycastHit-point.html https://docs.unity3d.com/ScriptReference/RaycastHit-transform.html

,

Physics.Raycast只能这样做一次……非常昂贵! Input.GetMouseButtonDown的检查也是多余的。并存储同样昂贵的Camera.main的结果(afaik在后台使用类似于GameObjevt.FindWithTag("MainCamera")的东西)

也请注意:第一次按下按钮时,GetMouseButtonDown(0)仅在帧中一次返回true。以后要移动时,您可能宁愿使用GetMouseButton(0),即{strong>只要按钮保持按下状态。

最后,如果要平滑移动到准确的击中位置而不是击中对象位置,则可能要使用true而不是hit.point

hit.transform.position标志是多余的:您可以直接使用unselected,然后将其重置为if(selected)

类似

selected = null
本文链接:https://www.f2er.com/3165083.html

大家都在问