ํ˜„์žฌ ์ƒํ™ฉ

ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์œ„์น˜๋ฅผ ์ด๋™ํ•œ ํ›„ ์ผ์ • ๋ฒ”์œ„ ๋‚ด์˜ ์ ๋“ค์€ ๋„‰๋ฐฑ์ด ๋’ค๋กœ ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ”Œ๋ ˆ์ด์–ด์ชฝ์œผ๋กœ ๋จ.

์ผ์ • ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๊ณณ์˜ ์ ๋“ค์€ ์ •์ƒ์ ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ณต๊ฒฉํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๋„‰๋ฐฑ๋จ.


using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class Enemy1RE : MonoBehaviour

{

Transform player;

public bool isFlipped = false;

public bool isHurted;

SpriteRenderer rend1;

Rigidbody2D rigid2d;

Animator anim;

BoxCollider2D box2denemy1;

public int enemy1Hp = 5; // ์ฒด๋ ฅ

float f_en1KnockBackBound = 7.0f;

public float eneDelay; // ๊ณต๊ฒฉ ์ฟจํƒ€์ž„

public float punchDelay = 1.5f; // ํŽ€์น˜ ๋”œ๋ ˆ์ด


void Start()

{

rend1 = GetComponent<SpriteRenderer>();

rigid2d = GetComponent<Rigidbody2D>();

anim = GetComponent<Animator>();

box2denemy1 = GetComponent<BoxCollider2D>();

player = GameObject.FindGameObjectWithTag("Player").transform;

}

void Update()

{

if(eneDelay >= 0)

{

eneDelay -= Time.deltaTime;

}

if(enemy1Hp <=2)

{

punchDelay = 3.0f;

f_en1KnockBackBound = 8.0f;

}

}

public void LookAtPlayer()

{

Vector3 flipped = transform.localScale;

flipped.z *= -1f;

if(transform.position.x > player.position.x && isFlipped)

{

transform.localScale = flipped;

transform.Rotate(0, 180f, 0);

isFlipped = false;

}

else if(transform.position.x < player.position.x && !isFlipped)

{

transform.localScale = flipped;

transform.Rotate(0, 180f, 0);

isFlipped = true;

}

}

public void TakeDamageEnemy1(int damage, Vector2 pos)

{

if (!isHurted)

{

isHurted = true;

enemy1Hp -= damage;

if (enemy1Hp <= 0)

{

StartCoroutine(Enemy1Died());

}

else

{

float x1 = transform.position.x - pos.x; // ๋•Œ๋ฆฐ ์ ์˜ ๋ฐฉํ–ฅ

if (x1 < 0) x1 = 1;

else x1 = -1;

StartCoroutine("HurtCheckEnemy1");

StartCoroutine("ChangeHurtColorenemy1");

StartCoroutine("KnockBack", (x1));

}

}

}

IEnumerator HurtCheckEnemy1()

{

yield return new WaitForSeconds(0.1f);

isHurted = false;

}

IEnumerator ChangeHurtColorenemy1()

{

while (isHurted)

{

anim.SetTrigger("En1hurted");

yield return new WaitForSeconds(0.5f);

}

}

IEnumerator KnockBack(float dir)

{

float f_KnockbackTime = 0;

while (f_KnockbackTime < 0.2f)

{

if (transform.rotation.y == 0)

{

transform.Translate(Vector2.left * f_en1KnockBackBound * Time.deltaTime * dir);

}

else transform.Translate(Vector2.left * f_en1KnockBackBound * Time.deltaTime * -dir);


f_KnockbackTime += Time.deltaTime;

yield return null;

}

}

IEnumerator Enemy1Died()

{

box2denemy1.isTrigger = true;

rigid2d.isKinematic = true;

anim.SetTrigger("EN1died");

yield return new WaitForSeconds(1.1f);

DestroyImmediate(gameObject);

}

}


์ ์˜ ์ฝ”๋“œ
์ ๋“ค์€ ํ”„๋ฆฌํŒน์ด๋ผ ๋ชจ๋“  ์ ๋“ค์ด ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ƒํ™ฉ์ž„.

๋นŒ๋“œ๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์ „๊นŒ์ง€๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์—ˆ๋Š”๋ฐ ๋นŒ๋“œ ๋Œ๋ฆฌ๊ณ  ๋‚œ ํ›„๋ถ€ํ„ฐ ๊ฐ‘์ž๊ธฐ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ํฌ์ฐฉ๋จ.
ํ˜น์‹œ ์›์ธ์ด ๋ญ˜๊นŒ?

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73cec8ffa11d0283137a147df66c0ff0e9ff48d5b5e7d56d25cd81006671714e29ecd141db5e431c71a2fdfdaa9e658e944e57dac8c166f2e61a2c570


์ขŒ์ธก์˜ ๋ฌธ์œผ๋กœ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๋™ํ•˜๊ณ  ์šฐ์ธก ๋„ํŠธ๋จธ๋ฆฌ์˜ ์ ์ด ์„œ์žˆ๋Š” ๊ณณ ์•ˆ๊นŒ์ง€์˜ ๋ชจ๋“  ์ ๋“ค์€ ์ฃ„๋‹ค ๋„‰๋ฐฑ ๋ฐฉํ–ฅ์ด ๋ฐ˜๋Œ€๋กœ ์ฒ˜๋ฆฌ๋จ.



--

ํ•ด๊ฒฐ ์ด๋ผ๊ณ  ํ•ด๋„ ๋ ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ์ž„์‹œ ํ•ด๊ฒฐ๋กœ ํ•จ

ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •์ง“๋Š” float x1 ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•˜์—ฌ ํ•ด๊ฒฐ

x1 = transform.positon.x - pos.x

๋ฅผ

x1 = transform.localposition.x - pos.x

๋กœ


ํ”Œ๋ ˆ์ด์–ด์˜ ์œ„์น˜๊ฐ’์„ ๋กœ์ปฌํฌ์ง€์…˜์œผ๋กœ ๋ฐ›๋Š”๊ฒŒ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Œ

๋‹น์žฅ์€ ์—๋Ÿฌ๊ฐ€ ์—†๋Š”๋ฐ ์ด๊ฒŒ ๋‚˜์ค‘์— ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ• ์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Œ