게임개발 16일차 (Unity Learn 6일차)
export package로 현재 상태를 저장해서 버전으로 관리할 수 있다.
private GameObject focalPoint;
start
focalPoint = GameObject.Find("Focal Point");
update
playerRb.AddForce(focalPoint.transform.forward * speed * verticalInput);
focalpoint를 중앙에두고 player가 global한 forward가 아닌 focalpoint와의 forward로 움직이게 만들 수 있었다.
physics material을 만들고 적과 플레이어에게 모두 부여했다. (콜라이더에 넣을수있다.)
bounciness를 1로, bounce combine (바운스의 합을 어떻게 할지)을 multiply로 해서 적과 플레이어의 바운스정도를 중첩해서 튕기게 만들었다.
prefab으로 되어있는 enemy는 계층창의 player를 public으로 직접 연결할 수 없다. 프리팹은 독립적이어야 하는데 계층창에 연결되면 의존성이 생기기 때문이라나? 그래서 player도 prefab으로 만들어야 인스펙터에서 연결해줄 수 있었다.
나는 함수를 만들 때 함수를 만들고 그걸 넣는 줄 알았는데, 일단 구현한 후에 보기 쉽고 유지보수 쉽게 함수로 만드는 것이었다.
private void OnTriggerEnter(Collider other)
other.
트리거로 했을 때는 other이라 하고 바로 쓰면 되고
private void OnCollisionEnter(Collision collision)
collision.gameObject.
충돌일 때는 .gameObject를 추가해줘야 한다.
StartCoroutine(PowerUpCountdownRoutine());
IEnumerator PowerUpCountdownRoutine()
{
yield return new WaitForSeconds(7);
hasPowerUp = false;
}
파워업한 후 7초 뒤에 파워가 사라지는 코루틴을 이용했다.
enemyCount = FindObjectsByType<Enemy>(FindObjectsSortMode.None).Length로
Enemy라는 스크립트가 달린 오브젝트가 몇개인지 찾아( 정렬하지 않고 빠르게 ) 그리고 그 길이를 반환해줘 라는 뜻
enemyPrefab.GetComponent<EnemyX>().speed += 10.0f;
이런식으로 적 프리팹을 가져와 속도를 증가시키려고 하면 프리팹만 수정되서 바로 반영되지 않는다고 한다.
GameObject newEnemy = Instantiate(enemyPrefab, GenerateSpawnPosition(), enemyPrefab.transform.rotation);
newEnemy.GetComponent<EnemyX>().speed = 100f + 10.0f * waveCount; // ← wave에 따라 속도 증가
이런식으로 생성할 때 인스턴스에 속도를 추가해야 한다고 한다.
리스트로 프리팹을 받아와야 할 때는
using System.Collections.Generic 을 사용하고
public List<GameObject> targets; 라고 쓴다.
public List<변수종류> 변수명
코루틴의 IEnumerator를 사용하려면 using System.Collections 를 넣어야 한다.
까먹었었지만 접근제한자(퍼블릭, 프라이빗)가 생략되어 있으면 private이다.
private void OnMouseDown() // 누르면
{
Destroy(gameObject); // 없앤다.
}