러닝센터 8강 - 생성자, 상속, 유니티 애니메이션

러닝센터 8강

===[ 생성자 ]=====================================================================================

기본생성자
class Knight{
private:
 string name;
 int hp;

public:

 // 생성자
 // 1.메소드 타입
 // 2.함수 이름이 반드시 클래스 명이랑 같다
 // 3.리턴값이 없다.
 // 기본생성자 - 매개변수 없이 기본 초기화를 수행
 Knight(){  
  SetInfo("홍길동",150);
 }
 
 void SetInfo(string name, int hp){
  if (hp <= 0) hp = 100; // 갭슐화
  this->name = name;
  this->hp = hp;
 }
};

void main(){


 // 기본 생성자 호출
 Knight* knight = new Knight();



 delete knight

}

===[ 소멸자 ]=====================================================================================
class Knight{
private:
 string name;
 int* hp;

 void CreateHp(){
  hp = new int;
 }
public: 
 Knight(){  
  CreateHp();
  SetInfo("홍길동",150);
 }

 // [소멸자]
 // 1. 메소드명이 클래스명과 같음
 // 2. 리턴값이 없음.
 // 3. 객체가 소멸될때 자동으로 호출됨(생성자와의 차이)
 // 4. 틸드( ~ )가 붙음 (생성자와의 차이)
 // 5. 오버로드 할 수 없음 ( 매개변수 사용 할 수 없음 )
 // 6. 객체안에 존재하는 동적 메모리 해제역할

 ~Knight(){
  delete hp; // 동적으로 생성된 hp를 소멸함
  cout << "소멸자가 호출됨" << endl;
 }
 
 // 캡슐화
 void SetInfo(string name, int hp){
  CreateHp();
  if (hp <= 0) hp = 100; // 갭슐화
  this->name = name;
  *(this->hp) = hp;
 }
};

void main(){

 Knight* knight = new Knight();
 
 delete knight;
}


===[ 상속 ]=======================================================================================

#include <iostream>
#include <stdlib.h>
#include <string>
#include <time.h>
#include <Windows.h>
using namespace std;

//1. 중복을 찾아내라.
//2. 중복에 대한 내용의 공통성을 추상화 한 클래스를 작성해라
//3. 중복에 대해 추상화한 클래스에 중복 코드를 옮겨라.
//4. 추상화한 클래스를 상속해라.
//5. 자식 클래스에서 중복된 코드를 제거 해라.

class Character{
protected:
 string _name;
 int _hp;
 int _damage;
public:
 void Move(){
  cout << "[" << _name << "] 님이 이동을 합니다." << endl;
 }
 void Hit(int damage){
  cout << "[" << _name << "] 님이" << damage 
  << " 데미지를 입었습니다." << endl;
 }
 void Die(){
  cout << "[" << _name << "] 님이 사망 했습니다." << endl;
 }
};

class Player : public Character// 상속받을 클래스명
{
private:
 int _level;
 int _gravity;
 string _talkMessage;

public:
 //생성자
 Player(string name, string talkMessage, int damage){
  _damage = damage;
  _name = name;
  _talkMessage = talkMessage;
  cout << "[" << _name << "] 님이 접속하였습니다" << endl;
  Talk();
 }; 
 ~Player(){};//소멸자
 
 void Talk(){
  cout << "[" << _name << "] 메세지 : " << endl;
 }
 void Attack(){
  cout << "[" << _name << "] 님이" << _damage 
  << " 만큼의 공격을 합니다." << endl;
 }
 void Jump(){
  cout << "[" << _name << "] 점프 하였습니다.." << endl;
 }
};

class Monster : public Character // 상속받을 클래스명
{
private:
 int _skillType;

public:
 //생성자
 Monster(string name, int skillType, int damage){
  _damage = damage;
  _name = name;
  _skillType = skillType;
  cout << "[" << _name << "] 님이 나타났습니다." << endl;
 }; 
 ~Monster(){};// 소멸자
 
 void Skill()
 {
  cout << "[" << _name << "] 님이 " << _skillType 
  << "타입의 스킬을 사용합니다. " << endl;
 }
};


class Creature : public Character // 상속받을 클래스명
{
private:
 int _time;
public:
 Creature(string name, int time) {
  _name = name;
  _time = time;
  _hp = 100;
  _damage = 50;
  cout << "[" << _name << "] 님이 소환 됐습니다." << endl;
  Timer();
 }; 
 ~Creature() {};//소멸자

 void Timer()
 {
  cout << "[" << _name << "] 님이 " << _time 
  << " 시간뒤에 소멸됩니다." << endl;
 }
};

void main(){

 Player* player = new Player("티거", "저는 푸우의 친구 티거 입니다!!", 100);
 player->Move();
 player->Attack();
 player->Hit(10);
 player->Die();
 delete player;

 Monster* monster = new Monster("오우거", 2, 50);
 monster->Move();
 monster->Skill();
 monster->Hit(10);
 monster->Die();
 delete monster;

 Creature* creature = new Creature("멀록", 10);
 creature->Move();
 creature->Hit(5);
 creature->Die();
 delete creature;
}


================================================================================================

#include <iostream>
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */
#include <string>

using namespace std;

// 중복코드를 가지고 만든 캐릭터 클래스
class Character {
protected: // 접근지정자 : 내부접근가능, 상속된 클래스에서 접근 가능 , 현재 클래스와 상속된 클래스에서 접근이 가능한 지정자.

 // 중복 속성들
 string _name;
 int _hp;
 int _damage;
public:
 Character(string name, int damage) {
  _name = name;
  _hp = 100;
  _damage = damage;
 }

 // 중복 메소드들
 void Move() {
  cout << "[" << _name << "] 님이 이동을 합니다. " << endl;
 }
 void Hit(int damage) {
  cout << "[" << _name << "] 님이 " << damage << " 데미지를 입었습니다. " << endl;
 }
 void Die() {
  cout << "[" << _name << "] 님이 사망했습니다. " << endl;
 }
};

// 플레이어는 캐릭터를 상속함
class Player : public Character
{
private:
 int _level;
 int _gravity;
 string _talkMessage;
public:
 Player(string name, string talkMessage, int damage)
  // 플레이어의 생성자를 호출하기전에 캐릭터의 생성자를 호출함
  : Character(name, damage) {

  _talkMessage = talkMessage;
  _level = 1;
  _gravity = 1;

  cout << "[" << _name << "] 님이 접속하였습니다." << endl;
  Talk();
 }

 ~Player() {}

 void Talk() {
  cout << "[" << _name << "] 메시지 : "
   << _talkMessage << endl;
 }
 void Attack() {
  cout << "[" << _name << "] 님이 " << _damage << "만큼의 공격을 합니다. " << endl;
 }
 void Jump() {
  cout << "[" << _name << "] 님이 점프를했습니다. " << endl;
 }
};

class Monster : public Character
{
private:
 int _skillType;
public:
 Monster(string name, int skillType, int damage)
  : Character(name, damage) {

  _skillType = skillType;

  cout << "[" << _name << "] 님이 나타났습니다." << endl;
 }
 ~Monster() {}

 void Skill()
 {
  cout << "[" << _name << "] 님이 " << _skillType << "타입의 스킬을 사용합니다. " << endl;
 }

};

class Creature : public Character
{
private:
 int _time;
public:
 
 Creature(string name, int time, int damage)
  // 생성자 상속
  : Character(name, damage) { 

  _time = time;

  cout << "[" << _name << "] 님이 소환 됐습니다." << endl;
  Timer();
 }
 ~Creature() {}

 // [메소드 오버라이드]
 // 부모 클래스에서 상속받은 메소드를 자식 클래스에서 재정의 해서 사용 하는것을 
 // 메소드 오버라이드라 한다.
 // 오버라이드 상속된 메소드와 이름을 같이 하여 해당 내용을 바꿀 수 있다.

 void Move(){
  cout << "[" << _name << "] 님이 " << "날아가는 듯이 뛰어갑니다" << endl;
 }

 void Timer()
 {
  cout << "[" << _name << "] 님이 " << _time << " 시간뒤에 소멸됩니다." << endl;
 }
};

void main()
{
 Player* player = new Player("티거", "저는 푸우의 친구 티거입니다!!", 100);
 player->Move();
 player->Attack();
 player->Hit(10);
 player->Die();
 delete player;

 Monster* monster = new Monster("오우거", 2, 10);
 monster->Move();
 monster->Skill();
 monster->Hit(30);
 monster->Die();
 delete monster;

 Creature* creature = new Creature("멀록", 10, 10);
 creature->Move();
 creature->Hit(5);
 creature->Die();
 delete creature;
}

=======[ C# 에서의 상속 ]=========================================================================


=======[ UNITY Animation ]============================================================

애니메이션 개별로 만들때 
윈도우 -> 애니메이션 -> Add Property 윗 부분 클릭하여 Create New Clip  선택
sample -> 1초를 60프레임으로 나눔.

애니메이터 -> 애니메이션 클립 선택후 마우스 우클릭 -> 메이크 트랜지션.
트랜지션 라인 선택 후 인스펙터창 확인.

Has Exit Time 체크 해제 ( 해당 애니메이션이 지난 뒤 다음 애니메이션이 실행)

애니메이터 창에서 왼쪽 상단 Parameters 선택 -> Trigger 선택 -> 네이밍 입력
박스콜라이더 2D로 입력

게임오브젝트에 메소드 입력
void OnMouseDown()
    {        
        GetComponent<Animator>().SetTrigger("Hit");
    }


















댓글

이 블로그의 인기 게시물

날짜 시간 시간차 시간 계산 하기

코루틴에서 CallBack 함수 적용하기

C++ 언어 퍼센트 구하는 방법 / 기본 언어 퍼센트 구하는 방법