└▶연습

밤송이2: 스크린 좌표 -> 월드 좌표

101won 2024. 9. 17. 15:33

아래 빈 공간에 붙는 건 박스콜라이더를 머리 크기에 맞춰 덮었기 때문.

 

스크린 좌표는 벡터3로 받지만 실은 z가 없다. 그래서 카메라 좌표를 z값으로 넣었더니 턱턱 붙네.

 

좌표가 너무 안맞아서 처음으로 챗지피티한테 물어봤더니 깔끔하게 코드를 바꿔줬다.

글 쓰고 검증하는 것처럼 글쓴 이의 의도를 파악해서 요약해줘. 이런 게 가능하군.

근데 말이 넘 많다. 물어본 것만 대답하라고.

 

 

  • bam
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bam : MonoBehaviour
{
    Rigidbody rb;
    float moveSpeed = 600f;

    public ParticleSystem particle;

    void Start()
    {
        this.rb = GetComponent<Rigidbody>();
        rb.useGravity = true; // 인풋하면 중력도 받게되어 포물선을 그리며 날아감
        
        rb.AddForce(new Vector3(0, 0, moveSpeed));
    }

    private void OnCollisionEnter(Collision collision)
    {
        rb.isKinematic = true; // 부딪히면 키네마틱 투르로 멈춤
        particle.Play();
    }
}

 

 

  • bamGenerator
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class bamGenerator : MonoBehaviour
{
    public GameObject bamPrefab;

    void Update()
    {  
        if (Input.GetMouseButtonDown(0))
        { 
            GameObject bamGo = Object.Instantiate(bamPrefab);

            Vector3 mousePos = Input.mousePosition; // 스크린 포지션
            mousePos.z = -Camera.main.transform.position.z; // * 스크린 좌표엔 z가 없음, 카메라 포지션으로 Z값 설정함

            Vector3 worldPos = Camera.main.ScreenToWorldPoint(mousePos); // 스크린 좌표 -> 월드 좌표로 변경
            bamGo.transform.position = new Vector3(worldPos.x, worldPos.y, 0); // Z값을 고정
        }
    }
}