유니티

6/28 특정오브젝트 찾기, 인스턴스화

SUGI_ 2023. 6. 28. 17:46

의문) 게임오브젝트를 다른 객체에 안에 상속 후 충돌하면 찌그러지고 그렇지 않다면 왜 아무변화가 없을까?

 

GameObject.Find(" ").GetComponent<>().함수();

 = 게임 오브젝트를 찾고. 게임오브젝트안의 스크립트에 접근. 함수 호출;

public class ScoreMananger : MonoBehaviour
{
    Text score;
    int count;

    void Start()
    {
        //게임상의 Score UI Text 게임오브젝트 찾아서 컴포넌트 Text가지고오기
        score = GameObject.Find("Score").GetComponent<Text>();
        count = 0;
    }
 private void OnCollisionEnter(Collision collision)
    {
        //적 충돌할때
        if(collision.gameObject.CompareTag("Enemy"))
        {
            GameObject manager = GameObject.Find("ScoreManager"); //게임오브젝트찾는다.
            manager.GetComponent<ScoreMananger>().InScore(); //게임오브젝트안의 스크립트 접근. 함수 호출

            // 몇 초뒤 사라지게 함
            Destroy(gameObject, 0.2f);
        }
    }

 

GameObjet prefab 변수명 선언

GameObjet 변수명 = Instantiate(prefab, 생성될 곳 위치, 방향)

 void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //프리팹을 이용하여 오브젝트 생성
            //Instantiate(프리팹, 생성될곳위치, 방향)
            //자기스크립트 오브젝트의 위치
            GameObject bullet = Instantiate(bulltPrefab, transform.position, transform.rotation);
            //생성된 총알 컴포넌트 스크립트 안의 Shoot함수 이용해서 움직여주기
            bullet.GetComponent<BulletController>().Shoot(new Vector3(0,0,100));
        }
    }

* 발생했던 오류 *

같은 말이지만 프리팹으로 가져와서 사용하였을 때 생성 시기에 따라 오류가 발생할 수 있음

(우) 맞는 코드

Rigidbody() 충돌 시 Constraints의 값 수정 -> 지정한 값을 해제하는 상수 RigidbodyConstraints.None

  Rigidbody rb = GameObject.Find("Player").GetComponent<Rigidbody>();
            rb.constraints = RigidbodyConstraints.None;

 

728x90