Unity3d - 在RTS摄像机上拖放对象



我有以下代码将 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);
}
}

问题是: 当我拖动对象时,有时,根据鼠标移动,它会下降 如何使物体在拖动时保持在地面以上?

应该改变的最明显的事情是curScreenPoint的z值。使用文档作为参考,它可能应该是:

Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.nearClipPlane);

现在,对于可能更微调的行为,如果地面上有斜坡或上面有复杂碰撞器(如椅子或桌子(的东西,您可能希望使对象升出地面。为此,您可能希望从略高于curPosition计算的点向地面投掷一个球体。使用 hitInfo 查看它向下走了多远,并相应地调整curPosition的 y 位置。

最新更新