스파르타 코딩 클럽 유니티 1일차
주의 유니티초보반4주차 강의 내용을 알아야 할수 있음
같은 그림 카드 맞추기 게임의 일부
@@@@@@@@@
타임 패널티
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
gameObject.transform.SetParent(GameObject.Find("timeTxt").transform.parent);
// 텍스트 객체로 만들었는데 텍스트 객체는 캔버스 안에서만 표현될수 있다고 한다
폴더 위치를 지정 하는법을 몰랐기에 캔버스를 부모로 가진 timeTxt를 그대로 가져왔으나 바로 부모위치를 지정해줄수 있는방법이있을거라고 생각된다 실패한 코딩이라고 생각된다
parent를 처음 이용하였으나 parent 함수대신 setparent를 쓰는게 정석인듯하다 parent = ~~~.parent 로 사용되는데 이걸 그대로 () 안에 넣으면 된다 setparent로 사용하려한다
}
// Update is called once per frame
void Update()
{
transform.position += new Vector3(0.0f, 0.5f, 0.0f);
if (transform.position.y > 1100.0f)
{
Destroy(gameObject);
}
//시간의 -2초 를 표현 하는 오브젝트 처음 의도 당시 중력을 반대로 준다면 객체만 만들어주고 없애면 되지않을까?
라는 의도로 작성되었기에 스크립트를 만들지 않아보려시도 했다 허나 생성은 가능하나 위치를 변경해주기 위해 결국 만들어져 버렸다 가능한한 없애고 싶다
}
}
@@@@@@
게임매니저
@@@@@@@
public void SucStart()
{
successTxt.SetActive(true);
// 아래 부분을 따로 함수로 빼내야 했다고 생각한다 suc fail start end 시리즈 이나 이친구만 유독 길다
if (firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name == "rtan1" || firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name == "rtan2")
//코드 이름이 굉장히 길다 기존 코드를 거의 복사하다시피 가져다 써서 코드를 전혀 이해하지 못하였다 하지만 성공했다 코드를 해석하는게 필요함 , rtan이 기존이름이나 아마 우리 사진으로 바꾸기 위해 picture가 될듯 하다
{
realsucTxt.text = "성공\n이름";
}
else if (firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name == "rtan2" || firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name == "rtan3")
{
realsucTxt.text = "성공\n이름";
}
else if (firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name == "rtan4" || firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name == "rtan5")
{
realsucTxt.text = "성공\n이름";
}
else
{
realsucTxt.text = "성공\n이름";
}
realsucTxt.text = realsucTxt.text.Replace("\\n", "\n");
// \n이 먹히지 않아서 찾은방법 유니티에선 \n을 \\n으로 인식한다고 한다 리플레이스 즉 내용.text의 \\n을 \n으로 대체하였다
}
public void failStart()
{
failTxt.SetActive(true);
}
public void SucEnd()
{
successTxt.SetActive(false);
}
public void failEnd()
{
failTxt.SetActive(false);
}
public void Success()
{
SucStart();
Invoke("SucEnd", 1.0f);
}
public void fail()
{
failStart();
Invoke("failEnd", 1.0f);
}
// fail suc 시리즈는 강의내용의 카드 생성 삭제를 모티브로 만들었는데 강의를 보면서도 굳이저걸왜 2개씩만들지? 라고 생각했었는데 코드 작성도중 추측으로는 invoke를 1초뒤에 하기 위해 딜레이를 주기위해서로 판단됬다 (아마 확실함)
public void timepenalty()
{
Time.timeScale = 0f;
time= time-2f;
makeminus2();
Time.timeScale = 1f;
// 타임스케일을 건들지 않았을땐 시간이 바로2초가 되고 2초가 끝나기전에 실패를 더할시 다시 2초가됬엇는데 타임스케일을 멈추고 2초를 줄인후 1초로다시 바꿔주었다 작동은되나 문제가될 여지가 있어보인다
}
public void makeminus2()
{
float x = 500f;
float y = 1035f;
Instantiate(Tpenalty, new Vector3(x,y, 0), Quaternion.identity);
//gameObject.transform.parent = GameObject.Find("timeTxt").transform;
//위 주석 처리는 처음 패널티 스크립트를 만들지 않기위해 여기서 위치조정을 시도해보았으나 실패했다 남겨두는편이 의미있는듯 하여 남긴다 위치 조정은 ui창과 실제 필드에서의 위치가 달라서 햇갈리는 부분이있었다 ui와 게임세상?의 구별을 강의에서는 잘몰랐는데 아마 이런이유인듯하다
}