Unity3d - перетаскивание объекта на камеру RTS - PullRequest
0 голосов
/ 02 июля 2018

У меня есть этот код для перетаскивания трехмерных объектов в мире:

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);
    }
}

Проблема в следующем: Когда я перетаскиваю объект, иногда, в зависимости от движения мыши, он оказывается под землей Как я могу заставить объект оставаться над землей при его перетаскивании?

1 Ответ

0 голосов
/ 04 июля 2018

Наиболее очевидная вещь, которая должна измениться, это z-значение curScreenPoint. Используя документы в качестве ссылки, вероятно, должно быть:

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

Теперь, возможно, для более тонкой настройки поведения, вам может понадобиться поднять объект над землей, если на земле есть склоны или что-то со сложными коллайдерами, например стул или стол. Чтобы сделать это, вы, вероятно, захотите сделать приведение сферы вниз к земле из точки, несколько превышающей то, что рассчитывается в curPosition. Используйте hitInfo, чтобы увидеть, как далеко он идет, и соответственно отрегулируйте положение y на curPosition.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...