using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cPlayerHP : MonoBehaviour
{
public GameObject HpObj;
public float maxHP = 100; //최대 HP
public float currentHP = 100; //현재 HP
// Update is called once per frame
void Update()
{
if (Input.GetButton("Horizontal")
|| Input.GetButton("Vertical"))
//만약 Horizontal과 Vertical에 해당하는 키를 눌렀다면
{
float inputX = Input.GetAxis("Horizontal");
float inputY = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(inputX, inputY, 0);
transform.Translate(movement.normalized * 5 * Time.deltaTime);
//이동시켜줌
}
if (Input.GetKey(KeyCode.Return))
{
currentHP -= 0.1f; //HP 20 차감
HpObj.transform.localScale = new Vector3(currentHP / maxHP, 1, 1);
}
if (currentHP <= 0)
{
gameObject.SetActive(false);
}
}
}
HP 바를 만들 예정이다.
PlayerHP를 만들고, 큐브를 하나 만들어준다.
큐브 리셋 후, 스케일 1, 0.1, 0.1 로 만들어준다. (HP바로 쓸 예정임)
프로젝트 -> 크리에이트 -> 메테리얼 -> 이름을 레드 -> 색깔은 붉은색으로 한 후 큐브에 넣어줌
크리에이트 엠띠 -> 포지션 -.5 0 0 , 0 0 0 1 1 1 (HP바 왼쪽에 위치하도록)
게임오브젝트 안에 큐브를 넣어준다 하이라이키에서
하이라이키의 캡슐 하나 만든 후 초기화,
빈 게임 오브젝트를 캡슐 위에 올려넣어서 캡슐 위에 뜨게끔 한다.
캡슐에다가 빈 오브젝트를 넣고, 스크립트도 넣어준다. 큐브 하나를 넣고 스케일을 0.1,0.1해준다.
왼쪽 끝에 맞춰주고 다시 오브젝 안에 큐브를 넣고, 캡슐 만들고 겜오브젝트를 다시 넣는다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//UI의 Image를 사용하기 위해선 써주어야함
public class cUIHP : MonoBehaviour
{
public GameObject Cam; //메인카메라
public Image hpBar; //HP바 이미지
public float maxHP = 100; //최대 HP
public float currentHP = 100; //현재 HP
void Start()
{
hpBar.fillAmount = 1;
//fillAmount를 사용하기 위해서는
//Image Type을 Filled로 바꿔주어야함
}
void Update()
{
if (currentHP <= 0)
//현재 Hp가 0이하라면
{
gameObject.SetActive(false);
//플레이어 비활성화
}
if (Input.GetKey(KeyCode.Return))
{
StartCoroutine("CamShake"); //흔들리는 카메라
currentHP -= 0.1f; //HP 20 차감
hpBar.fillAmount = currentHP / maxHP;
}
}
IEnumerator CamShake() //카메라 흔들기
{
for (int i = 0; i < 2; i++)
{
Cam.transform.position -=
new Vector3(0.2f, 0.1f, 0);
yield return null;
//한 프레임 대기후 다음 명령문 실행
Cam.transform.position +=
new Vector3(0.4f, 0.1f, 0);
yield return null;
Cam.transform.position -=
new Vector3(0.3f, 0.1f, 0);
yield return null;
Cam.transform.position +=
new Vector3(0.1f, 0.1f, 0);
}
}
}
cUIHP 스크립트를 만들고 HP 이미지를 다운받아 유니티 프로젝트에 넣어준다
이미지를 눌러준 다음 텍스처 타잎을 스프라이트 투디엔 UI로 바꾸고 어플리를 하면 사용할 수 있다.
하이라키 크리에이트 ui 이미지 소드 이미지 부분을 하얀색 HP를 넣어준다.
하얀색 이미지를 쥐드스를 150 하이트를 30으로 넣어준다.
이 이미지의 이름을 backhp로 한다.
클릭하고 컨트롤 D를 누르면 복제가 된다.
복제한걸 HP로 만들어주고, 소스에다가 빨간색 이미지를 넣어준다.
이미지 오브젝트로 가서 이미지 타입을 필드,힐 메소드를 호리젠탈로 바꿔준다.
캡슐에다가 CUI스크립트를 넣어준다.
실행 후 엔터를 누르면 빨간색 HP 바가 줄어든다.
캡슐 안에 플레이어 에이치피는 게임오브젝트를 넣어준다.
하이라이키 -> 큐브
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cDistance : MonoBehaviour
{
public GameObject Player;
void Update()
{
//Vector3.Distance : 두 물체의 거리를 파악
if (Vector3.Distance(Player.transform.position,
transform.position) < 5.0f)
{
if (Vector3.Distance(Player.transform.position,
transform.position) > 0.8f)
{
transform.Translate((Player.transform.position
- transform.position) * 1 * Time.deltaTime);
//목표위치 - 현재위치 = 목표지점의 방향
}
}
}
}
cDistance 를 만들어 큐브에 넣고, 큐브 안의 cDistance에 캡슐을 넣는다.
노말라이즈드를 넣어 하면 속도가 일정해진다.
cQuit를 만들고, (종료하는법), 일단 아무 오브젝에 넣어야할듯
빌드하고 exe 파일을 실행하면 된다.
여기서는 종료가 먹힌다.
그리고 c터치를 만든다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class cTouch : MonoBehaviour
{
public Text txt;
private void Update()
{
if (Input.touchCount > 0) //손가락 터치가 1개 이상인 경우
{
//손가락 터치 구조체로 입력받기
Touch touch = Input.GetTouch(0); //첫번째 손가락 터치
Touch touch2 = Input.GetTouch(1); //두번째 손가락 터치
Touch touch3 = Input.GetTouch(2); //세번째 손가락 터치
//터치의 단계
if (touch.phase == TouchPhase.Began)
{
//터치가 시작된 경우
Debug.Log("첫번쨰 터치 시작! TouchPhase.Began");
txt.text = "첫번째 터치 시작! TouchPhase.Began";
}
if (touch.phase == TouchPhase.Moved)
{
//터치된 손가락이 움직인 경우
Debug.Log("터치 드래그중! TouchPhase.Moved");
txt.text = "터치 드래그중! TouchPhase.Moved";
}
if (touch.phase == TouchPhase.Stationary)
{
//터치된 손가락이 터치 후 가만히 있는 경우
Debug.Log("터치 멈춤! TouchPhase.Stationary");
txt.text = "터치 멈춤! TouchPhase.Stationary";
}
if (touch.phase == TouchPhase.Ended)
{
//터치가 끝난 경우
Debug.Log("터치 종료! TouchPhase.Ended");
txt.text = "터치 종료! TouchPhase.Ended";
}
if (touch.phase == TouchPhase.Canceled)
{
//사용자가 얼굴에 터치했거나 5개 초과의 터치가 한번에 일어난 경우
Debug.Log("터치 종료! TouchPhase.Canceled");
txt.text = "터치 종료! TouchPhase.Canceled";
}
}
if (Input.GetKey(KeyCode.Home))
{
Debug.Log("홈버튼");
txt.text = "홈버튼";
}
if (Input.GetKey(KeyCode.Escape))
{
Debug.Log("뒤로가기");
txt.text = "뒤로가기";
}
if (Input.GetKey(KeyCode.Menu))
{
Debug.Log("메뉴버튼");
txt.text = "메뉴버튼";
}
}
}
터치입력하는 스크립트를 작성하고
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cJump : MonoBehaviour
{
Rigidbody rig;
// Start is called before the first frame update
void Start()
{
rig = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rig.AddForce(new Vector3(0, 200, 0));
}
}
}
라는 스크립트를 작성한다.
씬 폴더에 씬을 하나 만들어준다.
크리에이트 -> 씬 하나 만듬
쓰리디 오브젝트의 플랜 하나 만든다. 큐브도 하나 만든다. 리셋을 한다
큐브에 리지드바디 컴퍼넌트를 넣어준다. 그리고 큐브에 씨점프를 넣어준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cJump : MonoBehaviour
{
Rigidbody rig;
// Start is called before the first frame update
void Start()
{
rig = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rig.AddForce(new Vector3(0, 200, 0));
}
}
}
씨점프는 스페이스바 누를 경우에 점프고 중력이 적용된다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cMove : MonoBehaviour
{
void Update()
{
if (Input.GetButton("Horizontal")
|| Input.GetButton("Vertical"))
//만약 Horizontal과 Vertical에 해당하는 키를 눌렀다면
{
float inputX = Input.GetAxis("Horizontal");
float inputZ = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(inputX, 0, inputZ);
transform.Translate(movement.normalized * 5 * Time.deltaTime);
//이동시켜줌
}
}
}
그 다음 씨무브를 만들고 실린더를 하나 만든다.
그 다음 실린더를 하나 만든다. 실린더에 포지션을 2,1,2
실린더에도 리지드바디 컴퍼넌트를 넣어준다.
원하는건 실린더와 상자가 통과가 되면서도 통과가 되야하는데...
큐브에 에드 레이어를 한다.
비어있는 공간에 한게는 플레이어 , 하나는 에너미를 적는다. 그 후 큐브의 레이어는 플레이어
실린더는 에너미
에딧에 프로젝트 세팅을 한번 킨다-> 피직스를 한번 누른 후 아래를 보면 레이어들이 있다.
에너미랑 플레이어가 만나는 부분을 체크 해제하면 물리적 효과를 제거한다
이렇게하면 이즈트리거는 하지 않아도 통과가 된다.
씨레이 무브를 만든다.
큐브에다가 씨레이무브를 넣는다. 그리고 빈 오브젝트를 만들고 tr에다가 넣는다
그리고 플렌에다가 웰이라는 테그를 넣는다. (add 태그)
그리고 마우스로 클릭하면 이동한다.
씨 게임 매니저를 만들자. 가위바위보를 할것.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//UI관련 스크립트 사용시 써주어야함
public class cGameManager : MonoBehaviour
{
public GameObject objYou;
public GameObject objCom;
public Text Check; //이겼는지 졌는지 체크
int You; //가위 : 1, 바위, : 2, 보 : 3
int Com; //가위 : 1, 바위, : 2, 보 : 3
// Start is called before the first frame update
void Start()
{
You = 0;
Com = 0;
}
void CheckScore()
{
Com = Random.Range(1, 4); //컴퓨터에는 1~3까지의 난수가 들어감
objCom.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("Game_" + Com);
//Resurces.Load() 로 이미지를 불러옴
objYou.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("Game_" + You);
int k = You - Com;
if (k == 0)
{
Check.text = "비겼습니다";
}
else if (k == 1 || k == -2)
{
Check.text = "이겼습니다";
}
else
{
Check.text = "졌습니다.";
}
}
public void Gawi()
{
You = 1;
CheckScore();
}
public void Bawi()
{
You = 2;
CheckScore();
}
public void Bo()
{
You = 3;
CheckScore();
}
}
가위바위보를 짠 후, 스크립트 생성. 씬을 하나 만들고, 리소스 폴더에 가위바위보 이미지를 넣자.
가위 이미지를 하나 올린다.
포지는 -5 0 0
로테 0 0 90
스케일 2 2 1
그렇게 youobj으로 이름 바꾸고 복사 후 comobj를 만들고 거리를 띄어주자.
버튼을 하나 만들자. 버튼은 gawbtn, bawbtn으로 만든다. bowbtn도 만들고 택스트도 바꿔주고 위치를 변경해주자.
ui->텍스트도 만들고 체크텍스트라 명칭하고 하나 만든다.
글자 크기를 30 호리젠탈 오버플로 버티칼 오버플로를 둘 다 오버플로
그리고 빈오브젝틀르 만들고 게임매니저를 하나 만들어준다. 게임매니저에 씨게임매니저를 넣어준다.
그리고 오브젝이랑 텍스트를 넣어준다.
가위btm에 온클릭에 게임매니저 "오브젝트"를 넣고, 펑션을 각각 버튼에 맞는 펑션을 선택해준다.
그러면 실행하면 된다.
댓글