일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 길건너 친구들
- 유니티 UI
- 오큘러스
- 가상현실
- meta
- 드래곤 플라이트 모작
- VR
- 오브젝트 풀링
- 모작
- 멀티플레이
- OVR
- CGV
- input system
- XR
- 포트폴리오
- Oculus
- 개발일지
- 드래곤 플라이트
- 유니티
- 팀 프로젝트
- HAPTIC
- ChatGPT
- Photon Fusion
- 유니티 GUI
- meta xr
- 개발
- 팀프로젝트
- 앱 배포
- 연습
- 유니티 Json 데이터 연동
Archives
- Today
- Total
EasyCastleUNITY
구름 오르기 본문
설명
화살표 왼쪽 오른쪽 키를 통해 움직이고 Space 키를 통해 점프를 한다.
점프를 통해 깃발에 도달하면 Clear하는 간단한 게임이다.
---구현 주요 포인트---
1.고양이와 깃발에 부딫힘은 OnTriggerEnter2D 메서드를 통해 구현하였다.
2. 처음 만들때, 점프가 여러번 가능한 문제점이 있었다.
이를 해결하기 위해 OnCollisionEnter2D와 flag를 사용하였다.
구름 GameObject의 tag를 Cloud로 변경하여, 구름에 닿으면 jump를 다시 실행할 수 있도록 하였다.
https://funfunhanblog.tistory.com/14
이 블로그를 참고하여 만들었다.
3. 고양이의 맵 탈출
점프를 하다보면 고양이가 맵 밖으로 나가는 문제점이 있었다.
이를 해결하기 위해 Clamp를 사용하여, 이동 범위를 제한하였다.
4. 카메라의 고양이 따라감
점프하는 고양이를 카메라가 따라가도록 하였다.
카메라가 맵 밖을 렌더링 하면 안되므로, 카메라가 움직일 수 있는 좌표를 제한하였다. (Clamp 이용)
----전체적인 코드----
CatController: 고양이의 움직임을 담당하는 클래스, 고양이의 충돌, 점프 제한, 클리어 씬으로의 전환 등등의 기능을 가짐
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class CatController : MonoBehaviour
{
private Rigidbody2D rBody2D;
public float jumpForce = 600f; //점프하는 힘
public float moveForce = 10f; //이동하는 힘
private int jumpCount;
private bool isCloud;
private Animator anim;
// Start is called before the first frame update
void Start()
{
this.rBody2D = this.GetComponent<Rigidbody2D>();
this.anim = GetComponent<Animator>();
this.jumpCount = 1; //점프 가능 횟수
}
// Update is called once per frame
void Update()
{
this.transform.position = ClampPosition(this.transform.position);
if (Input.GetKeyDown(KeyCode.Space))
{
if(jumpCount == 1)
{
//점프한다.
//this.rBody2D.AddForce(방향 * 힘);
this.rBody2D.AddForce(Vector2.up * this.jumpForce);
jumpCount = 0; //점프한 순간 0이되어서 다시 점프 불가능
}
}
//-1 0 1 (방향) -1:왼 0: 안움직임 1:오른
int dirX = 0;
if(Input.GetKey(KeyCode.LeftArrow))
{
dirX = -1;
}
if (Input.GetKey(KeyCode.RightArrow))
{
dirX = 1;
}
//절대값
float speedX = Mathf.Abs(this.rBody2D.velocity.x);
if(speedX < 2.0f)
{
//AddForce는 계속 힘이 누적
this.rBody2D.AddForce(new Vector2(dirX, 0) * this.moveForce);
//this.rBody2D.AddForce(this.transform.right * dirX * this.moveForce);
}
//방향의 따라서 반전
if(dirX != 0)
{
this.transform.localScale = new Vector3(dirX, 1, 1);
}
//플레이어의 속도에 따라서 애니메이션 속도를 변경
this.anim.speed = speedX / 1.3f;
}
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.LogFormat("OnTriggerEnter2D: {0}", collision.name);
Debug.Log("Game Clear 씬으로 전환!");
SceneManager.LoadScene("ClearScene");
}
private void OnCollisionEnter2D(Collision2D collision)
{
if(collision.gameObject.tag == "Cloud")
{
jumpCount = 1;
}
}
private Vector3 ClampPosition(Vector3 position)
{
return new Vector3 (Mathf.Clamp(position.x,-3.0f,3.0f)
,this.transform.position.y,this.transform.position.z);
}
}
ClearDirector : 다시 원래 게임의 씬으로 돌아오는 것을 담당하는 클래스
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ClearDirector : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetMouseButtonDown(0))
{
//게임씬으로 전환
SceneManager.LoadScene("GameScene");
}
}
}
CameraController: 카메라가 고양이를 따라다니게 하는 클래스
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
private GameObject catGo;
// Start is called before the first frame update
void Start()
{
this.catGo = GameObject.Find("cat");
}
// Update is called once per frame
void Update()
{
this.transform.position = ClampPosition(this.catGo.transform.position);
}
private Vector3 ClampPosition(Vector3 position)
{
return new Vector3 (this.transform.position.x,
Mathf.Clamp(position.y,0.0f,20.0f),this.transform.position.z);
}
}
결과
'유니티 기초' 카테고리의 다른 글
유니티 애니메이션 & 직선 이동 및 대각선 이동 (0) | 2023.08.04 |
---|---|
유니티 밤송이 던지기 (0) | 2023.08.04 |
고양이 화살 피하기 게임 (0) | 2023.08.02 |
2023/08/01 복습 (0) | 2023.08.01 |
Swipe car 음향 및 UI 추가 (0) | 2023.08.01 |