//Projectiles.cs
private void ApplyDebuff()
{
if(target.ElementType!=elementType)//๋์ผ ์์ฑ ์๋๋ ๋๋ฒํ๊ฐ ๊ฑธ๋ฆผ
{
float roll = Random.Range(0, 100);//๋๋ฒํ๊ฐ ๊ฑธ๋ฆด ํ๋ฅ 0~100
if(roll<=parent.Proc)//proc๋ ๋๋ฒํ ํ๋ฅ , ํ๋ฅ ๊ตด๋ ค์ proc ๋ฏธ๋ง์ด๋ฉด ๋๋ฒํ ๊ฑธ๋ฆผ
{
target.AddDebuff(parent.GetDebuff());
}
}
}
//Debuff.cs
public abstract class Debuff //ํด๋์ค์ ๋ชฉ์ ๊ณผ ๋์ผํ ํ์ ํด๋์ค๋ฅผ ๋ง๋ค๋ ค๊ณ , ์ธ๋ถ ์ฌํญ์ ํ์ํด๋์ค๋ก ๋ฃ์๋ ์ถ์ํด๋์ค๋ก ๋ง๋ค์ด์ผํ๋ค.
{
protected Monster target;
private float duration;
private float elapsed;//๊ฒฝ๊ณผ
public Debuff(Monster target, float duration)
{
this.target = target;
this.duration = duration;
}
public virtual void Update()
{
elapsed += Time.deltaTime;
if(elapsed>=duration)
{
Remove();
}
}
public virtual void Remove()
{
if (target !=null)
{
target.RemoveDebuff(this);
}
}
}
//FireDebuff.cs
//๋ฉ์๋:ํด๋์ค,๊ตฌ์กฐ์ฒด ์ด๊ฑฐํ์ ํฌํจ๋์ด์๋ ํจ์
//ํจ์: ํน์ ์์
์ ์ํํ๋ ์ฝ๋ ์กฐ๊ฐ์ผ๋ก์จ ๋ฉ์๋๋ฅผ ํฌํจํจ
public class FireDebuff : Debuff
{
private float tickTime;
private float timeSinceTick;//Time duration
private float tickDamage;
public FireDebuff(float tickDamage, float tickTime, float duration ,Monster target):base(target,duration)//Debuff์์ Debuff.debuffํจ์
{
this.tickDamage = tickDamage;
this.tickTime = tickTime;
}
public override void Update()
{
if(target!=null)
{
timeSinceTick += Time.deltaTime;//deltatime ์ ํ๋ ์์ด ์๋ฃ ๋๊ธฐ๊น์ง์ ์๊ฐ,ํ ํ๋ ์ ๋น ์คํํ๋ ์๊ฐ,์ปดํจํฐ ์ฑ๋ฅ์ ๋ฐ๋ผ ์๋ ์ฐจ์ด๊ฐ ์๋๊ฑฐ ๋ณด์
if(timeSinceTick>=tickTime)//tickTime์ด Time SinceTick๋ณด๋ค ํด ๊ฒฝ์ฐ์ ๋ฐ๋ฏธ์ง๋ฅผ ์ค.
{
timeSinceTick = 0;
target.TakeDamage(tickDamage,Element.FIRE);//ํฑ๋น ๋ฐ๋ฏธ์ง๋ฅผ ์ค.
}
}
target.TakeDamage(tickDamage, Element.FIRE);
base.Update();
}
}
//Monster.cs
public void TakeDamage(float damage, Element dmgSource)
{
if(IsActive)
{
Debug.Log(dmgSource);
if (dmgSource==ElementType)//๋ง์ฝ ๊ณต๊ฒฉํ๋ ํ์
๊ณผ ํผ๊ฒฉ๋ฐ๋ ๋ชฌ์คํฐ์ ๊ณต๊ฒฉ ํ์
์ด ๊ฐ๋ค๋ฉด ๋ฐ๋ฏธ์ง ๋ฐ๊ฐ
{
//Debug.Log(dmgSource);
damage = damage / resist;
//resist++;
}
health.CurrentVal -= damage;
if(health.CurrentVal<=0)
{
GameManager.Instance.Currency += 2;//๊ณจ๋ ํตํ ์ถ๊ฐ
myAnimator.SetTrigger("Death");
IsActive = false;
GetComponent<SpriteRenderer>().sortingOrder--;//๋ ์ด์ด์ order๋ฅผ -ํ๋ค๋ ๊ฒ. ์ฆ ๋งต ๋ค๋ก ๊ฐ. ์ฃฝ๊ณ ๋๋ฉด ๋ ์ด์ด์ ์๋ฒ์ด - ๋๋ค๋ ๊ฒ
}
}
}
//FireTower.cs
public class FireTower : Tower//ํ์์์ ์์๋ฐ์. ์ผ๋ฐ์ ์ผ๋ก๋ monobehaviour์์ ์์๋ฐ์
{
[SerializeField]
private float tickTime;
[SerializeField]
private float tickDamage;
public float TickTime
{
get
{
return tickTime;
}
}
public float TickDamage
{
get
{
return tickDamage;
}
}
private void Start()
{
ElementType = Element.FIRE;
}
public FireTower()
{
}
public override Debuff GetDebuff()
{
return new FireDebuff(TickDamage,TickTime,DebuffDuration,Target);
}
//Tower.cs
[SerializeField]
private int damage;
[SerializeField]
private float debuffDuration;
[SerializeField]
private float proc;//๊ฑธ๋ฆด ํ๋ฅ . 100์ด ์ต๋ 0์ด ์ต์.
public Element ElementType { get; protected set; }//ํ๋กํ
ํฐ๋ set์ ํ์ ํด๋์ค์์๋ง ์ฌ์ฉ๊ฐ๋ฅ
public int Price { get; set; }//ํผ๋ธ๋ฆญ ์ ์๋ get set์ผ๋ก
public float ProjectileSpeed //์ด๋ ๊ฒ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์์๋ ์ฌ์ฉํ๊ฒ ํ๊ธฐ์ํด์
{
get { return projectileSpeed; }
}
public int Damage
{
get
{
return damage;
}
}
public float DebuffDuration
{
get
{
return debuffDuration;
}
set
{
this.debuffDuration = value;
}
}
public float Proc
{
get
{
return proc;
}
set
{
this.proc = value;
}
}
public์ผ๋ก ์์ฐ๊ณ ๊ตณ์ด get,set ์ฐ๋๊ฑด oop ์์น๋๋ฌธ์ ๊ทธ๋ฐ๊ฑฐ๊ณ
proc๋ ๋๋ฒํ ๊ฑธ๋ฆดํ๋ฅ ์
๋๋ฒํ ๊ฑธ๋ฆดํ๋ฅ 100ํผ ์ค์ ํ๊ณ , debuffDruatin=์ง์์๊ฐ
์ค์ ํ๊ณ , ๊ณต๊ฒฉ์ ๋ฐ์ผ๋ฉด
์ผ๋จ ํฌ์ฌ์ฒด ๋ฐ๋ฏธ์ง ์์ฒด๋ ๋ฐ์
๋ฌธ์ ๋ ํฌ์ฌ์ฒด ๋ฐ๋ฏธ์ง ์ดํ์, ํ์ ์ํ๋ฅผ ๋ง๋ค์ด์ ๋๋ฒํ๋ฅผ ๋ง๋ค๋ ค๊ณ ์ด๋ ๊ฒ ํฑ๋น ๋ฐ๋ฏธ์ง๋ฅผ ์
๊ฒ ํ๋จ ๋ง์ด์ผ?
๊ทผ๋ฐ ํฑ๋น ๋ฐ๋ฏธ์ง๋ฅผ ์๋ฐ์.
๋ญ๊ฐ ์ค์์ผ๊น?
์ผ๋จ ๊ด๋ จ๋ ์ฝ๋๋ค ๋ค ๊ฐ์ง๊ณ ์ด.
๋๋ฒ๊น ํ๋ฉด tickDamage์ซ์๋ก ๋ค์ด๊ฐ์์ด? ๊ทธ๋ฆฌ๊ณ ์ฒด๋ ฅ๋ณํ์ํค๋๊ณณ์์ ๋ธ๋ ์ดํฌํฌ์ธํธ ๊ฑธ๋ฉด ์ด์ฐ๋๋์ง๋ง ๋ณด๋ฉด ๋๋๊ฑฐ ์๋๊ฐ..
๋๋ฒ๊ทธ๋ก๊ทธ๋ก tickDamage๊ฐ float๋ก ๋ค์ด๊ฐ๊ฑด ํ์ธํ์. ๋ธ๋ ์ดํฌ ํฌ์ธํธ๋ ์ด๋ป๊ฒ ๊ฑฐ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค.
์ค๋จ์ ์ฝ์ ํ๋ผ๋ ๋ง์ด์ง?
์~
ํฑ๋์ด 0์ผ๋ก ๋์ด์๋๊ฑด์๋์ง?
์๋ ใ ใ 10์ผ๋ก ๋ค์ด๊ฐ๋๊ฑด ํ์ธํ๋๋ฐ..
1. ํ๋ฅ ๋ฐ์ดํฐ ํ์ธ ๋ฐ ํต๊ณผ ํ๋์ง ํ์ธ (๋๋ฒํ ๋ถ์ฌ๋ ๋ ๋ก๊ทธ)
2. ํ๊ฒ์ ์ ๋ฐ์ดํธ์์ ๋๋ฒํ ๋ฆฌ์คํธ์ ์ ๋ค์ด์๋์ง ํ์ธ ๋ฐ ์ ๋ฐ์ดํธ ์ง์ ๋๋์ง ํ์ธ
elapsed ๊ฐ 0์ผ๋ก ์ด๊ธฐํ ํด๋ด๋ด