raycast를 이용한 picking.
마우스 L 클릭마다 큐브가 점프하도록.
노랑노랑 큐브들. 버터조각같네 ㅋㅋ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 |
using UnityEngine;
using System.Collections;
public class pickingBasic : MonoBehaviour {
void Update()
{
if (Input.GetMouseButton(0))
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, Mathf.Infinity))
{
if (hit.collider.gameObject.name == "Ground") return;
if (!hit.collider.gameObject.GetComponent<Rigidbody>())
{
hit.collider.gameObject.AddComponent<Rigidbody>();
}
//hit.collider.gameObject.GetComponent<Rigidbody>().AddForce(Camera.main.transform.up*1000f);
//카메라 좌표기준의 up이라서 카메라가 회전되어 있으면 카메라의 좌표계도 회전되어 포물선으로 날아간다
hit.collider.gameObject.GetComponent<Rigidbody>().AddForce(Vector3.up * 1000f);
//월드 좌표계 기준
}
}
}
}
|
cs |
Ray ray = 카메라 component.
ScreenPointToRay는
카메라가 보는 방향으로 선을 주욱 보내서 물체에 통과시키는데, 그 선이 물체가 움직이는 중심이다.
카메라가 비스듬히 회전되어 있으면 물체도 비스듬하게 간다.
카메라가 보는방향 = 물체가 보는방향.
ScreenPointToRay : Returns a ray going from camera through a screen point.
화면 지점을 통해 카메라에서 가는 선을 돌려줍니다.
ScreenToViewportPoint : Transforms position from screen space into viewport space.
뷰포트 공간으로 화면공간에서 위치를 변환합니다.
ScreenToWorldPoint : Transforms positoin from screen space into world space.
세계 좌표 공간으로 화면 공간에서 위치를 변환합니다.
이상 유니티공홈.
https://docs.unity3d.com/ScriptReference/Camera.html
큐브에 rigidbody를 추가했다면 15~18은 생략가능하다.
주석처리된 부분은 충돌체크시 힘을 가하는 부분을 카메라 좌표기준으로 한것이고,
그 아래는 월드좌표계 기준으로 힘을 가하는 것이다.
주석부분은 살리고 15~18, 21 주석처리하면 카메라 기준스크립트.
클릭을 하면 할수록 올라가는 높이가 점점 높아질수 있는데,
이는 떨어질때 받은힘+제한에 의해 속도가 붙어서.
'프로그래밍 > Unity' 카테고리의 다른 글
NGUI_폰트적용 (0) | 2017.04.06 |
---|---|
NGUI_아틀라스 생성 (0) | 2017.04.06 |
(07.27)Quaternion_centreeGun (0) | 2017.03.20 |
(07.27)Quaternion_유도미사일, 쫓아다니는 카메라 (0) | 2017.03.20 |
(07.23)mecanim, animator (0) | 2017.03.20 |