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;
}
}
형태가 없고 전반적인 로직을 가진 오브젝트를 매니저로 지정
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 |