Unity

Unity 기초 눌러담은 3D게임

사회적가치누리 2024. 11. 23. 16:30

 

Scene 총 3개

C# 스크립트 4개 사용 (CameraMove, GameManagerLogic, ItemCan, PlayerBall)

사운드 추가 (점프)

 

 

카메라가 따라오게끔 할려면

LateUpdate() <- 여기다가 작성해야함 왜냐하면, 앞에서 다 실행되고나서 움직여야하기때문
FindGameObjectsWithTag() : 주어진 태그로 오브젝트 검색
카메라가 붙어서 따라댕기는걸 방지할려면
카메라 백터값이랑 플레이어 백터값을 서로 뺴주면 가능합니다.

 

CameraMove 코드

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

public class CameraMove : MonoBehaviour
{
    Transform playertransform;
    Vector3 Offset;


    void Awake()
    {
        playertransform = GameObject.FindGameObjectWithTag("Player").transform;
        Offset = transform.position - playertransform.position;
    }

    
    void LateUpdate()
    {
        transform.position = playertransform.position + Offset;
    }
}

형태가 없고 전반적인 로직을 가진 오브젝트를 매니저로 지정

만든 후 위치 초기화, 이름 GameManager 설정


Find 계열 함수는 부하를 초래할 수 있으므로 피하는 것을 권장

 

씬을 사용하려면
맨위에 using UnityEngine.SceneManagement; 를 써줘야한다.


LoadScene() : 주어진 장면을 불러오는 함수
Scene을 불러오려면 꼭 Build Setting에서 추가

사용하는 씬이 다 들어가게 설정


LoadScene의 매개변수는 장면 순서 (int)도 가능
Ui를 사용하려면 UnityEngine.UI 라이브러리 사용 필수

 

 

GameManagerLogic 코드

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class GameManagerLogic : MonoBehaviour
{
    public int TotalItemCount;
    public int stage;
    public Text StageCountText;
    public Text PlayerCountText;

    public void Awake()
    {
        StageCountText.text = "/ " + TotalItemCount.ToString();
    }

    public void GetItem(int count)
    {
        PlayerCountText.text = count.ToString();
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player")
            SceneManager.LoadScene(stage);
    }
   
}

 

ItemCan 코드

 

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

public class ItemCan : MonoBehaviour
{
    public float rotateSpeed;
    
    void Update()
    {
        transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime, Space.World);
    }

}

빙글빙글 도는걸 구현

 

 

PlayerBall 코드

 

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

public class PlayerBall : MonoBehaviour
{
    public float jumpPower;
    public int itemCount;
    public GameManagerLogic manager;
    bool isJump;
    Rigidbody rigid;
    AudioSource GetItem;
    AudioSource JumpSound;



    void Awake()
    {
        isJump = false;
        rigid = GetComponent <Rigidbody>();
        AudioSource[] audioSources = GetComponents<AudioSource>();
        GetItem = audioSources[0];
        JumpSound = audioSources[1];
        

    }

    void Update()
    {
        if(Input.GetButtonDown("Jump") && !isJump)
        {
            isJump = true;
            rigid.AddForce(new Vector3(0, jumpPower, 0), ForceMode.Impulse);
            JumpSound.Play();
        }
        
    }
    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");

        rigid.AddForce(new Vector3(h, 0, v),ForceMode.Impulse);
    }

    void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.tag == "Floor")
        {
            isJump = false;
        }
    }
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Item")
        {
            itemCount++;
            GetItem.Play();
            other.gameObject.SetActive(false);
            manager.GetItem(itemCount);
        }
        else if(other.gameObject.tag == "Finish")
        {
            if(manager.TotalItemCount == itemCount)
            {
                if(manager.stage == 2)
                
                SceneManager.LoadScene(0);
                
                else
                
                SceneManager.LoadScene(manager.stage+1);
                
            }
            else
            {
                
                SceneManager.LoadScene(manager.stage);
             
            }
        }
    }
    
}

 

움직임과 사운드, 목표지점에 도달했을때 해당하는 씬 이동 구현

 

사운드는 무료에셋 CasualGameSounds U6을 사용

 

'Unity' 카테고리의 다른 글

Unity 2D 플랫포머  (0) 2024.11.23
Unity(2) 기초2  (0) 2024.11.16
Unity(1) 기초  (0) 2024.11.07