한 걸음 두 걸음
Unity ] Ray 선 (Script함수 활용) DrawRay / RaycastHit 등 이벤트처리 본문
선 만들기
선을 생성하려면 두 점을 알아고 색깔을 정해주어야한다.
점은 Vector3이다.
예시 Vector3 point = new Vector3(0,0,0);
Debug.DrawRay(point1, point2, color.red)
이에 따라 아래처럼 만들어주었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ray : MonoBehaviour
{
Vector3 point1 = new Vector3(0, 0, 0);
Vector3 point2 = new Vector3(100, 0, 0);
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Debug.DrawRay(point1, point2, Color.red);
}
}
결과
여기서 도형을 따라 ray가 움직이게 하고 싶다면, transform.position을 point 대신 사용해주면 된다.
void Update()
{
Debug.DrawRay(transform.position, point2, Color.red);
}
이제 ray를 쏴서 player가 target을 제거할 것임! -> raycast와 rayCastHit를 알아야한다.(찾아냄)
Physics.Raycast는 물리적으로 닿는지 확인하는 함수이다.
이러한 raycasthit을 이용해서
ray에 닿는 충돌체를 setActive(false)시켜주는 코드를 짜보자면,
(setActive는 gameObject안에 있으니,)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ray : MonoBehaviour
{
Vector3 point1 = new Vector3(0, 0, 0);
Vector3 point2 = Vector3.right * 100; /*new Vector3(100, 0, 0);*/
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
RaycastHit hitinfo;
Debug.Log(point2);
Debug.DrawRay(transform.position, point2, Color.red);
if (Physics.Raycast(transform.position, point2, out hitinfo))
{
Debug.Log("충돌객체 있음");
hitinfo.collider.gameObject.SetActive(false);
}
}
}
이런식으로 hitinfo내에 gameObject로 갈 수 있는 경로를 찾아가봄! 그래서 setActive를 사용할 수 있었다. //찾아가는 연습을 한 거에요
짠~ 닿았더니 사라짐ㅎㅎ
그리고 이제
닿으면 회전하도록 만들기
// Update is called once per frame
void Update()
{
RaycastHit hitinfo;
Debug.Log(point2);
Debug.DrawRay(transform.position, point2, Color.red);
if (Physics.Raycast(transform.position, point2, out hitinfo))
{
Debug.Log("충돌객체 있음");
hitinfo.transform.Rotate(Time.deltaTime * 45, Time.deltaTime * 45, Time.deltaTime * 45);
//hitinfo.collider.gameObject.SetActive(false);
}
}
이런식으로 hitinfo내의 transform.Rotate를 사용해서
닿았을 때 사라지지 않고 뺑글뺑글 돌도록 설정해주었음 : )!!
추가) 큐브에 닿으면 회전하지않고, 캡슐(tag : target)에 닿을 때 회전하는 것을 만들어주자!
캡슐에 target Tag입력 후
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ray : MonoBehaviour
{
Vector3 point1 = new Vector3(0, 0, 0);
Vector3 point2 = Vector3.right * 100; /*new Vector3(100, 0, 0);*/
RaycastHit hitinfo;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//RaycastHit hitinfo;
Debug.Log(point2);
Debug.DrawRay(transform.position, point2, Color.red);
if (Physics.Raycast(transform.position, point2, out hitinfo))
{
Debug.Log("충돌객체 있음");
if(hitinfo.collider.tag == "target")
hitinfo.transform.Rotate(Time.deltaTime * 45, Time.deltaTime * 45, Time.deltaTime * 45);
//hitinfo.collider.gameObject.SetActive(false);
}
}
}
Physic RayCast의 반환값은 boolean이다. 충돌이 일어났을 때 정보를 가져오는 API를 사용했음!
이렇게 처음 닿는 부분이 cube이면 움직이지 않고, capsule이면 움직인다.
이제 player안에
collider 컴포넌트를 없애주었으므로 충돌관련해서 신경을 쓰지 않는다.
sphere(RayPoint) 방향으로 나아간다는 것을 표시해주었으므로 drawLine을 없애주어도 된다.
그러면 빨간 점 방향으로 가는 곳에 캡슐이 있으면 돌아용~
'Unity' 카테고리의 다른 글
유니티] ACI 이론 & 애니메이션 이벤트 (0) | 2019.01.28 |
---|---|
유니티 특강 Day5 ] ray이벤트처리 / Video 비디오 및 전환/ insideout (0) | 2019.01.25 |
unity 유니티 ] NaviMeshAgent으로 네비게이션 사용하기 (0) | 2019.01.24 |
unity 유니티 ] Text bestfit 이용하기 (0) | 2019.01.24 |
Unity 유니티 ] Effect 설정하기 (particel System) + asset store 이용하기 (0) | 2019.01.24 |