Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
C# Unity3d-在RTS相机上拖放对象_C#_Unity3d_Drag And Drop - Fatal编程技术网

C# Unity3d-在RTS相机上拖放对象

C# Unity3d-在RTS相机上拖放对象,c#,unity3d,drag-and-drop,C#,Unity3d,Drag And Drop,我有以下代码可以在世界上拖放3d对象: using System.Collections; using System.Collections.Generic; using UnityEngine; public class SpyAI : MonoBehaviour { Animator anim; private Vector3 screenPoint; private Vector3 offset; // Use this for initializa

我有以下代码可以在世界上拖放3d对象:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpyAI : MonoBehaviour {
    Animator anim;

    private Vector3 screenPoint;
    private Vector3 offset;


    // Use this for initialization
    void Start () {
        anim = gameObject.GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update () {

    }

    void OnMouseDown()
    {
        anim.SetBool("drag", true);
        screenPoint = Camera.main.WorldToScreenPoint(transform.position);
        offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
    }

    void OnMouseDrag()
    {
        Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
        Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
        transform.position = curPosition;
    }

    void OnMouseUp()
    {
        anim.SetBool("drag", false);
        anim.SetBool("idle", true);
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类SpyAI:单一行为{
动画师;
专用矢量3屏幕点;
专用矢量3偏移量;
//用于初始化
无效开始(){
anim=gameObject.GetComponent();
}
//每帧调用一次更新
无效更新(){
}
void OnMouseDown()
{
动画设置工具(“拖动”,真);
screenPoint=Camera.main.WorldToScreenPoint(transform.position);
offset=transform.position-Camera.main.ScreenToWorldPoint(新矢量3(Input.mousePosition.x,Input.mousePosition.y,screenPoint.z));
}
void OnMouseDrag()
{
Vector3 curScreenPoint=新的Vector3(Input.mousePosition.x,Input.mousePosition.y,screenPoint.z);
Vector3 curPosition=Camera.main.ScreenToWorldPoint(curScreenPoint)+偏移量;
transform.position=curPosition;
}
void OnMouseUp()
{
动画设置工具(“拖动”,错误);
动画设置工具(“空闲”,真);
}
}
问题是: 有时,当我拖动对象时,根据鼠标的移动,它会向下移动
拖动对象时,如何使其保持在地面上方?

最明显的变化是光标的z值。作为参考,它可能应该是:

Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane);
现在,对于可能更精细的行为,如果地面有坡度或上面有复杂碰撞器(如椅子或桌子)的东西,您可能希望使对象升高到地面以上。要做到这一点,您可能需要从
curPosition
中计算出的某个点向地面向下移动。使用hitInfo查看其向下移动的距离,并相应地调整
curPosition
的y位置