Code Block References
Eng & Kor
Spawner
void GenerateObjects(int amount)
{
for (int i = 0; i < amount; i++)
{
int prefabIdx = Random.Range(0, pickUpPrefabList.Count);
PickUp prefab = pickUpPrefabList[prefabIdx];
CapsuleCollider2D collider =
prefab.GetComponent<CapsuleCollider2D>();
for (int attempt = 0; attempt < 500; attempt++)
{
Vector2 spawnPos =
new(Random.Range(p00.x, p11.x), Random.Range(p00.y, p11.y));
Collider2D[] overlapList = Physics2D.OverlapBoxAll(spawnPos, collider.size, 0, blockLayer);
if (overlapList.Length == 0)
{
PickUp clonedObj = Instantiate(prefab, spawnPos, Quaternion.identity, transform);
pickUpSpawnedList.Add(clonedObj);
clonedObj.Init();
break;
}
}
}
}
void SpawnEnemy()
{
if (enemyPrefabList.Count > 0)
{
int prefabIdx = Random.Range(0, enemyPrefabList.Count);
Enemy clonedObj = Instantiate(enemyPrefabList[prefabIdx], RandomSpawnPos(), Quaternion.identity, transform);
enemySpawnedList.Add(clonedObj);
clonedObj.Init();
}
}
Vector3 RandomSpawnPos()
{
Vector3 spawnPosition = Vector3.zero;
int randomSide = Random.Range(0, 4);
float interval = Random.Range(0f, 1f);
switch (randomSide)
{
case 0: spawnPosition = Vector3.Lerp(p00, p10, interval); break;
case 1: spawnPosition = Vector3.Lerp(p01, p11, interval); break;
case 2: spawnPosition = Vector3.Lerp(p00, p01, interval); break;
case 3: spawnPosition = Vector3.Lerp(p10, p11, interval); break;
}
return spawnPosition;
}
Simple AI Behaviour Unit
void SearchEnemy()
{
if (Time.time < checkTime || m_Target != null)
return;
checkTime = Time.time + CONST_CHECKTIME;
Vector3 center = centerTrans.position;
Collider2D[] hits = Physics2D.OverlapCircleAll(center, m_GuardianData.searchRadius, layerMask);
float closestDist = float.MaxValue;
foreach (Collider2D hit in hits)
{
Enemy enemy = hit.GetComponent<Enemy>();
if (enemy == null) continue;
float dist = Vector3.Distance(center, enemy.transform.position);
if (dist < closestDist)
{
closestDist = dist;
m_Target = enemy;
}
}
}
Camera Control
void MobileInput()
{
if (Input.touchCount == 0)
return;
Touch t0 = Input.GetTouch(0);
if (Input.touchCount == 1)
{
if (t0.phase == TouchPhase.Began)
{
m_TouchBeganPos = m_Camera.ScreenToWorldPoint(t0.position);
}
else if (t0.phase == TouchPhase.Moved)
{
Vector3 moved = m_TouchBeganPos - m_Camera.ScreenToWorldPoint(t0.position);
m_CameraTrans.position += moved;
}
}
else if (Input.touchCount == 2)
{
Touch t1 = Input.GetTouch(1);
Vector2 prev0 = t0.position - t0.deltaPosition;
Vector2 prev1 = t1.position - t1.deltaPosition;
float prevMag = (prev0 - prev1).magnitude;
float currMag = (t0.position - t1.position).magnitude;
float delta = currMag - prevMag;
Zoom(delta * m_ZoomSensitivity);
}
ClampCameraPosition();
}
void ClampCameraPosition()
{
Vector3 pos = m_CameraTrans.position;
pos.x = Mathf.Clamp(pos.x, p00.x, p11.x);
pos.y = Mathf.Clamp(pos.y, p00.y, p11.y);
m_CameraTrans.position = pos;
}
void Zoom(float amount)
{
m_Camera.orthographicSize = Mathf.Clamp
(
m_Camera.orthographicSize - amount,
m_ZoomMin,
m_ZoomMax
);
// Recalculate camera bounds based on zoom level
float halfHeight = m_Camera.orthographicSize;
float halfWidth = m_Camera.orthographicSize * m_Camera.aspect;
p00 = new Vector3(p01.x + halfWidth, p10.y + halfHeight);
p11 = new Vector3(p10.x - halfWidth, p01.y - halfHeight);
}