VR模拟枪支打靶,消灭鬼怪,换弹以及上弦等等硬核枪支操作。 使用HTCVive设备,开启SteamVR进行游玩。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
8.6 KiB

3 years ago
using System;
using UnityEngine;
public class ME_DemoGUI : MonoBehaviour
{
public GameObject Character;
public GameObject Model;
public int Current = 0;
public GameObject[] Prefabs;
public Light Sun;
public ReflectionProbe ReflectionProbe;
public Light[] NightLights = new Light[0];
public Texture HUETexture;
public bool UseMobileVersion;
public GameObject MobileCharacter;
public GameObject Target;
public Color guiColor = Color.red;
private int currentNomber;
private GameObject characterInstance;
private GameObject modelInstance;
private GUIStyle guiStyleHeader = new GUIStyle();
private GUIStyle guiStyleHeaderMobile = new GUIStyle();
float dpiScale;
private bool isDay;
private float colorHUE;
private float startSunIntensity;
private Quaternion startSunRotation;
private Color startAmbientLight;
private float startAmbientIntencity;
private float startReflectionIntencity;
private LightShadows startLightShadows;
//private GameObject mobileCharacterInstance;
void Start()
{
if (Screen.dpi < 1) dpiScale = 1;
if (Screen.dpi < 200) dpiScale = 1;
else dpiScale = Screen.dpi/200f;
guiStyleHeader.fontSize = (int) (15f*dpiScale);
guiStyleHeader.normal.textColor = guiColor;
guiStyleHeaderMobile.fontSize = (int) (17f*dpiScale);
ChangeCurrent(Current);
startSunIntensity = Sun.intensity;
startSunRotation = Sun.transform.rotation;
startAmbientLight = RenderSettings.ambientLight;
startAmbientIntencity = RenderSettings.ambientIntensity;
startReflectionIntencity = RenderSettings.reflectionIntensity;
startLightShadows = Sun.shadows;
}
bool isButtonPressed;
private void OnGUI()
{
if (Input.GetKeyUp(KeyCode.LeftArrow) || Input.GetKeyUp(KeyCode.RightArrow) || Input.GetKeyUp(KeyCode.DownArrow))
isButtonPressed = false;
if (GUI.Button(new Rect(10*dpiScale, 15*dpiScale, 135*dpiScale, 37*dpiScale), "PREVIOUS EFFECT") || (!isButtonPressed && Input.GetKeyDown(KeyCode.LeftArrow)))
{
isButtonPressed = true;
ChangeCurrent(-1);
}
if (GUI.Button(new Rect(160*dpiScale, 15*dpiScale, 135*dpiScale, 37*dpiScale), "NEXT EFFECT") || (!isButtonPressed && Input.GetKeyDown(KeyCode.RightArrow)))
{
isButtonPressed = true;
ChangeCurrent(+1);
}
var offset = 0f;
//if (UseMobileVersion)
//{
// offset += 50 * dpiScale;
// if (GUI.Button(new Rect(10*dpiScale, 63 * dpiScale, 285*dpiScale, 37*dpiScale), "ON / OFF REALISTIC BLOOM") ||
// (!isButtonPressed && Input.GetKeyDown(KeyCode.DownArrow)))
// {
// isUsedMobileBloom = !isUsedMobileBloom;
// RFX1_DistortionAndBloom.UseBloom = isUsedMobileBloom;
// }
// if(!isUsedMobileBloom) guiStyleHeaderMobile.normal.textColor = new Color(0.8f, 0.2f, 0.2f);
// else guiStyleHeaderMobile.normal.textColor = new Color(0.1f, 0.6f, 0.1f);
// GUI.Label(new Rect(400 * dpiScale, 15 * dpiScale, 100 * dpiScale, 20 * dpiScale), "Bloom is "+ (isUsedMobileBloom?"Enabled":"Disabled"), guiStyleHeaderMobile);
//}
if (GUI.Button(new Rect(10*dpiScale, 63*dpiScale + offset, 285*dpiScale, 37*dpiScale), "Day / Night") || (!isButtonPressed && Input.GetKeyDown(KeyCode.DownArrow)))
{
isButtonPressed = true;
if (ReflectionProbe != null) ReflectionProbe.RenderProbe();
Sun.intensity = !isDay ? 0.05f : startSunIntensity;
Sun.shadows = isDay ? startLightShadows : LightShadows.None;
foreach (var nightLight in NightLights)
{
nightLight.shadows = !isDay ? startLightShadows : LightShadows.None;
}
Sun.transform.rotation = isDay ? startSunRotation : Quaternion.Euler(350, 30, 90);
RenderSettings.ambientLight = !isDay ? new Color(0.2f, 0.2f, 0.2f) : startAmbientLight;
var lightInten = !UseMobileVersion ? 1 : 0.3f;
RenderSettings.ambientIntensity = isDay ? startAmbientIntencity : lightInten;
RenderSettings.reflectionIntensity = isDay ? startReflectionIntencity : 0.2f;
isDay = !isDay;
}
GUI.Label(new Rect(400*dpiScale, 15*dpiScale + offset/2, 100*dpiScale, 20*dpiScale),
"Prefab name is \"" + Prefabs[currentNomber].name + "\" \r\nHold any mouse button that would move the camera", guiStyleHeader);
GUI.DrawTexture(new Rect(12*dpiScale, 140*dpiScale + offset, 285*dpiScale, 15*dpiScale), HUETexture, ScaleMode.StretchToFill, false, 0);
float oldColorHUE = colorHUE;
colorHUE = GUI.HorizontalSlider(new Rect(12*dpiScale, 147*dpiScale + offset, 285*dpiScale, 15*dpiScale), colorHUE, 0, 360);
if (Mathf.Abs(oldColorHUE - colorHUE) > 0.001)
{
//var animator = characterInstance.GetComponent<ME_AnimatorEvents>();
//if (animator != null)
//{
// animator.UpdateColor(colorHUE / 360f);
//}
var meshUpdater = characterInstance.GetComponentInChildren<PSMeshRendererUpdater>();
if (meshUpdater != null)
{
meshUpdater.UpdateColor(colorHUE / 360f);
}
meshUpdater = modelInstance.GetComponentInChildren<PSMeshRendererUpdater>();
if (meshUpdater != null)
{
meshUpdater.UpdateColor(colorHUE / 360f);
}
//if (UseMobileVersion)
//{
// var settingColor = currentInstance.GetComponent<RFX1_EffectSettingColor>();
// if (settingColor == null) settingColor = currentInstance.AddComponent<RFX1_EffectSettingColor>();
// var hsv = RFX1_ColorHelper.ColorToHSV(settingColor.Color);
// hsv.H = colorHUE / 360f;
// settingColor.Color = RFX1_ColorHelper.HSVToColor(hsv);
//}
}
}
private GameObject instanceShieldProjectile;
void ChangeCurrent(int delta)
{
currentNomber += delta;
if (currentNomber > Prefabs.Length - 1)
currentNomber = 0;
else if (currentNomber < 0)
currentNomber = Prefabs.Length - 1;
if (characterInstance != null)
{
Destroy(characterInstance);
RemoveClones();
}
if (modelInstance != null)
{
Destroy(modelInstance);
RemoveClones();
}
//currentInstance = Instantiate(Prefabs[currentNomber]);
characterInstance = Instantiate(Character);
characterInstance.GetComponent<ME_AnimatorEvents>().EffectPrefab = Prefabs[currentNomber];
modelInstance = Instantiate(Model);
var effectInstance = Instantiate(Prefabs[currentNomber]);
effectInstance.transform.parent = modelInstance.transform;
effectInstance.transform.localPosition = Vector3.zero;
effectInstance.transform.localRotation = new Quaternion();
var meshUpdater = effectInstance.GetComponent<PSMeshRendererUpdater>();
meshUpdater.UpdateMeshEffect(modelInstance);
//for (int i = 1; i < 3; i++)
// for (int j = 1; j < 6; j++)
// {
// var characterInstanceChild = Instantiate(Model);
// characterInstanceChild.transform.parent = modelInstance.transform;
// characterInstanceChild.transform.localPosition += new Vector3(-j/2f, i - 0.5f, -j*0.8f);
// effectInstance = Instantiate(Prefabs[currentNomber]);
// effectInstance.transform.parent = characterInstanceChild.transform;
// effectInstance.transform.localPosition = Vector3.zero;
// effectInstance.transform.localRotation = new Quaternion();
// meshUpdater = effectInstance.GetComponent<PSMeshRendererUpdater>();
// meshUpdater.UpdateMeshEffect(characterInstanceChild);
// }
if (UseMobileVersion)
{
CancelInvoke("ReactivateEffect");
}
//if (mobileCharacterInstance != null)
//{
// Destroy(mobileCharacterInstance);
//}
}
void RemoveClones()
{
var allGO = FindObjectsOfType<GameObject>();
foreach (var go in allGO)
{
if (go.name.Contains("(Clone)")) Destroy(go);
}
}
void ReactivateEffect()
{
characterInstance.SetActive(false);
characterInstance.SetActive(true);
modelInstance.SetActive(false);
modelInstance.SetActive(true);
}
}