Trigger false
Trigger true
Ray tag B touch
Ray tag A touch
another position
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
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(LineRenderer))] // LineRenderer 컴포넌트추가
public class ShotRendererAndRay : MonoBehaviour {
Ray shootRay; // 레이
RaycastHit shootHit; // 레이케스트
LineRenderer lineRenderer; // 라인렌더러
public float range = 100f; // 범위
public bool trigger = false; // 이벤트 트리거
public bool isRayShoot = false;
public bool isRayTagTouchA = false;
public bool isRayTagTouchB = false;
private void Start()
{
lineRenderer = GetComponent<LineRenderer>();
lineRenderer.enabled = false;
}
void Update()
{
if(trigger)
StartShoot();
else
StopShoot();
if (isRayShoot)
Shoot();
}
// Start.
void StartShoot()
{
lineRenderer.enabled = true;
lineRenderer.positionCount = 2;
isRayShoot = true;
}
// End.
void StopShoot()
{
isRayShoot = false;
isRayTagTouchA = false;
isRayTagTouchB = false;
lineRenderer.positionCount = 0;
lineRenderer.enabled = false;
}
// LineRenderer, Ray - Shoot
void Shoot()
{
lineRenderer.SetPosition(0, transform.position); // lineRenderer 0번째 object position 설정
shootRay.origin = transform.position;
shootRay.direction = transform.forward;
// is ray target
if (Physics.Raycast(shootRay, out shootHit))
{
Vector3 v3Pos = shootRay.GetPoint(shootHit.distance * 0.995f);
lineRenderer.SetPosition(1, v3Pos); // lineRenderer 1번째 target position 설정
// check ray tag
if (shootHit.transform.tag == "A")
isRayTagTouchA = true;
else if (shootHit.transform.tag == "B")
isRayTagTouchB = true;
}
// is ray target null
else
{
float distance = 2;
Vector3 forward = transform.forward * distance + transform.position;
lineRenderer.SetPosition(1, forward); // lineRenderer 1번째 설정
// object's forward position + object position
isRayTagTouchA = false;
isRayTagTouchB = false;
}
}
}
| cs |
댓글
댓글 쓰기