현재 맵에 적이 하나씩 생성되고 거리가 가까워지면 적을 때리고 체력이 없어지면 쓰러지는 동작을 한뒤 다시 생성된다.
(맵이 짧은건 블럭이동 확인을 시각적으로 용이하게 하려고 줄여 놓았다.)
이후 추가하려는 내용.
-적도 공격한다.
-적이 나오는 시점이 랜덤
-배경도 움직인다.
위에 목표가 되면 추가내용 ->다수적
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | using System.Collections; using System.Collections.Generic; using UnityEngine; public class Main : MonoBehaviour { public GameObject hero;//공격하는 케릭터 public GameObject enermy;//적 public GameObject block0;//바닥 0 public GameObject block1;//바닥 1 public GameObject block2;//바닥 2 public GameObject block3;//바닥 3 public GameObject block4;//바닥 4 public GameObject block5;//바닥 5 private tk2dSpriteAnimator ani; //공격케릭터 동작 private tk2dSpriteAnimator ani2;//적 케릭터 동작 private Vector3 enermyposition;//적 처음 위치 private Vector3 setposition;//바닥 재생성 위치 private Vector3 seeposition;//바닥이 이동하는 방향 private int hp=10;//적 체력 private bool checkClick = true;//중단버튼 클릭여부 확인 private float checkMove;//움직인 거리 확인 private int blockLoop=0;//움직일 블럭 확인 void Start () { //적 처음 위치 저장 enermyposition = enermy.transform.position; //움직임 준비 ani = hero.GetComponent<tk2dSpriteAnimator>(); ani2 = enermy.GetComponent<tk2dSpriteAnimator>(); //블럭 위치 준비 setposition = block0.transform.position; seeposition.Set(-9.4f, -0.96f, 0); } //버튼 준비 private void OnGUI() { //버튼 영역 설정 GUILayout.BeginArea(new Rect(100, 0, 300, 300)); //자동 전투 시작버튼 if (GUILayout.Button("Go!GO!", GUILayout.Width(200), GUILayout.Height(50))) { StartCoroutine(Auto()); } //중단 버튼 if (GUILayout.Button("Stop", GUILayout.Width(200), GUILayout.Height(50))) { ani.Play("Hero_Idle"); checkClick = false; } //재시작 버튼 if (GUILayout.Button("ReStart", GUILayout.Width(200), GUILayout.Height(50))) { checkClick = true; StartCoroutine(Auto()); } //버튼 영역 끝 GUILayout.EndArea(); } //코루틴 시작 IEnumerator Auto() { //중단버튼 클릭 확인후 반복 while (checkClick) { //적과 아군 거리 var dis = Vector3.Distance(this.enermy.transform.position, this.hero.transform.position); if (hp == 0)//적 체력이 0일때 { //2초 대기 yield return new WaitForSeconds(2); //포지션 재설정 enermy.transform.position = enermyposition; //준비자세 ani2.Play("Hero_Idle"); //체력 재설정 hp = 10; } //거리가 가까워지면 작동 else if (dis <= 1) { hp--;//체력 감소 ani.Play("Hero_Attack");//때리는 동작 //히트동작 대기 yield return new WaitForSeconds(0.231f); //히트동작에 메시지 출력 Debug.Log("!!!!! 적의 남은체력은 <color=red>" + hp+"</color>"); //체력이 없게되면 죽는동작 실행 if (hp == 0) ani2.Play("Hero_Die"); //때리는 동작 끝나는것을 대기 yield return new WaitForSeconds(0.170f); } else { //달리는 동작 ani.Play("Hero_Run"); //움직임 속도 var step = 1 * Time.deltaTime; //블럭 이동거리 측정 checkMove += step; //블럭 이동거리가 조건에 충족할떄 if (checkMove >= 2.8) { //블럭 위치 재설정 switch (blockLoop) { case 0: { checkMove = 0; block5.transform.position = setposition; blockLoop++; break; } case 1: { checkMove = 0; block4.transform.position = setposition; blockLoop++; break; } case 2: { checkMove = 0; block3.transform.position = setposition; blockLoop++; break; } case 3: { checkMove = 0; block2.transform.position = setposition; blockLoop++; break; } case 4: { checkMove = 0; block1.transform.position = setposition; blockLoop++; break; } case 5: { checkMove = 0; block0.transform.position = setposition; blockLoop = 0; break; } default: break; } } //적 및 블럭들 이동을 시킴 this.enermy.transform.position = Vector3.MoveTowards(enermy.transform.position, hero.transform.position, step); this.block0.transform.position = Vector3.MoveTowards(block0.transform.position, seeposition, step); this.block1.transform.position = Vector3.MoveTowards(block1.transform.position, seeposition, step); this.block2.transform.position = Vector3.MoveTowards(block2.transform.position, seeposition, step); this.block3.transform.position = Vector3.MoveTowards(block3.transform.position, seeposition, step); this.block4.transform.position = Vector3.MoveTowards(block4.transform.position, seeposition, step); this.block5.transform.position = Vector3.MoveTowards(block5.transform.position, seeposition, step); } //한프레임 쉼 yield return null; } } } | cs |
'정리 카테고리 > 실습_과제' 카테고리의 다른 글
Uinty_게임 시작부분 (0) | 2018.04.12 |
---|---|
Unity_실습_케릭터 선택과 씬 변경 (0) | 2018.04.05 |
실습_Unity_랜덤목표 따라가는 캐릭터 (0) | 2018.03.29 |
실습_미니맵이 보이는 미로 게임 (0) | 2018.03.24 |
실습_c# 뱀게임SnakeGame (0) | 2018.03.16 |