하참이의 아이디어노트

Unity 강의 7일차 (2) - 플레이어 따라가기 본문

Unity/Unity 기초

Unity 강의 7일차 (2) - 플레이어 따라가기

하참이 2025. 1. 22. 04:30

본 강의는 다음 문서를 참고하여 제작하였습니다. 자세한 내용은 하단 링크를 참조하시거나 댓글로 질문 남겨주시면 성심성의껏 답변 드리겠습니다.

 

https://learn.unity.com/tutorial/4-2gang-peulreieo-ddaragagi?uv=2020.3&pathwayId=63ca4663edbc2a7be103183f&missionId=63c7676bedbc2a66daff99b1&projectId=63ca20deedbc2a7885b7ee97#

 

4.2강 - 플레이어 따라가기 - Unity Learn

개요: 플레이어는 마음껏 굴러다닐 수 있지만, 아직 어떤 목적도 없습니다. 이 수업에서는 플레이어를 쫓아다니는 적을 추가하여 게임에 목적을 부여해 보겠습니다. 가장 먼저 적에게 원하는 텍

learn.unity.com

 


 

 

게임의 목적을 만들기 위해 적을 생성해보겠습니다.

 

새 Sphere를 생성하고 이름을 Enemy로 변경합니다.

 

 

 

 

 

x, y, z를 Player와 같게 1.5, 1.5, 1.5로 변경 한 뒤, Rigidbody 컴포넌트를 추가합니다. 

 

 

 

 

 

 

 

Physics Materia를 제작하고 이름을 Bouncy로 설정합니다.

 

 

 

 

 

 

Bounciness 값을 1로 설정하고 Bounce Combine을 Multiply로 변경 한 다음, Player와 Enemy에게 적용하고 테스트합니다.

 

 

 

 

 

 

 

Player를 계속해서 따라가는 적 AI를 만들어보겠습니다. 두근두근하네요.

 

Enemy 스크립트를 생성하고 다음과 같이 작성합니다.

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float speed;
    private Rigidbody enemyRb;
    private GameObject player;

    // Start is called before the first frame update
    void Start()
    {
        enemyRb = GetComponent<Rigidbody>();
        player = GameObject.Find("Player");
    }

    // Update is called once per frame
    void Update()
    {
        enemyRb.AddForce((player.transform.position - transform.position).normalized * speed);
    }
}

 

 

 

이제 Enemy 게임 오브젝트에 부착하고 speed 프로퍼티를 5정도로 설정해봅시다.

 

게임을 실행하면 꽤나 어려운 게임이 완성됩니다.

 

 

변수를 정리하여 하드코딩을 수정합니다.

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float speed;
    private Rigidbody enemyRb;
    private GameObject player;

    // Start is called before the first frame update
    void Start()
    {
        enemyRb = GetComponent<Rigidbody>();
        player = GameObject.Find("Player");
    }

    // Update is called once per frame
    void Update()
    {
        Vector3 lookDirection = (player.transform.position - transform.position).normalized;
        enemyRb.AddForce(lookDirection * speed);
    }
}

 

 

 

 

이제 SpawnManager를 사용하여 적을 생성해보도록 합시다.

 

Prefabs 폴더를 생성하고 Enemy를 드래그하여 프리팹화 합니다.

 

 

 

 

 

 

 

씬에 있는 Enemy는 삭제하고 Spawn Manager 오브젝트와 스크립트를 생성한 뒤 부착합니다.

 

 

 

 

 

 

 

 

SpawnManager 스크립트를 다음과 같이 작성합니다.

 

 

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpawnManager : MonoBehaviour
{
    public GameObject enemyPrefab;
    public float spawnRange = 9;

    // Start is called before the first frame update
    void Start()
    {
        Instantiate(enemyPrefab, GenerateSpawnPosition(), enemyPrefab.transform.rotation);
    }

    private Vector3 GenerateSpawnPosition()
    {
        float spawnPosX = Random.Range(-spawnRange, spawnRange);
        float spawnPosZ = Random.Range(-spawnRange, spawnRange);
        Vector3 randomPos = new Vector3(spawnPosX, 0, spawnPosZ);

        return randomPos;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

 

 

GenerateSpawnPosition이라는 함수를 생성하여 Random한 위치에 적을 생성하도록 하였습니다.

 

게임을 실행하면 적이 랜덤한 위치에 생성이 됩니다.