LaserPointer.cs
3.2 KB
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class LaserPointer : MonoBehaviour
{
//GameObject controller_L;
GameObject controller_R;
private LineRenderer layser; // 레이저
private RaycastHit Collided_object; // 충돌된 객체
private GameObject currentObject; // 가장 최근에 충돌한 객체를 저장하기 위한 객체
public float raycastDistance = 100f; // 레이저 포인터 감지 거리
// Start is called before the first frame update
void Start()
{
//controller_L = GameObject.Find("Controller (left)");
controller_R = GameObject.Find("Controller (right)");
// 스크립트가 포함된 객체에 라인 렌더러라는 컴포넌트를 넣고있다.
layser = this.gameObject.AddComponent<LineRenderer>();
// 라인이 가지개될 색상 표현
Material material = new Material(Shader.Find("Standard"));
material.color = new Color(0, 195, 255, 0.5f);
layser.material = material;
// 레이저의 꼭지점은 2개가 필요 더 많이 넣으면 곡선도 표현 할 수 있다.
layser.positionCount = 2;
// 레이저 굵기 표현
layser.startWidth = 0.01f;
layser.endWidth = 0.01f;
}
// Update is called once per frame
void Update()
{
layser.SetPosition(0, transform.position); // 첫번째 시작점 위치
// 업데이트에 넣어 줌으로써, 플레이어가 이동하면 이동을 따라가게 된다.
// 선 만들기(충돌 감지를 위한)
Debug.DrawRay(transform.position, transform.forward * raycastDistance, Color.green, 0.5f);
// 충돌 감지 시
if (Physics.Raycast(transform.position, transform.forward, out Collided_object, raycastDistance))
{
layser.SetPosition(1, Collided_object.point);
// 충돌 객체의 태그가 npc인 경우
if (Collided_object.collider.gameObject.CompareTag("NPC"))
{
// 큰 동그라미 부분을 누를 경우
if (controller_R.GetComponent<ActionTest>().GetTeleportDown())
{
// npc에 등록된 대화를 실행한다.
//Collided_object.collider.gameObject.GetComponent<VIDE_Assgin>.BeginDialogue();
}
else
{
currentObject = Collided_object.collider.gameObject;
}
}
}
else
{
// 레이저에 감지된 것이 없기 때문에 레이저 초기 설정 길이만큼 길게 만든다.
layser.SetPosition(1, transform.position + (transform.forward * raycastDistance));
// 최근 감지된 오브젝트가 Button인 경우
// 버튼은 현재 눌려있는 상태이므로 이것을 풀어준다.
if (currentObject != null)
{
currentObject = null;
}
}
}
private void LateUpdate()
{
// 버튼을 누를 경우
if (controller_R.GetComponent<ActionTest>().GetTeleportDown())
{
layser.material.color = new Color(255, 255, 255, 0.5f);
}
// 버튼을 뗄 경우
else{
layser.material.color = new Color(0, 195, 255, 0.5f);
}
}
}