한 걸음 두 걸음
Day3 ACI 특강 ]텍스트오버라이드 / 버튼 이벤트/ Code 수정 회전하는 큐브객체 충돌 시 isTrigger false 및 setActive(false)설정 본문
Day3 ACI 특강 ]텍스트오버라이드 / 버튼 이벤트/ Code 수정 회전하는 큐브객체 충돌 시 isTrigger false 및 setActive(false)설정
언제나 변함없이 2019. 1. 23. 10:53텍스트 오버라이드 기능
글자가 그림을 침범하거나 넘어갈 때 아래 줄로 넘어가도록 함.
버튼 이벤트 추가해보기 (Transition)
버튼 만들어주고
일반컬러
하이라이트컬러 - 마우스를 갖다 댔을 때
프레스 - 버튼을 눌렀을 때를 각각 설정해준다.
색상지정 - 갖다댔을 때 핑크, 눌렀을 때 빨간색으로 변함!!
따로 이벤트 지정 안해도 그냥 되더라... 하여튼 이벤트도 상관없이 넣어보자.
버튼클릭 했을 때 이벤트 실행시키도록 하고싶으면
오른쪽하단에 있는 .. 아 동그라이 밑에 쳤는데 그 위에있음!
+버튼 눌러주면 새로운 on Click Listener가 생기는 것 같음!
거기에 Scene을 눌러서 만들어놓은 버튼을 지정해줌
그리고 해단 버튼의 noFunction을 눌러서 select이벤트를 추가해줄거라고 지정해줌.
그러면 아까와 마찬가지로 버튼 위에 커서를 댔을 때 or 추가했을 때 이벤트가 실행됨!
구가 큐브와 충돌이 나면 count : 1 이 되도록 만든다.
아까 만들어놓은 text : count 텍스트 옆에 변수 num을 추가해주어야한다.
: 숫자 - > 문자열로 바뀌어야함.
int num = 0~ 해놓고 onTriggerEnter함수 내에서 count++ 해준 후 문자열로 바꿔주는 ToString API를 사용해야한다.
이와같은 setCountText함수를 만들어서 if문 내 조건 충족시 호출되도록 만들어줍시다 : )
기존에 있던 코드 메모
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class BallController : MonoBehaviour
{
public float thrust = 100.0f;
public Rigidbody rb; //여기서 한 번 지정해주고나서, rb로 초기에 sphere를 넣어주었기 때문에
float horizontalSpeed = 20.0f;
float verticalSpeed = 20.0f;
//볼과 충돌되는 것들을 없애주는 메소드
private void OnTriggerEnter(Collider other) //이건 help에 주어진 함수를 사용하는 능력이에오.. 전문가의 영역은 잘 찾아서 적용시키는거에오..
{
if (other.gameObject.CompareTag("Box")) {
other.gameObject.SetActive(false);
}
}
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
Debug.Log(rb);
}
// Update is called once per frame
void Update()
{
float h = Time.deltaTime * horizontalSpeed * Input.GetAxis("Horizontal");
float v = Time.deltaTime * verticalSpeed * Input.GetAxis("Vertical");
//이렇게 Time.deltaTime 을 *곱해줘서 게임의 속도가 적절하도록 맞춰준다.
// Instantiate the projectile at the position and rotation of this transform
Vector3 forw = new Vector3(h, 0, v);
rb.AddForce(forw * thrust);
}
}
새로 넣을 코드 메모
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class BallController : MonoBehaviour
{
private float speed;
private Rigidbody rb;
public Text countText;
private int count;
// public Text winText;
void Start()
{
speed = 10;
rb = GetComponent<Rigidbody>();
count = 0;
SetCountText();
//winText.text = "";
}
void FixedUpdate()
{
float moveHorizontal = Input.GetAxis("Horizontal");
float moveVertical = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
rb.AddForce(movement * speed);
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Box"))
{
other.gameObject.SetActive(false);
count = count + 1;
SetCountText();
}
}
void SetCountText()
{
countText.text = "Count: " + count.ToString();
if (count >= 6)
{
// winText.text = "You Win!";
}
}
}
이를 통해 public Text countText를 새로 받게되었음. 그렇기에
winText는 그 다음에 해준거긴 한데, 일단 이렇게 새로 만들어진 Text값을 넣을
칸이 만들어졌으니 연결시켜주어야함.
물론 Find를 통해 코드상으로 자동연결되도록 하면 되긴 하지만, 그러면 나중에 컴포넌트
네임이 바뀔 때마다 코드 유지보수를 다시 해주어야하므로
드래그앤드랍으로 이루어지는게 간편하고 좋다.
다 클리어하면 you win!이 뜹니당~
프로그래밍할 때 노트에 적어놓는 것이 필요하다.... 나는 포스팅방식으로 하는듯 ^-^;
/*
인공눈물 어디뒀더라.. ㅠ-ㅠ
오빠보고싶따..ㄹ.ㄹㄴㅁㄴㄹ
*/