add ckg
plantilla base para movimiento básico
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
public class laserVisionSystem : MonoBehaviour
|
||||
{
|
||||
[Header ("Main Settings")]
|
||||
[Space]
|
||||
|
||||
public bool laserVisionEnabled = true;
|
||||
|
||||
public bool sliceWithLaserEnabled = true;
|
||||
|
||||
public float sliceObjectsActiveRate = 0.5f;
|
||||
|
||||
public LayerMask mainLayermask;
|
||||
|
||||
public float laserRaycastDistance;
|
||||
|
||||
public float minLaserMovementToActivateSlice;
|
||||
|
||||
[Space]
|
||||
[Header ("Debug")]
|
||||
[Space]
|
||||
|
||||
public bool laserVisionActive;
|
||||
|
||||
[Space]
|
||||
[Header ("Event Settings")]
|
||||
[Space]
|
||||
|
||||
public UnityEvent eventOnLaserVisionEnabled;
|
||||
public UnityEvent eventOnLaserVisionDisabled;
|
||||
|
||||
public Transform cutParentRefence;
|
||||
|
||||
[Space]
|
||||
[Header ("Components")]
|
||||
[Space]
|
||||
|
||||
public sliceSystem mainSliceSystem;
|
||||
|
||||
public Transform laserPositionTransform;
|
||||
|
||||
public Transform laserDirectionTransform;
|
||||
|
||||
public GameObject laserGameObject;
|
||||
|
||||
public Vector3 cutOverlapBoxSize;
|
||||
public Transform cutPositionTransform;
|
||||
public Transform cutDirectionTransform;
|
||||
|
||||
public Transform planeDefiner1;
|
||||
public Transform planeDefiner2;
|
||||
public Transform planeDefiner3;
|
||||
|
||||
|
||||
float lastTimeSliceActive;
|
||||
|
||||
Vector3 currentLaserPosition;
|
||||
Vector3 previousLaserPosition;
|
||||
|
||||
RaycastHit hit;
|
||||
|
||||
|
||||
void Update ()
|
||||
{
|
||||
if (laserVisionActive && sliceWithLaserEnabled) {
|
||||
if (Time.time > sliceObjectsActiveRate + lastTimeSliceActive) {
|
||||
if (GKC_Utils.distance (currentLaserPosition, previousLaserPosition) > minLaserMovementToActivateSlice) {
|
||||
Vector3 laserDirection = currentLaserPosition - previousLaserPosition;
|
||||
|
||||
float laserAngle = Vector3.SignedAngle (cutParentRefence.right, laserDirection, cutParentRefence.forward);
|
||||
|
||||
cutParentRefence.eulerAngles = cutParentRefence.forward * laserAngle;
|
||||
|
||||
cutParentRefence.localEulerAngles = new Vector3 (0, 0, cutParentRefence.localEulerAngles.z);
|
||||
|
||||
mainSliceSystem.setCustomCutTransformValues (cutOverlapBoxSize, cutPositionTransform, cutDirectionTransform,
|
||||
planeDefiner1, planeDefiner2, planeDefiner3);
|
||||
|
||||
mainSliceSystem.activateCutExternally ();
|
||||
|
||||
lastTimeSliceActive = Time.time;
|
||||
|
||||
previousLaserPosition = currentLaserPosition;
|
||||
}
|
||||
}
|
||||
|
||||
if (Physics.Raycast (laserPositionTransform.position, laserDirectionTransform.forward, out hit, laserRaycastDistance, mainLayermask)) {
|
||||
currentLaserPosition = hit.point;
|
||||
|
||||
cutParentRefence.position = hit.point - cutParentRefence.forward * 1.5f;
|
||||
|
||||
if (previousLaserPosition == Vector3.zero) {
|
||||
previousLaserPosition = hit.point;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setLaserVisionActiveState (bool state)
|
||||
{
|
||||
if (!laserVisionEnabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
laserVisionActive = state;
|
||||
|
||||
laserGameObject.SetActive (state);
|
||||
|
||||
lastTimeSliceActive = 0;
|
||||
|
||||
previousLaserPosition = Vector3.zero;
|
||||
|
||||
if (laserVisionActive) {
|
||||
eventOnLaserVisionEnabled.Invoke ();
|
||||
} else {
|
||||
eventOnLaserVisionDisabled.Invoke ();
|
||||
}
|
||||
}
|
||||
|
||||
public void toggleLaserVisionActiveState ()
|
||||
{
|
||||
setLaserVisionActiveState (!laserVisionActive);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user