128 lines
3.8 KiB
C#
128 lines
3.8 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
public class Carbehavior : MonoBehaviour
|
|
{
|
|
public AudioSource _carAlarm;
|
|
|
|
[Header("Spotlights")]
|
|
public Light spotlight1; // First spotlight
|
|
public Light spotlight2; // Second spotlight
|
|
private bool lightsAreOn = false;
|
|
|
|
[Header("Material Emission")]
|
|
public GameObject carObjectWithRenderer; // GameObject holding the Renderer
|
|
private Renderer carRenderer;
|
|
private Material carMaterial;
|
|
private Color originalEmissionColor;
|
|
|
|
[Header("Light Intensity Settings")]
|
|
public float maxLightIntensity = 800f;
|
|
public float minLightIntensity = 0f;
|
|
|
|
private Coroutine flashingRoutine;
|
|
|
|
void Start()
|
|
{
|
|
// Fetch the Renderer component from the provided GameObject
|
|
if (carObjectWithRenderer != null)
|
|
{
|
|
carRenderer = carObjectWithRenderer.GetComponent<Renderer>();
|
|
|
|
if (carRenderer != null && carRenderer.material.HasProperty("_EmissionColor"))
|
|
{
|
|
carMaterial = carRenderer.material;
|
|
originalEmissionColor = carMaterial.GetColor("_EmissionColor");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("Car Renderer or Emission property not found on the GameObject!");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("GameObject holding the Renderer is not assigned!");
|
|
}
|
|
|
|
// Ensure lights start at full intensity
|
|
SetLightIntensity(maxLightIntensity);
|
|
}
|
|
|
|
// Detect when another collider enters the trigger
|
|
private void OnTriggerEnter(Collider other)
|
|
{
|
|
if (!_carAlarm.isPlaying)
|
|
{
|
|
_carAlarm.Play();
|
|
Debug.Log("Sound Played: Collider entered trigger.");
|
|
|
|
// Start flashing lights and emission
|
|
flashingRoutine = StartCoroutine(FlashLightsAndEmission());
|
|
}
|
|
}
|
|
|
|
// Detect when another collider exits the trigger
|
|
private void OnTriggerExit(Collider other)
|
|
{
|
|
if (_carAlarm.isPlaying)
|
|
{
|
|
_carAlarm.Stop();
|
|
Debug.Log("Sound Stopped: Collider exited trigger.");
|
|
|
|
// Stop flashing lights and emission
|
|
if (flashingRoutine != null)
|
|
{
|
|
StopCoroutine(flashingRoutine);
|
|
flashingRoutine = null;
|
|
}
|
|
|
|
// Reset light intensity and material emission
|
|
SetLightIntensity(maxLightIntensity);
|
|
ResetEmission();
|
|
}
|
|
}
|
|
|
|
// Coroutine to flash lights and emission
|
|
IEnumerator FlashLightsAndEmission()
|
|
{
|
|
while (true)
|
|
{
|
|
// Toggle lights
|
|
lightsAreOn = !lightsAreOn;
|
|
float currentIntensity = lightsAreOn ? maxLightIntensity : minLightIntensity;
|
|
SetLightIntensity(currentIntensity);
|
|
|
|
// Toggle material emission
|
|
if (carMaterial != null && carMaterial.HasProperty("_EmissionColor"))
|
|
{
|
|
if (lightsAreOn)
|
|
{
|
|
carMaterial.SetColor("_EmissionColor", originalEmissionColor);
|
|
}
|
|
else
|
|
{
|
|
carMaterial.SetColor("_EmissionColor", Color.black);
|
|
}
|
|
}
|
|
|
|
yield return new WaitForSeconds(0.5f);
|
|
}
|
|
}
|
|
|
|
// Helper method to set light intensity for both spotlights
|
|
void SetLightIntensity(float intensity)
|
|
{
|
|
if (spotlight1 != null) spotlight1.intensity = intensity;
|
|
if (spotlight2 != null) spotlight2.intensity = intensity;
|
|
}
|
|
|
|
// Reset material emission to its original state
|
|
void ResetEmission()
|
|
{
|
|
if (carMaterial != null && carMaterial.HasProperty("_EmissionColor"))
|
|
{
|
|
carMaterial.SetColor("_EmissionColor", originalEmissionColor);
|
|
}
|
|
}
|
|
}
|