Tanoda
FastIKTargetTracer.cs
Go to the documentation of this file.
1using System.Collections;
2using System.Collections.Generic;
4using NaughtyAttributes;
5using UnityEngine;
6
7public class FastIKTargetTracer : MonoBehaviour
8{
9 public GameObject target, toFollow;
10 public float maxDistance = 0.05f;
11 public bool useCurve = false;
12 [ShowIf("useCurve")] public int numberOfCurves = 3;
13 [ShowIf("useCurve")] public float curveAngle = 30;
14 [ShowIf("useCurve")] public Vector3 rotateAxis = Vector3.right;
15
16 private float fingerDiameter = 0.01f;
17
18 void Start()
19 {
20
21 }
22
23 void Update()
24 {
25 //var zold = GameObject.Find("zold");
26 //var piros = GameObject.Find("piros");
27
28
29 RaycastHit hit;
30 var origin = transform.position;
31 var targetLocalpos = Vector3.zero;
32 var targetLocalEuler = new Vector3(-20,0,0);
33 target.transform.localEulerAngles = new Vector3(-20,0,0);
34 //if (target.GetComponentInParent<HackedHand>().name == "Fullos Rigged Hand Right" && target.name == "BuciTarget" && target.transform.parent.localEulerAngles == Vector3.zero)
35 //{
36 // target.transform.parent.localEulerAngles = target.transform.parent.localEulerAngles + new Vector3(-60, 180, 60);
37 //}
38 var direction = -target.transform.up;
39 for (int i = 0; i < numberOfCurves; i++)
40 {
41 if (Physics.Raycast(origin, direction, out hit, maxDistance) && hit.collider.gameObject.GetComponent<MeshRenderer>() && hit.collider.gameObject.GetComponent<MeshCollider>())
42 {
43 if (SavedUser.instance.isVarjo)
44 {
45 toFollow.GetComponent<FastIKFabric>().enabled = true;
46 }
47
48 targetLocalpos = Vector3.Lerp(target.transform.localPosition,
49 transform.InverseTransformPoint(origin) + Vector3.down * (hit.distance - fingerDiameter), 0.3f);
50 targetLocalEuler = target.transform.localEulerAngles;
51 Debug.DrawRay(origin, direction * hit.distance, Color.yellow);
52 // if (target.name == "IndexTarget")
53 // {
54 // zold.transform.position = target.transform.position;
55 //piros.transform.position = origin;
56 // }
57 break;
58 }
59 else
60 {
61 toFollow.GetComponent<FastIKFabric>().enabled = false;
62 if (useCurve)
63 {
64 if (targetLocalpos == Vector3.zero)
65 targetLocalpos =
66 Vector3.Lerp(target.transform.localPosition, Vector3.down * (maxDistance / 2), 0.1f);
67 Debug.DrawRay(origin, direction * maxDistance, Color.white);
68 origin = origin + direction * maxDistance;
69 target.transform.Rotate(rotateAxis.normalized, curveAngle);
70 direction = -target.transform.up;
71 }
72 else
73 {
74 targetLocalpos =
75 Vector3.Lerp(target.transform.localPosition, Vector3.down * (maxDistance / 2), 0.1f);
76 Debug.DrawRay(origin, direction * maxDistance, Color.white);
77 }
78 }
79
80 if (!useCurve) break;
81 }
82
83 target.transform.localPosition = targetLocalpos;
84 target.transform.localEulerAngles = targetLocalEuler;
85
86
87 }
88
89 public void SetTrackingState(bool enabled)
90 {
91 var fikfs = transform.parent.GetComponentsInChildren<FastIKFabric>();
92 foreach (var fikf in fikfs)
93 {
94 if (enabled)
95 {
96 StartCoroutine(DelayedEnable(fikf));
97 }
98 else
99 {
100 fikf.ResolveNow = false;
101 }
102 }
103 }
104
105 private IEnumerator DelayedEnable(FastIKFabric fikf)
106 {
107 yield return new WaitForSeconds(0.5f);
108 //fikf.enabled = true;
109 fikf.ResolveNow = enabled;
110 }
111}
UnityEngine.Debug Debug
Definition: TanodaServer.cs:19
UnityEngine.Color Color
Definition: TestScript.cs:32
void SetTrackingState(bool enabled)