728x90
이번엔 게임에 사용될만한 그러한 기능들을 하나씩 만들어보겠습니다!
먼저 공 캐릭터를 움직이기 위한 부분부터 만들어 보겠습니다.
이부분은 일반 캐릭터를 움직이는 느낌이 아닌 공을 툭툭 손으로 친다는 느낌? 으로 만들어 보았습니다.
if (Input.GetKeyDown(KeyCode.Space)){//점프
GetComponent<Rigidbody>().AddForce(Vector3.up * 400);
}
일단 키입력을 받고 , 원하는 방향으로 힘을주어 공을 튕겨내었습니다.
그리고 ball속성창에서 Rigidbody컴포넌트를 추가 하면됩니다.
완성!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{
float point;
// Start is called before the first frame update
void Start()
{
point = transform.position.z;
}
// Update is called once per frame
void Update()
{
float distance;
distance = transform.position.z - point;
if (Input.GetKeyDown(KeyCode.Space)){//점프
GetComponent<Rigidbody>().AddForce(Vector3.up * 400);
}
if (Input.GetKeyDown(KeyCode.W))// 앞
{
GetComponent<Rigidbody>().AddForce(Vector3.forward * 400);
}
if (Input.GetKeyDown(KeyCode.S))//뒤
{
GetComponent<Rigidbody>().AddForce(Vector3.back * 400);
}
if (Input.GetKeyDown(KeyCode.A))//왼
{
GetComponent<Rigidbody>().AddForce(Vector3.left * 400);
}
if (Input.GetKeyDown(KeyCode.D))//오
{
GetComponent<Rigidbody>().AddForce(Vector3.right * 400);
}
//Debug.Log(distance);
}
}
다음은 코인부분!
먼저 코인이라 하면 빙글빙글 돌아가야 약간 게임 같겠죠
transform.Rotate(new Vector3(0, 0, 100f) * Time.deltaTime);//회전
이런식으로 회전을 주더라구요
그리고 코인을 먹으면 점수를 올리고 , 사라지게 하는 부분!
private void OnTriggerEnter(Collider other) // 충돌 감지
{
if (other.gameObject.name == "Ball")
{
GameObject.Find("GameManager").SendMessage("GetCoin");// 게임메니저에서 함수 불러오기
Destroy(gameObject);
}
}
이 부분에서 게임 메니저라는 개념이 나오는데
제가 이해하기로는 게임내의 자주사용되는 함수들을 모아 관리하는 헤더파일 느낌이였습니다.
게임 메니저를 하나 만들고 아래처럼 추가해줍시다.
public int coinCount = 0;
public TextMeshProUGUI coinText;
public Text coinText1;
void GetCoin()
{
coinCount++;
coinText.text = coinCount + "~";
coinText1.text= coinCount + "개";
}
코인도 끝!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Coin : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
transform.Rotate(new Vector3(0, 0, 100f) * Time.deltaTime);//회전
}
private void OnTriggerEnter(Collider other) // 충돌 감지
{
if (other.gameObject.name == "Ball")
{
GameObject.Find("GameManager").SendMessage("GetCoin");// 게임메니저에서 함수 불러오기
Destroy(gameObject);
}
}
}
다음은 장애물!
가만히 있으면 재미가 없죠... 열심히 이동시켜 줍시다!
먼저 속도를 선언해주고
장애물을 계속 x축으로 이동시켜주다가?
6이되면 방향변경, -6이 되면 방향변경을 통해 좌우로 왔다갔다 하게 만들어 줍시다.
public float delta = 0.1f;//속도 선언
/~~~~~
void Update()
{
float newXPosition = transform.localPosition.x + delta;//장애물 이동
transform.localPosition = new Vector3(newXPosition, transform.localPosition.y, transform.localPosition.z);
if (transform.localPosition.x < -6)
{
//delta = 0.1f;
delta *= -1;
}
else if(transform.localPosition.x>6)
{
//delta = -0.1f;
delta *= -1;
}
}
위 아래 이동하는 부분도 만들어 줄수있습니다.
void Update()
{
float newXPosition = transform.localPosition.y + delta;
transform.localPosition = new Vector3(transform.localPosition.x, newXPosition, transform.localPosition.z);
if (transform.localPosition.y > 10)
{
//delta = 0.1f;
delta *= -1;
}
else if(transform.localPosition.y < 0)
{
//delta = -0.1f;
delta *= -1;
}
}
그리고 만약 공으로 플레이하다 장애물과 충돌시 공이 튕겨나가도록하는부분도 만들어 줍시다.
private void OnCollisionEnter(Collision collision)//공과 장애물 충돌
{
Debug.Log(collision.gameObject.name + "충돌");
Vector3 direction = transform.position - collision.gameObject.transform.position;//방향
direction = direction.normalized * 1000;//방향*세기
collision.gameObject.GetComponent<Rigidbody>().AddForce(direction);
}
장애물도 끝!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Obstacle : MonoBehaviour
{
public float delta = 0.1f;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
float newXPosition = transform.localPosition.x + delta;//장애물 이동
transform.localPosition = new Vector3(newXPosition, transform.localPosition.y, transform.localPosition.z);
if (transform.localPosition.x < -6)
{
//delta = 0.1f;
delta *= -1;
}
else if(transform.localPosition.x>6)
{
//delta = -0.1f;
delta *= -1;
}
}
private void OnCollisionEnter(Collision collision)//공과 장애물 충돌
{
Debug.Log(collision.gameObject.name + "충돌");
Vector3 direction = transform.position - collision.gameObject.transform.position;
direction = direction.normalized * 1000;
collision.gameObject.GetComponent<Rigidbody>().AddForce(direction);
}
}
그리고 마지막으로
바닥 액터에 나머지들을 자식으로 넣어주면 다같이 이동 가능합니다!
다음글로 오겠습니다!
'유니티 최고 > 유니티 구현' 카테고리의 다른 글
유니티(Unity) 모바일 GPS 위도 경도 받아오기 (0) | 2023.03.13 |
---|---|
유니티(Unity) Photon을 이용한 멀티 플레이 구현하기 (간단) (1) | 2023.02.03 |
간단한 유니티(Unity) 모바일 게임 만들기 (0) | 2022.09.01 |
유니티(Unity) 기초! -- 하늘(sky) 설정 (0) | 2022.08.25 |
유니티(Unity) 간단한 공 게임 기능 구현 2 - 장애물 삭제, 게임 재시작, 카메라 이동 (0) | 2022.08.24 |
댓글