как найти положение объекта из мирового пространства и преобразовать его в пользовательский интерфейс холста в режиме рендеринга: пространство экрана - камера в Unity 2d? - PullRequest
0 голосов
/ 06 августа 2020

Я работаю в игре, которая очень похожа на Марио. Поэтому, когда игрок касается объекта монеты в World Space, мне нужно анимировать, перемещая этот объект монеты в Coin meter, когда режим рендеринга Canvas равен Screen Space - Overlay , я могу легко получить положение объекта спрайта с кодом ниже

CoinSprite Code

GameObject coinCanvasObject = Instantiate(prefab, canvas.transform);//Instantiate coin inside Canvas view
coinCanvasObject.transform.position = Camera.main.WorldToScreenPoint(coinSpriteObject.transform.position);//getting coin position from World Space and convert to Screen Space and set to coinCanvasobject position 
AnimateCoin animate = coinCanvasObject.GetComponent<AnimateCoin>();
animate.animateCoin(coinSpriteObject.transform.position);
coinSpriteObject.SetActive(false);

AnimateCoin

public class AnimateCoin : MonoBehaviour
{
    private float speed = 0f;
    private bool isSpawn = false;
    private Vector3 screenPos;

    public void animateCoin(Vector3 screenPosTemp, Camera cam, Canvas canvas)
    {
        screenPos = Camera.main.WorldToScreenPoint(screenPosTemp);
        isSpawn = true;
    }

    private void Update()
    {
        if (isSpawn)
        {
            speed += 0.025f;
            transform.position = Vector3.Lerp(screenPos, targetObject.transform.position, speed);
            if (Vector3.Distance(transform.position, targetObject.transform.position) <= 0)
            {
                StartCoroutine(deActivateCoin());
            }
        }
    }

    private IEnumerator deActivateCoin()
    {
        isSpawn = false;
        yield return new WaitForSeconds(0.2f);
        gameObject.SetActive(false);
    }    
}

Так как мне нужно добавить эффект частиц в Вид холста, я меняю режим рендеринга холста на Пространство экрана - Камера . Когда я переключаю холст на этот режим рендеринга, я не мог получить точное положение объекта спрайта, чтобы проследить эффект монеты.

...