-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Kim Ye Seung, 21.09.30 #8
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,57 @@ | ||||||
using System.Collections; | ||||||
using System.Collections.Generic; | ||||||
using UnityEngine; | ||||||
using UnityEngine.SceneManagement; | ||||||
|
||||||
public class BGM : MonoBehaviour | ||||||
{ | ||||||
public AudioClip BGM1; | ||||||
public AudioClip BGM2; | ||||||
public AudioClip BGM3; | ||||||
AudioSource audioSource; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 경우에 BGM이 여러개 생기면 변수를 그만큼 생성해야겠죠? 이런 걸 하드코딩이라고 부릅니다. public AudioClip[] BGMClips = new AudioClip[3];
...
audioSource.clip = BGMClips[0]; 이렇게 사용하면 인덱스 일일이 만들 필요 없이 편하고 좋겠죠? |
||||||
public playermove Player; | ||||||
public GameObject player; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||
|
||||||
Rigidbody2D rigid; | ||||||
|
||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||
void Awake() { | ||||||
player = GameObject.Find("player"); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
단순히 오브젝트의 이름만으로 player가 어떤 아이인지 찾아낼 수 있나요? 또, player는 public 필드라서 유니티 에디터 내에서도 할당해줄 수 있는 상태인데, 이미 맵에 생성되어 있는 player를 넣어주는 거라면 굳이 |
||||||
this.audioSource=GetComponent<AudioSource>(); | ||||||
rigid = GetComponent<Rigidbody2D>(); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||
} | ||||||
void Start(){ | ||||||
Ms1(); | ||||||
} | ||||||
|
||||||
void PlaySound(string action) { | ||||||
switch(action){ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이건 위에서 말했듯이 배열로 바꾸면 필요 없겠지만 왜 int가 아닌 string으로 매개변수를 받는 건지 궁금합니다. private void PlaySound(int index)
{
audioSource.clip = = BGMClips[0];
audioSource.Play();
} 로 줄일 수 있겠네요. |
||||||
case "0": | ||||||
audioSource.clip = BGM1; | ||||||
break; | ||||||
|
||||||
case "1": | ||||||
audioSource.clip = BGM2; | ||||||
break; | ||||||
|
||||||
case "2": | ||||||
audioSource.clip = BGM3; | ||||||
break; | ||||||
} | ||||||
audioSource.Play(); | ||||||
|
||||||
} | ||||||
|
||||||
public void Ms1(){ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
완전히 같은 방식인데 굳이 MsXXX 라는 방식의 메소드로 랩핑할 필요가 있었나요? 오히려 가독성을 해치고 매개변수를 통해 유동적으로 처리할 수 있는 코드를 이렇게 동적이지 못하게 랩핑 할 필요가 있었나요? 보통 이런 경우를 '과한 기능' 혹은 불 필요한 랩핑이라고 많이 부릅니다. |
||||||
PlaySound("0"); | ||||||
} | ||||||
|
||||||
public void Ms2(){ | ||||||
PlaySound("1"); | ||||||
} | ||||||
|
||||||
public void Ms3(){ | ||||||
PlaySound("2"); | ||||||
} | ||||||
|
||||||
} | ||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,144 @@ | ||||||||||||||
using UnityEngine; | ||||||||||||||
using System.Collections; | ||||||||||||||
using UnityEngine.UI; | ||||||||||||||
using UnityEngine.SceneManagement; | ||||||||||||||
|
||||||||||||||
|
||||||||||||||
public class Gamemanager : MonoBehaviour | ||||||||||||||
{ | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. C#에서 클래스 이름은 Pascal Case로 지어야 합니다. 변수 명명 형식에 대해서는 링크를 달겠습니다. |
||||||||||||||
public int totalPoint; | ||||||||||||||
public int stagePoint; | ||||||||||||||
public int stageIndex; | ||||||||||||||
public int health; | ||||||||||||||
public int HpPoint; | ||||||||||||||
|
||||||||||||||
public playermove player; | ||||||||||||||
public Image[] UIHp; | ||||||||||||||
public Text UIPoint; | ||||||||||||||
public GameObject UIRestartBtn; | ||||||||||||||
|
||||||||||||||
public GameObject UIContinueBtn; | ||||||||||||||
public GameObject UIEndBtn; | ||||||||||||||
public GameObject Menu; | ||||||||||||||
public GameObject Tutorial; | ||||||||||||||
public GameObject MainStage; | ||||||||||||||
|
||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 변수 이름을 지을 때 명명 스타일을 만들어서 지켰으면 합니다. 변수마다 이름 형식이 제각각이라 의미를 알아보기 어렵습니다. |
||||||||||||||
|
||||||||||||||
void Awake(){ | ||||||||||||||
health =3; | ||||||||||||||
UIHp[3].color = new Color(0,0,0,0); | ||||||||||||||
UIHp[4].color = new Color(0,0,0,0); | ||||||||||||||
UIHp[5].color = new Color(0,0,0,0); | ||||||||||||||
UIHp[6].color = new Color(0,0,0,0); | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Color 클래스에 Color.clear 라는 (0,0,0,0)값의 정적변수가 있습니다. private readonly emptyColor = new Color(0,0,0,0);
...
UIHp[6].color = emptyColor; 같이 변수로 명시해서 쓰는게 좋습니다. 변수를 애용합시다. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @tyrosine1153 제안해주신 부분에 대해서, 상수로 쓰이는 readonly 의 경우는 static을 붙여주는 것이 좋습니다. 또. private static readonly EmptyColor = new Color(0,0,0,0);
or
private Const EmptyColor = new Color(0,0,0,0);
...
UIHp[6].color = EmptyColor; |
||||||||||||||
health=HpPoint; | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
void Update() { | ||||||||||||||
//점수 표시 | ||||||||||||||
UIPoint.text = (totalPoint + stagePoint).ToString(); | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
보간 문자열을 아십니까? 위와 같이 처리할 수 있습니다. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||||||
|
||||||||||||||
//메뉴 | ||||||||||||||
if(Input.GetButtonDown("Cancel")) | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 여기서 쓰이고 있는 |
||||||||||||||
{ | ||||||||||||||
if(Menu.activeSelf) | ||||||||||||||
{ | ||||||||||||||
Menu.SetActive(false); | ||||||||||||||
} | ||||||||||||||
else | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. if문에 들어가는 Menu.activeSelf도 bool 값이니까 if(Menu.activeSelf)
{
Menu.SetActive(false);
}
else
{
Menu.SetActive(true);
} 같은건 Menu.SetActive(!Menu.activeSelf); 같은 한줄로 정리할 수 있습니다. |
||||||||||||||
{ | ||||||||||||||
Menu.SetActive(true); | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
} | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
|
||||||||||||||
|
||||||||||||||
|
||||||||||||||
public void NextStage(){ | ||||||||||||||
Tutorial.SetActive(false); | ||||||||||||||
stageIndex++; | ||||||||||||||
MainStage.SetActive(true); | ||||||||||||||
PlayerRespawn(); | ||||||||||||||
|
||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. vs code 코드 정렬 단축키는 |
||||||||||||||
|
||||||||||||||
totalPoint += stagePoint; | ||||||||||||||
stagePoint = 0; | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
|
||||||||||||||
//목숨 7개 아이템 먹음 | ||||||||||||||
public void UpHealth(){ | ||||||||||||||
HpPoint =7; | ||||||||||||||
health=HpPoint; | ||||||||||||||
UIHp[0].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[1].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[2].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[3].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[4].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[5].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[6].color = new Color(1,1,1,1); | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 반복문을 사용합시다. 변수를 사용합시다. for(int i = 0; i < 7; i++)
UIHp[i].color = Color.Clear; |
||||||||||||||
|
||||||||||||||
} | ||||||||||||||
|
||||||||||||||
public void HealthDown(){ | ||||||||||||||
if(health > 1){ | ||||||||||||||
--health; | ||||||||||||||
UIHp[health].color = new Color(1,0,0,0.4f); | ||||||||||||||
} | ||||||||||||||
else{ | ||||||||||||||
//플레이어 죽음 | ||||||||||||||
--health; | ||||||||||||||
UIHp[health].color = new Color(1,0,0,0.4f); | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 다른 if문과 중복되는 내용이 있다면 따로 빼주는 것도 좋습니다. |
||||||||||||||
player.Ondie(); | ||||||||||||||
//Result UI | ||||||||||||||
Debug.Log("UI 죽음 표시"); | ||||||||||||||
//Retry Button UI | ||||||||||||||
UIRestartBtn.SetActive(true); | ||||||||||||||
Text btnText = UIRestartBtn.GetComponentInChildren<Text>(); | ||||||||||||||
} | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
//HP 회복 아이템 먹음 | ||||||||||||||
public void HealthUp(){ | ||||||||||||||
health = HpPoint; | ||||||||||||||
UIHp[0].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[1].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[2].color = new Color(1,1,1,1); | ||||||||||||||
if(HpPoint==7){ | ||||||||||||||
UIHp[3].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[4].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[5].color = new Color(1,1,1,1); | ||||||||||||||
UIHp[6].color = new Color(1,1,1,1); | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
} | ||||||||||||||
|
||||||||||||||
public void Restart(){ | ||||||||||||||
SceneManager.LoadScene(0); | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
void OnTriggerEnter2D(Collider2D collision) { | ||||||||||||||
//플레이어 떨어짐 | ||||||||||||||
if(collision.gameObject.tag == "Player"||collision.gameObject.tag =="playerdameged"){ | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 태그마다 명명 형식이 다르네요. 통일하는 것이 좋습니다. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||
HealthDown(); | ||||||||||||||
if(health >= 1){ | ||||||||||||||
collision.attachedRigidbody.velocity = Vector2.zero; | ||||||||||||||
collision.transform.position = new Vector3(-5,6,0); | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||||||||||
} | ||||||||||||||
|
||||||||||||||
} | ||||||||||||||
|
||||||||||||||
//player Reposition | ||||||||||||||
|
||||||||||||||
} | ||||||||||||||
public void GameExit() | ||||||||||||||
{ | ||||||||||||||
Application.Quit(); | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||
} | ||||||||||||||
|
||||||||||||||
void PlayerRespawn(){ | ||||||||||||||
player.transform.position = new Vector3(-5,6,0); | ||||||||||||||
player.VeloccityZero(); | ||||||||||||||
} | ||||||||||||||
} |
Original file line number | Diff line number | Diff line change | ||
---|---|---|---|---|
@@ -0,0 +1,60 @@ | ||||
using System.Collections; | ||||
using System.Collections.Generic; | ||||
using UnityEngine; | ||||
using UnityEngine.SceneManagement; | ||||
public class canscript : MonoBehaviour | ||||
|
||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
여기에 공백은 왜 있는 건가요...? |
||||
{ | ||||
Animator anim; | ||||
Vector3 movement; | ||||
Rigidbody2D rigid; | ||||
SpriteRenderer spriteRenderer; | ||||
BoxCollider2D boxcollider; | ||||
public GameObject player; | ||||
|
||||
public AudioClip DioItem; | ||||
AudioSource audioSource; | ||||
|
||||
float canMoveX = -150; | ||||
float canMoveY = 84; | ||||
|
||||
|
||||
|
||||
void EatCan(){ | ||||
canMoveX = -90; | ||||
canMoveY = 260; | ||||
} | ||||
|
||||
void Awake() | ||||
{ | ||||
rigid = GetComponent<Rigidbody2D>(); | ||||
anim = GetComponent<Animator>(); | ||||
spriteRenderer = GetComponent<SpriteRenderer>(); | ||||
boxcollider = GetComponent<BoxCollider2D>(); | ||||
player = GameObject.Find("player"); | ||||
this.audioSource=GetComponent<AudioSource>(); | ||||
} | ||||
|
||||
void PlaySound(string action) { | ||||
switch(action){ | ||||
case "ITEM": | ||||
audioSource.clip = DioItem; | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 음악 실행을 여러 스크립트에서 실행하고 있네요. 음악 실행만 해주는 스크립트를 하나 만들어서 사용하는 것이 나중에 스크립트가 많아지거나 코드를 편집할 때 편리합니다. |
||||
break; | ||||
} | ||||
audioSource.Play(); | ||||
|
||||
} | ||||
|
||||
public void gone(){ | ||||
EatCan(); | ||||
PlaySound("ITEM"); | ||||
} | ||||
|
||||
void OnTriggerEnter2D(Collider2D collision) { | ||||
//플레이어 떨어짐 | ||||
transform.position = new Vector3(canMoveX,canMoveY,-1); | ||||
|
||||
} | ||||
} | ||||
|
||||
|
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,116 @@ | ||||||
using System.Collections; | ||||||
using System.Collections.Generic; | ||||||
using UnityEngine; | ||||||
using UnityEngine.SceneManagement; | ||||||
|
||||||
public class mousemove : MonoBehaviour | ||||||
{ | ||||||
public float movePower = 1f; | ||||||
public int nextMove; | ||||||
public float StandBy; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 유니티 에디터에서 입력하기 위해서 public변수를 사용하는 거라면 [SerializeField] private를 대신 사용해 보세요. private처리가 되지만 유니티 에디터에서 읽고 쓰기가 가능해서 보안에 좋습니다. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @tyrosine1153 우리는 이것을 보안이 아닌 '캡슐화' 라고 하기로 했습니다. 어차피 메모리 뜯으면 다 나오는 정보라서 보안보다는 캡슐화의 개념에 더 가깝습니다. |
||||||
Animator anim; | ||||||
Vector3 movement; | ||||||
Rigidbody2D rigid; | ||||||
SpriteRenderer spriteRenderer; | ||||||
BoxCollider2D boxcollider; | ||||||
|
||||||
|
||||||
void Awake() | ||||||
{ | ||||||
gameObject.SetActive(false); | ||||||
rigid = GetComponent<Rigidbody2D>(); | ||||||
Invoke("Think", 5); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 해당 Invoke 메소드의 경우 유니티 내에서 부하를 상당히 많이 잡아먹는 방식인데, 유니티에서 지원하는 Coroutine을 이용하면 훨씬 가벼운 지연 실행 처리가 가능한데, 이를 확장성있게 개발하는 방식에 대해서는 직접 C#과 Unity를 깊게 공부하는 것을 추천합니다. |
||||||
anim = GetComponent<Animator>(); | ||||||
spriteRenderer = GetComponent<SpriteRenderer>(); | ||||||
boxcollider = GetComponent<BoxCollider2D>(); | ||||||
Invoke("start",StandBy); | ||||||
} | ||||||
|
||||||
void Update() | ||||||
{ | ||||||
float h = nextMove; | ||||||
|
||||||
//움직임 애니메이션 | ||||||
if(h>0||h<0){ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||
anim.SetBool("moving", true); | ||||||
} | ||||||
else{ | ||||||
anim.SetBool("moving", false); | ||||||
} | ||||||
|
||||||
|
||||||
|
||||||
} | ||||||
|
||||||
|
||||||
void FixedUpdate() | ||||||
{ | ||||||
rigid.velocity = new Vector2(nextMove*movePower, rigid.velocity.y); | ||||||
|
||||||
//낭떠러지 감지 | ||||||
Vector2 frontVec = new Vector2(rigid.position.x + nextMove*0.5f , rigid.position.y - 0.5f); | ||||||
Debug.DrawRay(frontVec, Vector3.down, new Color(0, 1, 0)); | ||||||
RaycastHit2D rayHit = Physics2D.Raycast(frontVec, Vector3.down, 1, LayerMask.GetMask("Platform")); | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. frontVec, rayHit과 같이 변수로 따로 선언해서 사용하는 부분 좋습니다. |
||||||
if(rayHit.collider == null){ | ||||||
Turn(); | ||||||
} | ||||||
} | ||||||
|
||||||
void OnCollisionEnter2D(Collision2D collision){ | ||||||
if(collision.gameObject.tag == "Enemy"){ | ||||||
Turn(); | ||||||
} | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||
} | ||||||
|
||||||
|
||||||
//재귀 함수 | ||||||
void Think(){ | ||||||
nextMove = Random.Range(-1, 2); | ||||||
|
||||||
float nextThinkTime = Random.Range(1f,3f); | ||||||
|
||||||
Invoke("Think", nextThinkTime); | ||||||
|
||||||
//방향 | ||||||
if(nextMove != 0){ | ||||||
spriteRenderer.flipX = nextMove == 1; | ||||||
} | ||||||
|
||||||
} | ||||||
|
||||||
void Turn(){ | ||||||
nextMove = nextMove * -1; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||
spriteRenderer.flipX = nextMove == 1; | ||||||
|
||||||
if(spriteRenderer.flipY != true){ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
bool 형식에는 굳이 비교연산자를 쓸 필요가 없답니다. |
||||||
CancelInvoke(); | ||||||
} | ||||||
|
||||||
Invoke("Think", 2); | ||||||
} | ||||||
|
||||||
public void OnDamaged(){ | ||||||
//죽음 | ||||||
Debug.Log("전달"); | ||||||
|
||||||
spriteRenderer.color = new Color(1,1,1,0.4f); | ||||||
|
||||||
spriteRenderer.flipY = true; | ||||||
|
||||||
boxcollider.enabled = false; | ||||||
|
||||||
rigid.AddForce(Vector2.up * 5, ForceMode2D.Impulse); | ||||||
|
||||||
Invoke("DeActive", 3); | ||||||
} | ||||||
|
||||||
void DeActive(){ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 과한 기능입니다. |
||||||
gameObject.SetActive(false); | ||||||
} | ||||||
|
||||||
void start(){ | ||||||
gameObject.SetActive(true); | ||||||
} | ||||||
|
||||||
|
||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이름을 보고 뭘 하는 스크립트인지 이해하기 어렵습니다.
설명해 주신 대로 BGM을 관리하는 스크립트라면 BGMManager와 같이 스크립트에서 다루는 것과 작업이 나오도록 명명해주시면 좋을 것 같네요.