Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
球体上的Unity3D拖动对象_Unity3d_Geometry_Draggable - Fatal编程技术网

球体上的Unity3D拖动对象

球体上的Unity3D拖动对象,unity3d,geometry,draggable,Unity3d,Geometry,Draggable,我正在努力让我的物体在球体上正常工作,我希望在这里能得到一些帮助 我想根据鼠标位置准确放置对象。这有点难以解释,但这里有一段视频展示了它目前的工作原理 如果有人给我指出了解决这个问题的正确方向,我将不胜感激 以下是我使用的脚本: #pragma strict var myTransform : Transform; var target : Transform; var beingDragged : boolean; var distance : float; var targetPosit

我正在努力让我的物体在球体上正常工作,我希望在这里能得到一些帮助

我想根据鼠标位置准确放置对象。这有点难以解释,但这里有一段视频展示了它目前的工作原理

如果有人给我指出了解决这个问题的正确方向,我将不胜感激

以下是我使用的脚本:

#pragma strict

var myTransform : Transform;
var target : Transform;
var beingDragged : boolean;
var distance : float;
var targetPosition : Vector3;
var distanceToTarget : Vector3;
var placementPosition : Vector3;
var t : Matrix4x4;

var gameManager : GameObject;
var buildModeScript : BuildMode;


function Start () 
{
    myTransform = transform;
    gameManager = GameObject.FindGameObjectWithTag("gameManager");
    buildModeScript = gameManager.GetComponent(BuildMode);
    target = myTransform.parent;
}

function Update () 
{
    if (buildModeScript.buildMode)
    {
        if (beingDragged)
        {
            DragMe();
        }
    }
}

function DragMe ()
{
    var mouseX = -Input.mousePosition.x;
    var mouseY = Input.mousePosition.y;

    targetPosition = target.position;
    distance = (target.localScale.x / 2) + 1;

    //Calculate position on sphere
    distanceToTarget = new Vector3(0, 0, -distance);
    t = Matrix4x4.TRS(targetPosition, Quaternion.Euler(mouseY, mouseX, 0), Vector3.one);
    placementPosition = t.MultiplyPoint(distanceToTarget);

    //Put me there
    myTransform.position = placementPosition;
    myTransform.LookAt(target);
}

function OnMouseDown ()
{
    beingDragged = true;
}

function OnMouseUp ()
{
    beingDragged = false;
}

在我面前,我没有一个完整的工作示例,但是看看这是否能让你朝着正确的方向前进。如果你的球体上有一个对撞机,你可以使用


如果不想使用光线投射,可以获取世界位置并计算最近点。要获得世界排名,请参见。

对于那些寻找类似产品的人,这里是我的新脚本:

#pragma strict

var myTransform : Transform;
var target : Transform;
var beingDragged : boolean;

var gameManager : GameObject;
var buildModeScript : BuildMode;


function Start () 
{
    myTransform = transform;
    gameManager = GameObject.FindGameObjectWithTag("gameManager");
    buildModeScript = gameManager.GetComponent(BuildMode);
    target = myTransform.parent;
}

function Update () 
{
    if (beingDragged)
    {
        DragMe();
    }
}

function DragMe ()
{
    var ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
    var hit : RaycastHit;

    if (Physics.Raycast (ray, hit, 1000))
    {
        if (hit.transform == target)
        {
            myTransform.position = hit.point;
            myTransform.LookAt(target);
        }
    }
}

function OnMouseDown ()
{
    if (buildModeScript.buildMode)
    {
        if (beingDragged == true)
        {
            beingDragged = false;
        }
        else if (beingDragged == false)
        {
            beingDragged = true;
        }
    }
}

谢谢你的回答,我已经做了一些工作,我使它完美地满足了我的需要。非常感谢:)如果您对此感兴趣,这里有一个视频显示最终结果:
#pragma strict

var myTransform : Transform;
var target : Transform;
var beingDragged : boolean;

var gameManager : GameObject;
var buildModeScript : BuildMode;


function Start () 
{
    myTransform = transform;
    gameManager = GameObject.FindGameObjectWithTag("gameManager");
    buildModeScript = gameManager.GetComponent(BuildMode);
    target = myTransform.parent;
}

function Update () 
{
    if (beingDragged)
    {
        DragMe();
    }
}

function DragMe ()
{
    var ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
    var hit : RaycastHit;

    if (Physics.Raycast (ray, hit, 1000))
    {
        if (hit.transform == target)
        {
            myTransform.position = hit.point;
            myTransform.LookAt(target);
        }
    }
}

function OnMouseDown ()
{
    if (buildModeScript.buildMode)
    {
        if (beingDragged == true)
        {
            beingDragged = false;
        }
        else if (beingDragged == false)
        {
            beingDragged = true;
        }
    }
}