지난 게시글로 데모 완성했던 게임을 보여드렸습니다 !
도움이 되실만한 코드를 업로드합니다.
(변수이름은 규칙성 없이 대충 지었으니 감안 하고 봐주세요 ㅠㅠ !)
💨ItemScript
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemScript : MonoBehaviour
{
public float Speed = 1.0f;
public float speed = 1.0f;
private float startTime;
private float journeyLength;
void Start()
{
startTime = Time.time;
journeyLength = Vector3.Distance(transform.position, new Vector3(transform.position.x, -1, transform.position.z));
}
void Update()
{
if(this.gameObject.activeInHierarchy)
{
transform.position = new Vector2(transform.position.x,
transform.position.y - Speed * Time.deltaTime);
float distCovered = (Time.time - startTime) * speed;
float fractionOfJourney = distCovered / journeyLength;
transform.position = Vector3.Lerp(transform.position, new Vector3(transform.position.x, -1, transform.position.z), fractionOfJourney);
}
}
}
장갑 아이템이 activeInHierarchy 되면 (활성화 되면)
위에서 아래로 부드럽게 이동하는 코드입니다.
ButtonScript
public class ButtonScirpt : MonoBehaviour
{
public bool isRotate = false;
OneScene one;
public float duration = 2f;
private float startRotation; //z축을 Start에서 end까지
private float endRotation = 360f;
private float t = 0f;
public GameObject Item;
void Start()
{
one = FindObjectOfType<OneScene>().GetComponent<OneScene>();
}
void Update()
{
if(one.isLine)
{
t += Time.deltaTime / duration;
transform.rotation = Quaternion.Euler(0, 0,
Mathf.Lerp(startRotation, endRotation, t));
Invoke("isbool",2f);
}
}
void isbool()
{
isRotate = true;
Item.SetActive(true);
}
}
누르면 360도 회전하는 코드입니다.
조건이 필요했는데 여기서 쓰인 조건은
if(one.isLine) 이란 조건입니다.
Start에 스크립트를 불러와서
isLine이란 bool값이 true이면 실행하는 코드는
360도 회전 코드입니다.
그리고 회전하는 동안에 Invoke로 2초를 기다리게 한다음에
아이템을 활성화 시키는 함수를 호출 했는데요.
때문에 버튼이 다 돌아가면 아이템이 나오는 듯 한
효과를 보였습니다.. 하하
OneScene
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class OneScene : MonoBehaviour
{
public Text dialogueText;
public Text dialogueText1;
public GameObject Button1;
public GameObject Button2;
public GameObject Item;
[TextArea]
public string[] dialogueLines;
private int currentLine = 0;
[TextArea]
public string[] dialogueLines1;
private int currentLine1 = 0;
ButtonScirpt buttonScirpt;
public bool isLine = false;
public bool isLine_4 = false;
void Awake()
{
currentLine = 0;
dialogueText.text = dialogueLines[currentLine];
dialogueText1.text = dialogueLines1[currentLine1];
buttonScirpt = FindObjectOfType<ButtonScirpt>().GetComponent<ButtonScirpt>();
}
public void Next()
{
currentLine++;
if(currentLine == dialogueLines.Length)//모든 대화 종료시
{
Button1.SetActive(false);
dialogueText.gameObject.SetActive(false);
Button2.SetActive(true);
}
else
{
dialogueText.text = dialogueLines[currentLine];
}
}
public void Next1()
{
currentLine1++;
if(currentLine1 == dialogueLines1.Length)
{
dialogueText1.gameObject.SetActive(false);
}
else
{
dialogueText1.text = dialogueLines1[currentLine1];
}
if(currentLine1 == 4)
{
isLine_4 = true;
}
}
public void Update()
{
if(buttonScirpt.isRotate)
{
dialogueText1.gameObject.SetActive(true);
}
if(Input.GetMouseButtonDown(0) && !dialogueText.gameObject.activeInHierarchy)
{
isLine = true;
}
if(Input.GetMouseButtonDown(0) && isLine_4)
{
Invoke("SceneChange",1f);
}
}
void SceneChange()
{
SceneManager.LoadScene(1);
}
}
저번에 리스트 사용하는 방법에 올린 게시글에서
쓰인 코드를 참고하였고
Next와 Next1은 각각 버튼에 넣어주었습니다.
Next안에 있는 List가 종료되면 그 text 오브젝트를 active flase가 되도록 하였고
그랬을때 마우스 버튼을 누르면
isLine이 true가 되어 윗 코드를 실행 시키는 코드입니다.
적과 플레이어 코드는..
실패나 다름 없기 때문에 업로드 하지 않겠습니다.
하지만 대충 이런 식으로 작성해보려 했습니다.
1.플레이어가 키를 누르면 collider가 활성화된다.
2. 그 collider와 적과 닿으면 적이 SetActive = false 된다.
3. 만약 적이 collider에 닿지 않고 플레이어를 지나친다면 player의 hp가 깎인뒤 적은 SetActive = false된다.
이런 구조로 하려했으나 판정도 그렇고.. 하하 마음에 들지 않네요.
전체적인
코드를 보시면 아시겠지만 꼼수입니다. 하하
코딩실력이 확 늘진 않지만 그래도 이제는 익숙하게 사용할수 있는 것들이 천천히 늘어가고 있습니다.
더군다나 요즘은 aI의 발전이 점점 가속화 되어가고 있으니
이제는 그것을 어떻게 사용하는가가 더 중요해 진것 같습니다.
저도 시대의 뒤쳐지지 않게 더 노력해야겠습니다.
하지만 작년보다는 집중할수 있는 시간이 많이 없습니다..
개발을 하기 위해서는 따른 일을 또 해야했으며
보다 완성도 높은 게임을 만들기 위해서는 많은 시간적 금전적 투자가 필요하며
그에 따른 실력이 필요하기 때문에 (그림,음악,기획 능력등)
지금은 그것을 천천히 쌓아올리는 과정이라고 생각합니다.
아직은 변수 이름도 제대로 짓는 방법도 모르는 초초초 주니어 개발자이지만..
꼭 제가 만든 게임으로 수익을 내 보고 싶네요 하하
부족한 실력이지만 모르는 것을 댓글 남겨주시면
빨리 답장해드리도록 하겠습니다.
글 읽어주셔서 감사합니다 !
'🧩 코딩 > 사용한 코드' 카테고리의 다른 글
유니티로 리깅 하기 ! 유니티와 포토샵으로 간편하게 애니메이션 만드는 방법. (0) | 2023.06.02 |
---|---|
JOPG 몬스터가 죽을때 회전하며 날라가는 코드 ! (0) | 2023.05.15 |
UNITY MBTI 테스트 앱 코드 / List 사용법 (0) | 2023.04.04 |
Unity2D 모바일 조이스틱을 이용한 움직임 코드 🏃♀️ Transform.localScale을 이용한 이미지 회전 (0) | 2022.10.20 |
우당탕탕 [ 피하기 게임 ] 코드 공유 / Random Range를 이용한 랜덤 오브젝트 생성 / 2D Player 움직임 코드 (2) | 2022.10.13 |