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


์นด๋ฉ”๋ผ๊ฐ€ ํ”๋“ค๋ฆฌ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์œ„์™€ ๊ฐ™์€์‹์œผ๋กœ ์งฐ์Œ

๊ทธ๋ฆฌ๊ณ  ์ € ์Šคํฌ๋ฆฝํŠธ์˜ ์—…๋ฐ์ดํŠธ์—์„œ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๋Œ๋ฆฌ๋‹ˆ๊นŒ ์ •์ƒ์ ์œผ๋กœ ํ™”๋ฉด์ด ํ”๋“ค๋ฆฌ๋Š”๋ฐ

ํ”Œ๋ ˆ์ด์–ด ์Šคํฌ๋ฆฝํŠธ์˜ ์—…๋ฐ์ดํŠธ์—์„œ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐํ•ด์„œ ๋Œ๋ฆฌ๋ฉด ์ด์ƒํ•˜๊ฒŒ ์‹คํ–‰์ด ์•ˆ๋จ


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

์ €๋ ‡๊ฒŒ ๋„ฃ์–ด๋„ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋˜๋Š”๋ฐ ํ˜น์‹œ ๋˜๊ฒŒ ํ•˜๋ ค๋ฉด ๋‚ด๊ฐ€ ๋‹ค๋ฅธ ๋ฌด์–ธ๊ฐˆ ํ•ด์•ผํ•จ?

ํ˜„์žฌ urpํŒŒ์ดํ”„๋ผ์ธ์„ ๋””ํดํŠธ๋กœ ํ•ด๋†จ๋Š” ์ƒํƒœ๊ณ 

์ € ํ”๋“ค๋ฆฌ๋Š” ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ ์•ˆํ•˜๋ƒ ํ•˜๋ฉด ๊ทธ๊ฑด ์•„๋‹˜ ์œ„์— ๋งํ–ˆ๋“ฏ ์ € ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ์ž˜ ์ž‘๋™๋˜๋Š”๋ฐ ์ด์ƒํ•˜๊ฒŒ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ์•ˆ๋จ

cameraScr = public cameraScript cameraScr๋กœ ์„ ์–ธํ–ˆ๊ณ  ์—ฐ๊ฒฐํ•ด๋†จ์Œ



---

์ „์ฒด ์ฝ”๋“œ

์…ฐ์ดํฌ ์ฝ”๋“œ


public class CamEffects : MonoBehaviour

{

private static CamEffects camInst; // ์™ธ๋ถ€์—์„œ ์„ ์–ธ๋ชปํ•˜๋Š” ์ •์  ๋ณ€์ˆ˜

public static CamEffects CamInst => camInst; // ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ

float shakeTime;

float shakePow;

public CamEffects()

{

camInst = this;

}

public void camShake(float dur = 0.1f, float pow = 0.05f)

{

shakeTime = dur;

shakePow = pow;

StopCoroutine("ShakePos");

StartCoroutine("ShakePos");

}

public void camExplode(float dur = 0.1f, float pow = 0.05f)

{

shakeTime = dur;

shakePow = pow;

StopCoroutine("ExpPos");

StartCoroutine("ExpPos");

}

public IEnumerator ShakePos()

{

Vector3 startPos = transform.position;

while (shakeTime > 0.0f)

{

//ํŠน์ • ๋ถ€๋ถ„๋งŒ ์›€์ง์ด๊ฒŒ ํ•˜๋ ค๋ฉด

float x = Random.Range(-1f, 1f);

transform.position = startPos + new Vector3(x, 0, 0) * shakePow;

//๊ตฌ ๋ฒ”์œ„๋กœ ์›€์ง์ด๊ฒŒ

//transform.position = startPos + Random.insideUnitSphere * shakePow;

shakeTime -= Time.deltaTime;

yield return null;

}

transform.position = startPos;

}

public IEnumerator ExpPos()

{

Vector3 startPos = transform.position;

while (shakeTime > 0.0f)

{

transform.position = startPos + Random.insideUnitSphere * shakePow;

shakeTime -= Time.deltaTime;

yield return null;

}

transform.position = startPos;

}

}

--

ํ”Œ๋ ˆ์ด์–ด

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;


public class PlayerController : MonoBehaviour

{

public Hpbar hpbar; // ํ”ผํ†ต

public GameObject PunchAttackPoint; // ์ฃผ๋จน๊ณต๊ฒฉ ํฌ์ธํŠธ

public GameObject KickAttackPoint; // ๋ฐœ๊ธธ์งˆ ํฌ์ธํŠธ

public float PunchAttackRange = 0.1f; // ํŽ€์น˜ ๋ฐ˜์ •

public float KickAttackRange = 0.2f; // ํ‚ฅ ๋ฐ˜๊ฒฝ

//public LayerMask EnemyLayer; // ์—๋„ˆ๋ฏธ 1 ๋ ˆ์ด์–ด

LayerMask enemylayer;

public GameObject DeadSceneobj; // ๋ฐ๋“œ์”ฌ

Rigidbody2D rigidbody2d;

Animator animator;

SpriteRenderer rend;

IEnumerator dashCoroutine; // ๋Œ€์‹œ ์ฝ”๋ฃจํ‹ด

float SpeedLimit = 4f; // ์†๋„ ์ œํ•œ

float f_dashDir = 1; // ๋Œ€์‹œ ๋ฐฉํ–ฅ

float JumpForce = 5.1f; // ์ ํ”„์— ๊ฐ€ํ•ด์ง€๋Š” ํž˜

float f_handcooltime = 0.4f; // ์ฃผ๋จน์งˆ ์ฟจํƒ€์ž„

float f_kickcooltime = 0.6f; // ๋ฐœ๊ธธ์งˆ ์ฟจํƒ€์ž„

float f_currentTime; // ํ˜„์žฌ์‹œ๊ฐ„ ์นด์šดํŠธ

float f_KnockBackBound = 7.0f; // ๋„‰๋ฐฑ ๊ฑฐ๋ฆฌ

//int f_Hpmax = 10; // ์ตœ๋Œ€ ํ”ผ

int f_curHp; // ํ˜„์žฌ ํ”ผ

int f_Hpmax = 20; // ์ตœ์†Œ ํ”ผ

bool b_Hurt; // ๋‹ค์นœ์ง€ ์—ฌ๋ถ€

bool b_Dash; // ๋Œ€์‹œ ์—ฌ๋ถ€

bool b_OkayDash = true; // ๋Œ€์‹œ ๊ฐ€๋Šฅ์—ฌ๋ถ€

bool b_AttackP; // ํŽ€์น˜ ๊ณต๊ฒฉ ์—ฌ๋ถ€

bool b_AttackK; // ๋ฐœ์ฐจ๊ธฐ ๊ณต๊ฒฉ ์—ฌ๋ถ€

bool b_Jump; // ์ ํ”„ ์—ฌ๋ถ€


//bool b_KnockBack = false; // ๋„‰๋ฐฑ ์ฒดํฌ

void Awake()

{

animator = GetComponent<Animator>();

rigidbody2d = GetComponent<Rigidbody2D>();//๋ฆฌ์ง€๋“œ ํ˜ธ์ถœ

//์ธ์ŠคํŽ™ํ„ฐ์ฐฝ ๋ฆฌ์ง€๋“œ ๋ฐ”๋””์˜ ๋ฆฌ๋‹ˆ์–ด ๋“œ๋ž˜๊ทธ๋Š” ๊ณต๊ธฐ์ €ํ•ญ์„ ์˜๋ฏธ : ์ด๋™์‹œ ์†๋„ ์ €ํ•˜

}

void Start()

{

enemylayer = LayerMask.GetMask("Enemy1") | LayerMask.GetMask("Enemy2");

rend = GetComponent<SpriteRenderer>();

f_curHp = f_Hpmax; // ํ˜„์žฌ ํ”ผ๋Š” ์ตœ์†Œ ํ”ผ๋กœ ์„ธํŒ…

hpbar.HpMaxSet(f_Hpmax); // ํ”ผํ†ต๋ฐ”์—์„œ ํ”ผ ์„ธํŒ…

}

private void FixedUpdate() //์—…๋Žƒ์œผ๋กœ ์•ˆ ์ฒ˜๋ฆฌํ•จ

{

MoveMent();

Dashing();

}

void Update()

{

f_dashDir = transform.localScale.x;

AttackCommand(enemylayer);

JumpPlayer();

}

void JumpPlayer() // ์ ํ”„

{

if (Input.GetKeyDown(KeyCode.Space) && rigidbody2d.velocity.y == 0 && b_Hurt == false) //์ ํ”„

{

b_Jump = true;

}

if (b_Jump == true)

{

animator.SetTrigger("Player_jumpT");

rigidbody2d.AddForce(Vector2.up * JumpForce, ForceMode2D.Impulse);

animator.SetBool("Player_walk", false);

animator.SetBool("Player_stay", false);

b_Jump = false;

}

}

void MoveMent() //์ด๋™

{

if (Time.timeScale == 1)

{

if (Input.GetKey(KeyCode.RightArrow) && b_Hurt == false)

{

transform.localScale = new Vector3(1, 1, 1);

animator.SetBool("Player_walk", true);

animator.SetBool("Player_stay", false);

transform.Translate(Vector2.right * Time.deltaTime * SpeedLimit);

}

else if (Input.GetKey(KeyCode.LeftArrow) && b_Hurt == false)

{

transform.localScale = new Vector3(-1, 1, 1);

animator.SetBool("Player_walk", true);

animator.SetBool("Player_stay", false);

transform.Translate(Vector2.left * Time.deltaTime * SpeedLimit);

}

else

{

animator.SetBool("Player_stay", true);

animator.SetBool("Player_walk", false);

}

if (Input.GetKeyDown(KeyCode.C) && rigidbody2d.velocity.y == 0 && b_OkayDash == true)

{

if (dashCoroutine != null)

{

StartCoroutine(dashCoroutine);

}

dashCoroutine = Dash(.2f, 3);

StartCoroutine(dashCoroutine);

}

}

}

void OnDrawGizmosSelected()

{

Gizmos.color = Color.red;

Gizmos.DrawWireSphere(PunchAttackPoint.transform.position, PunchAttackRange);

}

void Dashing()

{

if(b_Dash)

{

rigidbody2d.AddForce(new Vector2(f_dashDir * 2, 0), ForceMode2D.Impulse);

}

}

void walkSound() // ๊ฑท๋Š” ์†Œ๋ฆฌ ์žฌ์ƒ

{

FindObjectOfType<AudioManager>().Play("PlayerWalk");

}

void jumpSound() // ์ ํ”„ ํ•˜๋Š” ์†Œ๋ฆฌ ์žฌ์ƒ

{

FindObjectOfType<AudioManager>().Play("PlayerJump");

}

void DashSound() // ๋Œ€์‹œ ์†Œ๋ฆฌ ์žฌ์ƒ

{

FindObjectOfType<AudioManager>().Play("PlayerDash");

}

void PunchColliderSwitch()

{

PunchAttackPoint.SetActive(!PunchAttackPoint.activeInHierarchy);

}

void KickColliderSwitch()

{

KickAttackPoint.SetActive(!KickAttackPoint.activeInHierarchy);

}

void AttackCommand(LayerMask mask)

{

mask = enemylayer;

if (f_currentTime <= 0)

{

if (Input.GetKeyDown(KeyCode.Z) && rigidbody2d.velocity.y == 0)

{

b_AttackP = true;

FindObjectOfType<AudioManager>().OnePlay("PlayerPunch1", 0.2f);

}

if (b_AttackP)

{

animator.SetTrigger("Player_punchT");

animator.SetBool("Player_stay", false);

animator.SetBool("Player_walk", false);

Collider2D[] hitEnemyP = Physics2D.OverlapCircleAll(PunchAttackPoint.transform.position, PunchAttackRange, mask);

foreach(Collider2D enemy in hitEnemyP)

{

//์ ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋”œ ์ฃผ๊ธฐ

var enemy1 = enemy.GetComponent<Enemy1RE>();

var enemy2 = enemy.GetComponent<Enemy2RE>();

if (enemy1)

{

enemy1.TakeDamageEnemy1(1, transform.position);

}

if(enemy2)

{

enemy2.TakeDamageEnemy2(1, transform.position);

}

}

f_currentTime = f_handcooltime;

b_AttackP = false;

}

if (Input.GetKeyDown(KeyCode.X) && rigidbody2d.velocity.y == 0)

{

b_AttackK = true;

FindObjectOfType<AudioManager>().OnePlay("PlayerKick1", 0.2f);

}

if(b_AttackK)

{

animator.SetTrigger("Player_kickT");

animator.SetBool("Player_stay", false);

animator.SetBool("Player_walk", false);

Collider2D[] hitEnemyK = Physics2D.OverlapCircleAll(KickAttackPoint.transform.position, KickAttackRange, mask);

foreach (Collider2D enemy in hitEnemyK)

{

var enemy1 = enemy.GetComponent<Enemy1RE>();

var enemy2 = enemy.GetComponent<Enemy2RE>();

if(enemy1)

{

enemy1.TakeDamageEnemy1(2, transform.position);

}

if(enemy2)

{

enemy2.TakeDamageEnemy2(2, transform.position);

}

}

f_currentTime = f_kickcooltime;

b_AttackK = false;

}

}

else f_currentTime -= Time.deltaTime;

}

public void TakeDamage(int damage, Vector2 pos)

{

if(!b_Hurt)

{

b_Hurt = true;

f_curHp -= damage;

hpbar.HpSet(f_curHp);

if(f_curHp <= 0)

{

StartCoroutine(DeadScene());

}

else

{

float x = transform.position.x - pos.x; // ๋งž์€ ์ ์˜ ๋ฐฉํ–ฅ

if (x < 0) x = 1;

else x = -1;

StartCoroutine("HurtCheck");

StartCoroutine("ChangeHurtColor");

StartCoroutine("KnockBack",(x));

}

}

}

IEnumerator DeadScene()

{

FindObjectOfType<AudioManager>().Play("PlayerDied");

animator.SetTrigger("Player_deathT");

yield return new WaitForSeconds(1.0f);

DeadSceneobj.SetActive(true);

}

IEnumerator HurtCheck()

{

yield return new WaitForSeconds(0.7f);

b_Hurt = false;

}

IEnumerator ChangeHurtColor()

{

while (b_Hurt)

{

yield return new WaitForSeconds(0.1f);

rend.color = new Color(1, 1, 1, 0.5f);

yield return new WaitForSeconds(0.1f);

rend.color = new Color(1, 1, 1, 1f);

}

}

IEnumerator KnockBack(float dir)

{

//b_KnockBack = true;

float f_KnockbackTime = 0;

while(f_KnockbackTime < 0.2f)

{

if (transform.rotation.y == 0)

{

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

}

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


f_KnockbackTime += Time.deltaTime;

yield return null;

}

//b_KnockBack = false;

}

IEnumerator Dash(float f_dashDuration, float f_dashCooldown)

{

animator.SetTrigger("Player_dashT");

b_Dash = true;

b_OkayDash = false; // ๋‹ค๋ฅธ ๋Œ€์‹œ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ. ์ค‘๋ณต๋ฐฉ์ง€

yield return new WaitForSeconds(f_dashDuration);

b_Dash = false;

rigidbody2d.velocity = Vector2.zero;

yield return new WaitForSeconds(f_dashCooldown);

b_OkayDash = true;

}

private void OnCollisionEnter2D(Collision2D collision)

{

//if (collision.gameObject.CompareTag("Enemy1"))

//{

// TakeDamage(1, collision.transform.position);

//}

}

}


---


์ˆ˜์ • 2

ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์œ„์น˜ํ•œ ์˜ค๋ธŒ์ ํŠธ


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

์นด๋ฉ”๋ผ


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

ํ”Œ๋ ˆ์ด์–ด



+


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

ํ•˜์ด์–ด๋ผํ‚ค์‚ฌ์ง„



---


์นด๋ฉ”๋ผ ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ(์นด๋ฉ”๋ผ๊ฐ€ ํ”Œ๋ ˆ์ด์–ด ์ถ”์ ํ•˜๋Š” ์ฝ”๋“œ์ž„)

using System.Collections;

using System.Collections.Generic;

using UnityEngine;


public class CameraScript : MonoBehaviour

{


ย  ย  //์ดํ•˜๋Š” ๊ธฐํƒ€

ย  ย  public Transform Target;

ย  ย  float Offset = 1.9f;

ย  ย  float height;

ย  ย  float width;


ย  ย  void Start()

ย  ย  {

ย  ย  ย  ย  height = Camera.main.orthographicSize;

ย  ย  ย  ย  width = height * Screen.width / Screen.height;

ย  ย  }

ย  ย  void LateUpdate()

ย  ย  {

ย  ย  ย  ย  Vector3 temp = transform.position;

ย  ย  ย  ย  temp.x = Target.position.x;

ย  ย  ย  ย  temp.y = Target.position.y;

ย  ย  ย  ย  temp.y += Offset;

ย  ย  ย  ย  transform.position = temp;

ย  ย  }

}