using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private GameObject boxPrefab;
private void Awake()
{
for(int i = 0; i < 10; ++ i)
{
Vector3 position = new Vector3(-4.5f + i, 0, 0);
Quaternion rotation = Quaternion.Euler(0, 0, i * 10);
Instantiate(boxPrefab, position, rotation);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private GameObject boxPrefab;
private void Awake()
{
// 외부 반복문 (격자의 y축 계산용으로 활용됨)
for(int y = 0; y < 10; ++ y)
{
// 내부 반복문 (격자의 x축 계산용으로 활용됨)
for(int x = 0; x < 10; ++ x)
{
Vector3 position = new Vector3(-4.5f + x, 4.5f - y, 0);
Instantiate(boxPrefab, position, Quaternion.identity);
}
}
}
}
떨어지는 공간이 안나와서 object의 scale를 줄여 주었다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private GameObject boxPrefab;
private void Awake()
{
// 외부 반복문 (격자의 y축 계산용으로 활용됨)
for(int y = 0; y < 10; ++ y)
{
// 내부 반복문 (격자의 x축 계산용으로 활용됨)
for(int x = 0; x < 10; ++ x)
{
Vector3 position = new Vector3(-4.5f + x, 4.5f - y, 0);
GameObject newObject = Instantiate(boxPrefab, position, Quaternion.identity);
newObject.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); // change its local scale in x y z format
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private GameObject boxPrefab;
private void Awake()
{
// 외부 반복문 (격자의 y축 계산용으로 활용됨)
for(int y = 0; y < 10; ++ y)
{
// 내부 반복문 (격자의 x축 계산용으로 활용됨)
for(int x = 0; x < 10; ++ x)
{
if(x == y)
{
continue;
}
Vector3 position = new Vector3(-4.5f + x, 4.5f - y, 0);
Instantiate(boxPrefab, position, Quaternion.identity);
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private GameObject[] prefabArray;
private void Awake()
{
for(int i = 0; i < 10; ++ i)
{
int index = Random.Range(0, prefabArray.Length);
Vector3 position = new Vector3(-4.5f + i, 0, 0);
Instantiate(prefabArray[index], position, Quaternion.identity);
}
}
}
Random.Range() 함수 사용으로 오브젝트 생성시 x,y의 위치를 임의 설정하여 배치
Random.Range(시작, 끝)
파라미터로 시작과 끝의 숫자에서 랜덤의 숫자를 표기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private int objectSpawnCount = 30;
[SerializeField]
private GameObject[] prefabArray;
private void Awake()
{
for(int i = 0; i < objectSpawnCount; ++ i)
{
int index = Random.Range(0, prefabArray.Length);
float x = Random.Range(-7.5f, 7.5f); // x 위치
float y = Random.Range(-4.5f, 4.5f); // y 위치
Vector3 position = new Vector3(x, y, 0);
Instantiate(prefabArray[index], position, Quaternion.identity);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private int objectSpawnCount = 30;
[SerializeField]
private GameObject[] prefabArray;
[SerializeField]
private Transform[] spawnPointArray;
private void Awake()
{
for(int i = 0; i < objectSpawnCount; ++ i)
{
int prefabIndex = Random.Range(0, prefabArray.Length);
int spawnIndex = Random.Range(0, spawnPointArray.Length);
Vector3 position = spawnPointArray[spawnIndex].position;
GameObject clone = Instantiate(prefabArray[prefabIndex], position, Quaternion.identity);
// Instantiate(prefabArray[index], position, Quaternion.identity);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private int objectSpawnCount = 30;
[SerializeField]
private GameObject[] prefabArray;
[SerializeField]
private Transform[] spawnPointArray;
private void Awake()
{
for(int i = 0; i < objectSpawnCount; ++ i)
{
int prefabIndex = Random.Range(0, prefabArray.Length);
int spawnIndex = Random.Range(0, spawnPointArray.Length);
Vector3 position = spawnPointArray[spawnIndex].position;
GameObject clone = Instantiate(prefabArray[prefabIndex], position, Quaternion.identity);
// spawnIndex가 0인 오브젝트가 왼쪽에 있기 때문에 오른쪽으로 이동
// spawnIndex가 1인 오브젝트가 오른쪽에 있기 때문에 왼쪽으로 이동
Vector3 moveDirection = (spawnIndex == 0 ? Vector3.right : Vector3.left);
clone.GetComponent<Movement2D>().Setup(moveDirection);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectSpawner : MonoBehaviour
{
[SerializeField]
private int objectSpawnCount = 30;
[SerializeField]
private GameObject[] prefabArray;
[SerializeField]
private Transform[] spawnPointArray;
private int currentObjectCount = 0; // 현재까지 생성된 오브젝트 개수
private float objectSpawnTime = 0.0f;
private void Update()
{
// objectSpawnCount 개수만큼만 생성하고 더이상 생성하지 않도록 하기 위해 설정
if(currentObjectCount + 1 > objectSpawnCount)
{
return;
}
// 원하는 시간마다 오브젝트를 생성하기 위한 시간 변수 연산
objectSpawnTime += Time.deltaTime;
// 0.5초에 한번씩 실행
if(objectSpawnTime >= 0.5f)
{
int prefabIndex = Random.Range(0, prefabArray.Length);
int spawnIndex = Random.Range(0, spawnPointArray.Length);
Vector3 position = spawnPointArray[spawnIndex].position;
GameObject clone = Instantiate(prefabArray[prefabIndex], position, Quaternion.identity);
// spawnIndex가 0인 오브젝트가 왼쪽에 있기 때문에 오른쪽으로 이동
// spawnIndex가 1인 오브젝트가 오른쪽에 있기 때문에 왼쪽으로 이동
Vector3 moveDirection = (spawnIndex == 0 ? Vector3.right : Vector3.left);
clone.GetComponent<Movement2D>().Setup(moveDirection);
currentObjectCount ++; // 현재 생성된 오브젝트의 개수를 1 증가시킨다
objectSpawnTime = 0.0f; // 시간을 0으로 초기화 해야 다시 0.5초를 계산할 수 있다
}
}
}
플레이어가 될 게임오브젝트를 하나 생성하고, 생성된 오브젝트인 플레이어의 위치에서 특정키를 입력시 오브젝트가 생성되도록 만들어 본다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
[SerializeField]
private KeyCode keyCodeFire = KeyCode.Space;
[SerializeField]
private GameObject bulletPrefab;
private float moveSpeed = 5.0f;
void Update()
{
// 플레이어 오브젝트 이동
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
transform.position += new Vector3(x, y, 0) * moveSpeed * Time.deltaTime;
// 플레이어 오브젝트에서 오브젝트 생성
if(Input.GetKeyDown(keyCodeFire))
{
GameObject clone = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
clone.name = "Bullet";
clone.transform.localScale = Vector3.one * 0.5f;
clone.GetComponent<SpriteRenderer>().color = Color.red;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
[SerializeField]
private KeyCode keyCodeFire = KeyCode.Space;
[SerializeField]
private GameObject bulletPrefab;
private float moveSpeed = 5.0f;
private Vector3 lastMoveDirection = Vector3.right;
void Update()
{
// 플레이어 오브젝트 이동
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
transform.position += new Vector3(x, y, 0) * moveSpeed * Time.deltaTime;
// 마지막에 입력된 방향키의 방향을 총알의 발사 방향으로 활용
if(x !=0 || y != 0)
{
lastMoveDirection = new Vector3(x, y, 0);
}
Debug.Log(keyCodeFire);
// 플레이어 오브젝트 총알 발사
if(Input.GetKeyDown(keyCodeFire))
{
GameObject clone = Instantiate(bulletPrefab, transform.position, Quaternion.identity);
clone.name = "Bullet";
clone.transform.localScale = Vector3.one * 0.5f;
clone.GetComponent<SpriteRenderer>().color = Color.red;
// 생성된 오브젝트 방향 적용
clone.GetComponent<Movement2D>().Setup(lastMoveDirection);
}
}
}