UI 자동화를 위해 바인딩 기능 구현
- 유니티 에셋 인증 오류로 meta 재생성
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
using UnityEngine.Pool;
|
||||
|
||||
namespace UnityEngine.InputSystem.Samples.RebindUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a projectile with collision detection.
|
||||
/// </summary>
|
||||
public class Bullet : MonoBehaviour
|
||||
{
|
||||
[Tooltip("The bullet velocity")]
|
||||
public float speed = 1.0f;
|
||||
|
||||
[Tooltip("The bullet movement direction vector")]
|
||||
public Vector3 direction = Vector3.forward;
|
||||
|
||||
private IObjectPool<Bullet> m_Pool;
|
||||
private GameplayManager m_Manager;
|
||||
private bool m_Destroyed;
|
||||
|
||||
public void Initialize(GameplayManager manager, IObjectPool<Bullet> pool)
|
||||
{
|
||||
m_Manager = manager;
|
||||
m_Pool = pool;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// Animate bullet
|
||||
transform.position += direction * (speed * Time.deltaTime);
|
||||
|
||||
// Destroy bullet if it has exited the game area
|
||||
if (!m_Manager.IsInsideGameplayArea(transform.position))
|
||||
DestroyBullet();
|
||||
}
|
||||
|
||||
void OnEnable()
|
||||
{
|
||||
m_Destroyed = false;
|
||||
}
|
||||
|
||||
private void OnCollisionEnter(Collision other)
|
||||
{
|
||||
DestroyBullet();
|
||||
}
|
||||
|
||||
private void DestroyBullet()
|
||||
{
|
||||
if (m_Destroyed)
|
||||
return;
|
||||
|
||||
// Return this object to the pool
|
||||
m_Pool.Release(this);
|
||||
m_Destroyed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2867f2515c4ec43e1b5a3431b1f101b5
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,122 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &3118742897133167386
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4693320721685012552}
|
||||
- component: {fileID: 7647562335184489153}
|
||||
- component: {fileID: 3681024712760760307}
|
||||
- component: {fileID: 5442039224964880484}
|
||||
- component: {fileID: 5521866723494671783}
|
||||
m_Layer: 0
|
||||
m_Name: Bullet
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4693320721685012552
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3118742897133167386}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.25, y: 0.25, z: 0.25}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &7647562335184489153
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3118742897133167386}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &3681024712760760307
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3118742897133167386}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: 37f709daf8a9e48b5b8a04fb235aa401, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!135 &5442039224964880484
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3118742897133167386}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 0.5
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &5521866723494671783
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3118742897133167386}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 2867f2515c4ec43e1b5a3431b1f101b5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
speed: 10
|
||||
direction: {x: 0, y: 0, z: 0}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 89894e35b3fcc45adb0e4695950de3c1
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,84 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: BulletMaterial
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _EMISSION
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 2
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 0.8301887, g: 0.8009621, b: 0.23104309, a: 1}
|
||||
- _EmissionColor: {r: 0.8396226, g: 0.449911, b: 0.35248306, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 37f709daf8a9e48b5b8a04fb235aa401
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,135 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2485973555241529759
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4722218107970512434}
|
||||
- component: {fileID: 8873998410359935739}
|
||||
- component: {fileID: 399103580937027490}
|
||||
- component: {fileID: 8648548870068808687}
|
||||
- component: {fileID: 1821774021526686622}
|
||||
m_Layer: 0
|
||||
m_Name: CapsuleDebris
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4722218107970512434
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2485973555241529759}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &8873998410359935739
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2485973555241529759}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &399103580937027490
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2485973555241529759}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!54 &8648548870068808687
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2485973555241529759}
|
||||
serializedVersion: 4
|
||||
m_Mass: 1
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 0
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
--- !u!65 &1821774021526686622
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2485973555241529759}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 2, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce1b12f6b504d45d9814a5ae90e1efed
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,135 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &2292259400330097555
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7123808455731925962}
|
||||
- component: {fileID: 2744425224818579373}
|
||||
- component: {fileID: 5683735587341540758}
|
||||
- component: {fileID: 3206786465818626650}
|
||||
- component: {fileID: 2362314418434652759}
|
||||
m_Layer: 0
|
||||
m_Name: CubeDebris
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7123808455731925962
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2292259400330097555}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: -0.79, y: 0.77, z: 0}
|
||||
m_LocalScale: {x: 0.33, y: 0.33, z: 0.33}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &2744425224818579373
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2292259400330097555}
|
||||
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &5683735587341540758
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2292259400330097555}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!65 &3206786465818626650
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2292259400330097555}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Size: {x: 1, y: 1, z: 1}
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!54 &2362314418434652759
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2292259400330097555}
|
||||
serializedVersion: 4
|
||||
m_Mass: 0.3
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 0
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 0
|
||||
m_CollisionDetection: 0
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d56b46295e38d48bcb6d976fbff13d56
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,61 @@
|
||||
using UnityEngine.Pool;
|
||||
|
||||
namespace UnityEngine.InputSystem.Samples.RebindUI
|
||||
{
|
||||
/// <summary>
|
||||
/// A simple enemy for the mini-game.
|
||||
/// </summary>
|
||||
public class Enemy : MonoBehaviour
|
||||
{
|
||||
[Tooltip("The rotation animation target")]
|
||||
public GameObject animationTarget;
|
||||
|
||||
[Tooltip("The target that the enemy will seek, e.g. player transform")]
|
||||
public Transform target;
|
||||
|
||||
[Tooltip("The rotation speed around the X-axis")]
|
||||
public float rotationSpeedX = 130.0f;
|
||||
|
||||
[Tooltip("The rotation speed around the Y-axis")]
|
||||
public float rotationSpeedY = 100.0f;
|
||||
|
||||
[Tooltip("The movement speed")]
|
||||
public float speed = 1.0f;
|
||||
|
||||
[Tooltip("The explosion color")]
|
||||
public Color explosionColor = new Color(0.8711135f, 0.5424528f, 1.0f);
|
||||
|
||||
public IObjectPool<Enemy> pool;
|
||||
[HideInInspector] public GameplayManager manager;
|
||||
|
||||
private void OnCollisionEnter(Collision other)
|
||||
{
|
||||
// If we are hit by a bullet apply force
|
||||
if (other.gameObject.GetComponent<Bullet>())
|
||||
{
|
||||
manager.KillEnemy();
|
||||
manager.Explosion(animationTarget.transform, other.GetContact(0).point, 0.1f, explosionColor);
|
||||
pool.Release(this);
|
||||
}
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
private void Update()
|
||||
{
|
||||
// Animate rotation
|
||||
if (animationTarget)
|
||||
{
|
||||
animationTarget.transform.Rotate(Vector3.up, rotationSpeedX * Time.deltaTime, Space.World);
|
||||
animationTarget.transform.Rotate(Vector3.right, rotationSpeedY * Time.deltaTime, Space.World);
|
||||
}
|
||||
|
||||
// Animate movement towards target
|
||||
if (target)
|
||||
transform.position += (target.position - transform.position).normalized * (Time.deltaTime * speed);
|
||||
|
||||
// Handle enemies getting lost in the world and make them wrap-around
|
||||
if (manager.TryTeleportOrthographicExtents(transform.position, out var result))
|
||||
transform.position = result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6fba66bdfd5604f7699aac3606e08501
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,839 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!1 &698103782849847259
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6031392937170242690}
|
||||
- component: {fileID: 4044310016803501968}
|
||||
- component: {fileID: 1486513092157802690}
|
||||
m_Layer: 0
|
||||
m_Name: Capsule (3)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6031392937170242690
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 698103782849847259}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068}
|
||||
m_LocalPosition: {x: 1, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4998940096416606512}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90}
|
||||
--- !u!33 &4044310016803501968
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 698103782849847259}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &1486513092157802690
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 698103782849847259}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &1658315702937106762
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2141996622644457645}
|
||||
- component: {fileID: 5903471344984095351}
|
||||
- component: {fileID: 6460045099199867147}
|
||||
m_Layer: 0
|
||||
m_Name: Capsule (1)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &2141996622644457645
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1658315702937106762}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068}
|
||||
m_LocalPosition: {x: -1, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4998940096416606512}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90}
|
||||
--- !u!33 &5903471344984095351
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1658315702937106762}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &6460045099199867147
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1658315702937106762}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &2016169131458027988
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4998940096416606512}
|
||||
m_Layer: 0
|
||||
m_Name: Capsules
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &4998940096416606512
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2016169131458027988}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 1
|
||||
m_Children:
|
||||
- {fileID: 1326259510003580266}
|
||||
- {fileID: 2141996622644457645}
|
||||
- {fileID: 7890406838565351548}
|
||||
- {fileID: 6031392937170242690}
|
||||
- {fileID: 8206125172108086075}
|
||||
- {fileID: 5660682079347946702}
|
||||
- {fileID: 8520537060406562051}
|
||||
m_Father: {fileID: 258674359603501190}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &3938006232918451838
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8206125172108086075}
|
||||
- component: {fileID: 4259938203364365618}
|
||||
- component: {fileID: 3584615236140643471}
|
||||
m_Layer: 0
|
||||
m_Name: Capsule (4)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8206125172108086075
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3938006232918451838}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: -1, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4998940096416606512}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &4259938203364365618
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3938006232918451838}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &3584615236140643471
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3938006232918451838}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &4730727550384114469
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 7890406838565351548}
|
||||
- component: {fileID: 2057332849144313924}
|
||||
- component: {fileID: 1606524642198275267}
|
||||
m_Layer: 0
|
||||
m_Name: Capsule (2)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &7890406838565351548
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4730727550384114469}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068}
|
||||
m_LocalPosition: {x: 1, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4998940096416606512}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90}
|
||||
--- !u!33 &2057332849144313924
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4730727550384114469}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &1606524642198275267
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4730727550384114469}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &5308828742654324719
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6249398213759837520}
|
||||
- component: {fileID: 2549516199750632685}
|
||||
- component: {fileID: 3464601146983780728}
|
||||
- component: {fileID: 3464758192301925009}
|
||||
m_Layer: 0
|
||||
m_Name: Enemy
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6249398213759837520
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5308828742654324719}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 0.3, y: 0.3, z: 0.3}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 258674359603501190}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!114 &2549516199750632685
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5308828742654324719}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6fba66bdfd5604f7699aac3606e08501, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
animationTarget: {fileID: 5735160162868689487}
|
||||
target: {fileID: 0}
|
||||
rotationSpeedX: 130
|
||||
rotationSpeedY: 100
|
||||
speed: 1
|
||||
explosionColor: {r: 0.8711135, g: 0.5424528, b: 1, a: 1}
|
||||
manager: {fileID: 0}
|
||||
--- !u!135 &3464601146983780728
|
||||
SphereCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5308828742654324719}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_IsTrigger: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Radius: 1.5
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!54 &3464758192301925009
|
||||
Rigidbody:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5308828742654324719}
|
||||
serializedVersion: 4
|
||||
m_Mass: 1
|
||||
m_Drag: 0
|
||||
m_AngularDrag: 0.05
|
||||
m_CenterOfMass: {x: 0, y: 0, z: 0}
|
||||
m_InertiaTensor: {x: 1, y: 1, z: 1}
|
||||
m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ImplicitCom: 1
|
||||
m_ImplicitTensor: 1
|
||||
m_UseGravity: 0
|
||||
m_IsKinematic: 0
|
||||
m_Interpolate: 0
|
||||
m_Constraints: 8
|
||||
m_CollisionDetection: 1
|
||||
--- !u!1 &5735160162868689487
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 258674359603501190}
|
||||
m_Layer: 0
|
||||
m_Name: Parts
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &258674359603501190
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5735160162868689487}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6538548061192247848}
|
||||
- {fileID: 4998940096416606512}
|
||||
m_Father: {fileID: 6249398213759837520}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &5820538556118510767
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6538548061192247848}
|
||||
- component: {fileID: 4839904448246221421}
|
||||
- component: {fileID: 6787349821119196359}
|
||||
m_Layer: 0
|
||||
m_Name: Sphere
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &6538548061192247848
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5820538556118510767}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 2, y: 2, z: 2}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 258674359603501190}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &4839904448246221421
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5820538556118510767}
|
||||
m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &6787349821119196359
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5820538556118510767}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &7490499906534907827
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 5660682079347946702}
|
||||
- component: {fileID: 8517222528995113009}
|
||||
- component: {fileID: 2972884222454255057}
|
||||
m_Layer: 0
|
||||
m_Name: Capsule (5)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &5660682079347946702
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7490499906534907827}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068}
|
||||
m_LocalPosition: {x: 0, y: 0, z: -1}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4998940096416606512}
|
||||
m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
|
||||
--- !u!33 &8517222528995113009
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7490499906534907827}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &2972884222454255057
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7490499906534907827}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &7630963628483176768
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8520537060406562051}
|
||||
- component: {fileID: 5883993682386527752}
|
||||
- component: {fileID: 6719703482470616456}
|
||||
m_Layer: 0
|
||||
m_Name: Capsule (6)
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &8520537060406562051
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7630963628483176768}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 1}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4998940096416606512}
|
||||
m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0}
|
||||
--- !u!33 &5883993682386527752
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7630963628483176768}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &6719703482470616456
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 7630963628483176768}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
--- !u!1 &8183201464650263239
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1326259510003580266}
|
||||
- component: {fileID: 2939064054190328227}
|
||||
- component: {fileID: 6225812181331911930}
|
||||
m_Layer: 0
|
||||
m_Name: Capsule
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!4 &1326259510003580266
|
||||
Transform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8183201464650263239}
|
||||
serializedVersion: 2
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 1, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4998940096416606512}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
--- !u!33 &2939064054190328227
|
||||
MeshFilter:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8183201464650263239}
|
||||
m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
|
||||
--- !u!23 &6225812181331911930
|
||||
MeshRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8183201464650263239}
|
||||
m_Enabled: 1
|
||||
m_CastShadows: 1
|
||||
m_ReceiveShadows: 1
|
||||
m_DynamicOccludee: 1
|
||||
m_StaticShadowCaster: 0
|
||||
m_MotionVectors: 1
|
||||
m_LightProbeUsage: 1
|
||||
m_ReflectionProbeUsage: 1
|
||||
m_RayTracingMode: 2
|
||||
m_RayTraceProcedural: 0
|
||||
m_RenderingLayerMask: 1
|
||||
m_RendererPriority: 0
|
||||
m_Materials:
|
||||
- {fileID: 2100000, guid: b8e14aa9fd46e491da8236fbbfd078d2, type: 2}
|
||||
m_StaticBatchInfo:
|
||||
firstSubMesh: 0
|
||||
subMeshCount: 0
|
||||
m_StaticBatchRoot: {fileID: 0}
|
||||
m_ProbeAnchor: {fileID: 0}
|
||||
m_LightProbeVolumeOverride: {fileID: 0}
|
||||
m_ScaleInLightmap: 1
|
||||
m_ReceiveGI: 1
|
||||
m_PreserveUVs: 0
|
||||
m_IgnoreNormalsForChartDetection: 0
|
||||
m_ImportantGI: 0
|
||||
m_StitchLightmapSeams: 1
|
||||
m_SelectedEditorRenderState: 3
|
||||
m_MinimumChartSize: 4
|
||||
m_AutoUVMaxDistance: 0.5
|
||||
m_AutoUVMaxAngle: 89
|
||||
m_LightmapParameters: {fileID: 0}
|
||||
m_SortingLayerID: 0
|
||||
m_SortingLayer: 0
|
||||
m_SortingOrder: 0
|
||||
m_AdditionalVertexStreams: {fileID: 0}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6f39382c4582b4c269e0ba3f50edfd61
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,84 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: EnemyMaterial
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _EMISSION
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 2
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 0.38103175, g: 0.12941176, b: 0.94509804, a: 1}
|
||||
- _EmissionColor: {r: 0.27450982, g: 0.078431375, b: 0.19607843, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b8e14aa9fd46e491da8236fbbfd078d2
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,50 @@
|
||||
using UnityEngine;
|
||||
|
||||
public class Explosion : MonoBehaviour
|
||||
{
|
||||
public Vector3 explosionPosition;
|
||||
private ParticleSystem m_ParticleSystem;
|
||||
private Rigidbody[] m_Rigidbodies;
|
||||
private bool m_Exploded;
|
||||
private bool m_Destroyed;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
m_ParticleSystem = GetComponent<ParticleSystem>();
|
||||
m_Rigidbodies = gameObject.GetComponentsInChildren<Rigidbody>();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
m_ParticleSystem.Play();
|
||||
m_Exploded = false;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
m_ParticleSystem.Stop();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (!m_ParticleSystem.isPlaying && !m_Destroyed)
|
||||
{
|
||||
m_Destroyed = true;
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (!m_Exploded)
|
||||
{
|
||||
for (var i = 0; i < m_Rigidbodies.Length; i++)
|
||||
{
|
||||
var body = m_Rigidbodies[i];
|
||||
body.AddExplosionForce(10.0f, explosionPosition, 0.5f, 0.0f, ForceMode.Impulse);
|
||||
}
|
||||
|
||||
m_Exploded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 56959a201a0e144189ceafe5b5393bee
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 39a7c0f8dfc714dd6be0743596240a32
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,227 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.InputSystem.DualShock;
|
||||
|
||||
namespace UnityEngine.InputSystem.Samples.RebindUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Component that integrates Input System actions with feedback effects.
|
||||
/// </summary>
|
||||
public class FeedbackController : MonoBehaviour
|
||||
{
|
||||
private const float kDefaultOutputFrequency = 10.0f;
|
||||
private const float kDefaultOutputThrottleDelay = 1.0f / kDefaultOutputFrequency;
|
||||
|
||||
[Header("Color Output")]
|
||||
[Tooltip("The device color output frequency (Hz)")]
|
||||
public float colorOutputFrequency = kDefaultOutputFrequency;
|
||||
|
||||
[Header("Force Feedback Output")]
|
||||
[Tooltip("The device rumble output frequency (Hz)")]
|
||||
public float rumbleOutputFrequency = kDefaultOutputFrequency;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the target light color.
|
||||
/// </summary>
|
||||
public Color color { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the strength of the rumble effect [0, 1].
|
||||
/// </summary>
|
||||
public float rumble
|
||||
{
|
||||
get => m_Rumble;
|
||||
set => m_Rumble = Mathf.Clamp01(value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Records the device used to trigger an action.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This should be called during interaction to assist the feedback controller in understanding
|
||||
/// what devices are currently in use to manage feedback across devices.
|
||||
/// </remarks>
|
||||
/// <param name="action">The associated action that got triggered or cancelled.</param>
|
||||
public void RecordRecentDeviceFromAction(InputAction action)
|
||||
{
|
||||
var control = action.activeControl;
|
||||
if (control == null)
|
||||
return;
|
||||
|
||||
var device = control.device;
|
||||
var now = Time.realtimeSinceStartupAsDouble;
|
||||
|
||||
// If this is a device we haven't seen before or a device coming back to being used we
|
||||
// need to make sure we have applied target feedback to it.
|
||||
var previouslyRegistered = s_RecentlyUsedDevices.ContainsKey(device);
|
||||
if (!previouslyRegistered || (now - s_RecentlyUsedDevices[device]) >= kRecentThresholdSeconds)
|
||||
{
|
||||
m_InvalidateLight = true;
|
||||
m_InvalidateRumble = true;
|
||||
}
|
||||
|
||||
// Register device
|
||||
s_RecentlyUsedDevices[device] = now;
|
||||
s_MostRecentInputDevice = device;
|
||||
}
|
||||
|
||||
// Track recent controls used for light and haptic force feedback.
|
||||
private const double kRecentThresholdSeconds = 3.0;
|
||||
private static readonly Dictionary<InputDevice, double> s_RecentlyUsedDevices = new Dictionary<InputDevice, double>();
|
||||
private static InputDevice s_MostRecentInputDevice;
|
||||
private bool m_InvalidateLight;
|
||||
private bool m_InvalidateRumble;
|
||||
|
||||
// Feedback constants
|
||||
private static readonly Color NoLight = Color.black;
|
||||
private const float kNoRumble = 0.0f;
|
||||
|
||||
// Device I/O throttling
|
||||
private double m_NextLightUpdateTime;
|
||||
private Color m_DeviceColor = NoLight;
|
||||
private double m_NextRumbleUpdateTime;
|
||||
private float m_DeviceRumble;
|
||||
private float m_Rumble;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// Initialize throttling times to allow direct update
|
||||
var now = Time.realtimeSinceStartupAsDouble;
|
||||
m_NextLightUpdateTime = now;
|
||||
m_NextRumbleUpdateTime = now;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
m_InvalidateLight = true;
|
||||
m_InvalidateRumble = true;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
// "Restore" rumble and light effects of any supported devices.
|
||||
// Note: When disabling the component we skip throttling to make sure the value reaches the device.
|
||||
ApplyRumble(kNoRumble);
|
||||
ApplyLight(NoLight);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
var now = Time.realtimeSinceStartupAsDouble;
|
||||
|
||||
if (DetectAbandonedDevices(now))
|
||||
m_InvalidateLight = m_InvalidateRumble = true;
|
||||
|
||||
// Animate device color, note that we throttle this to avoid output congestion on device side.
|
||||
// See https://jira.unity3d.com/browse/ISXB-1587 for why this workaround was added.
|
||||
// If this ticket is resolved, frequency settings and this workaround may be removed.
|
||||
if (now >= m_NextLightUpdateTime && (m_InvalidateLight || m_DeviceColor != color))
|
||||
{
|
||||
m_InvalidateLight = false;
|
||||
m_NextLightUpdateTime = ComputeNextUpdateTime(now, colorOutputFrequency);
|
||||
ApplyLight(color);
|
||||
}
|
||||
|
||||
// Animate device rumble, note that we throttle this to avoid output congestion on device side.
|
||||
// The else branch makes sure rumble effect is paused if user pauses with motors running.
|
||||
// See https://jira.unity3d.com/browse/ISXB-1586 for why this workaround was added.
|
||||
// If this ticket is resolved, frequency settings and this workaround may be removed.
|
||||
if (now >= m_NextRumbleUpdateTime && (m_InvalidateRumble || !Mathf.Approximately(m_DeviceRumble, rumble)))
|
||||
{
|
||||
m_InvalidateRumble = false;
|
||||
m_NextRumbleUpdateTime = ComputeNextUpdateTime(now, rumbleOutputFrequency);
|
||||
ApplyRumble(rumble);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyLight(Color colorValue)
|
||||
{
|
||||
m_DeviceColor = colorValue;
|
||||
|
||||
// Note: There is currently no interface for light effects so we check type
|
||||
// Always allow devices to go back to zero light, but only apply light if device is recently used.
|
||||
var now = Time.realtimeSinceStartupAsDouble;
|
||||
foreach (var gamepad in Gamepad.all)
|
||||
{
|
||||
if (IsRecentlyUsed(gamepad, now))
|
||||
ApplyLightToDevice(gamepad, colorValue);
|
||||
else
|
||||
ApplyLightToDevice(gamepad, NoLight);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyLightToDevice(Gamepad device, Color value)
|
||||
{
|
||||
var dualShockGamepad = device as DualShockGamepad;
|
||||
dualShockGamepad?.SetLightBarColor(value);
|
||||
}
|
||||
|
||||
private void ApplyRumble(float value)
|
||||
{
|
||||
m_DeviceRumble = value;
|
||||
|
||||
// Note: Rumble is currently only supported by gamepads.
|
||||
// Always allow devices to go back to zero rumble, but only apply rumble if device is recently used.
|
||||
var now = Time.realtimeSinceStartupAsDouble;
|
||||
foreach (var gamepad in Gamepad.all)
|
||||
{
|
||||
if (IsRecentlyUsed(gamepad, now))
|
||||
ApplyRumbleToDevice(gamepad, value);
|
||||
else
|
||||
ApplyRumbleToDevice(gamepad, kNoRumble);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplyRumbleToDevice(Gamepad device, float value)
|
||||
{
|
||||
device.SetMotorSpeeds(value, 0.0f);
|
||||
}
|
||||
|
||||
// Note that we track recently used devices to manage feedback effects across devices.
|
||||
// Note that this requires appropriate filtering, e.g. dead-zone filtering or relying on non-noisy controls
|
||||
// for detection.
|
||||
// We do this so that a player using a gamepad will receive feedback effects, but if the player puts
|
||||
// down the gamepad and use e.g. keyboard/mouse instead, any feedback on gamepad is undesirable since it
|
||||
// may be distracting. Also note that the gamepad might be used even though controls are stationary, e.g.
|
||||
// holding fire button but not moving nor looking.
|
||||
|
||||
private static bool IsRecentlyUsed(InputDevice device, double realtimeSinceStartup,
|
||||
double thresholdSeconds = kRecentThresholdSeconds)
|
||||
{
|
||||
return s_MostRecentInputDevice == device || s_RecentlyUsedDevices.ContainsKey(device) &&
|
||||
(realtimeSinceStartup - s_RecentlyUsedDevices[device]) < thresholdSeconds;
|
||||
}
|
||||
|
||||
private static bool DetectAbandonedDevices(double realTimeSinceStartup)
|
||||
{
|
||||
bool removed;
|
||||
var foundAtLeastOnePassiveDevice = false;
|
||||
do
|
||||
{
|
||||
removed = false;
|
||||
foreach (var pair in s_RecentlyUsedDevices)
|
||||
{
|
||||
// If device have not been used for a while and its not the most recently used device
|
||||
if (realTimeSinceStartup - pair.Value < kRecentThresholdSeconds ||
|
||||
s_MostRecentInputDevice == pair.Key)
|
||||
continue;
|
||||
|
||||
// Remove and restart evaluation since invalidated iterators
|
||||
s_RecentlyUsedDevices.Remove(pair.Key);
|
||||
foundAtLeastOnePassiveDevice = true;
|
||||
removed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
while (removed);
|
||||
|
||||
return foundAtLeastOnePassiveDevice;
|
||||
}
|
||||
|
||||
private static double ComputeNextUpdateTime(double now, float frequency)
|
||||
{
|
||||
var factor = frequency > 0.0 ? 1.0f / frequency : kDefaultOutputThrottleDelay;
|
||||
return Math.Ceiling(now / factor) * factor;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8ac9b43eedbd9426f94712efe5efc1ca
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,392 @@
|
||||
using System;
|
||||
using UnityEngine.Pool;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
// This sample can be optimized with pooled explosions.
|
||||
|
||||
namespace UnityEngine.InputSystem.Samples.RebindUI
|
||||
{
|
||||
public class GameplayManager : MonoBehaviour
|
||||
{
|
||||
[Tooltip("The game camera")]
|
||||
public Camera gameCamera;
|
||||
|
||||
[Tooltip("The enemy spawn rate")]
|
||||
public float enemySpawnRate = 1.0f;
|
||||
|
||||
[Tooltip("The enemy spawn distance from center")]
|
||||
public float spawnDistance = 10.0f;
|
||||
|
||||
[Tooltip("The enemy prefab for the mini game")]
|
||||
public GameObject enemy;
|
||||
|
||||
[Tooltip("The explosion prefab for the mini game")]
|
||||
public GameObject enemyExplosion;
|
||||
|
||||
[Tooltip("The player prefab for the mini game")]
|
||||
public GameObject player;
|
||||
|
||||
/// <summary>
|
||||
/// Returns the current game level.
|
||||
/// </summary>
|
||||
public int level { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Game state.
|
||||
/// </summary>
|
||||
public enum GameplayState
|
||||
{
|
||||
None,
|
||||
StartLevel,
|
||||
Playing,
|
||||
CompleteLevel,
|
||||
GameOver,
|
||||
ResetGame,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the current game state.
|
||||
/// </summary>
|
||||
public GameplayState state => m_GameplayState;
|
||||
|
||||
/// <summary>
|
||||
/// Event fired when game state changes.
|
||||
/// </summary>
|
||||
public event Action<GameplayState> GameplayStateChanged;
|
||||
|
||||
/// <summary>
|
||||
/// Event fired when pause state changes.
|
||||
/// </summary>
|
||||
public event Action<bool> PauseChanged;
|
||||
|
||||
private double m_TimeToNextSpawn;
|
||||
private GameObject m_Player;
|
||||
private ObjectPool<Enemy> m_EnemyPool;
|
||||
|
||||
private float m_ShakeForce;
|
||||
private float m_ShakeMaxForce;
|
||||
private float m_ShakeDuration;
|
||||
private double m_ShakeTime;
|
||||
private Vector3 m_CameraPosition;
|
||||
|
||||
private int m_RemainingEnemiesOnThisLevel;
|
||||
private int m_EnemySpawnCount;
|
||||
|
||||
private FeedbackController m_FeedbackController;
|
||||
|
||||
private GameplayState m_GameplayState = GameplayState.None;
|
||||
|
||||
private double m_EarliestTimeToChangeState;
|
||||
|
||||
/// <summary>
|
||||
/// Get/set whether the game is paused.
|
||||
/// </summary>
|
||||
public bool paused
|
||||
{
|
||||
get => Time.timeScale == 0.0f;
|
||||
set
|
||||
{
|
||||
if ((value && Time.timeScale == 0.0f) || (!value && Time.timeScale != 0.0f))
|
||||
return;
|
||||
|
||||
Time.timeScale = value ? 0.0f : 1.0f;
|
||||
UpdateCursor();
|
||||
|
||||
PauseChanged?.Invoke(value);
|
||||
}
|
||||
}
|
||||
|
||||
public void KillEnemy()
|
||||
{
|
||||
--m_RemainingEnemiesOnThisLevel;
|
||||
}
|
||||
|
||||
public void GameOver()
|
||||
{
|
||||
m_Player.SetActive(false);
|
||||
m_NextGameplayState = GameplayState.GameOver;
|
||||
}
|
||||
|
||||
private void Shake(float duration, float amplitude)
|
||||
{
|
||||
m_ShakeMaxForce = amplitude;
|
||||
m_ShakeForce = amplitude;
|
||||
m_ShakeDuration = duration;
|
||||
m_ShakeTime = Time.timeAsDouble;
|
||||
}
|
||||
|
||||
public void Explosion(Transform target, Vector3 position, float amplitude, Color color, Material material = null)
|
||||
{
|
||||
var obj = Instantiate(enemyExplosion);
|
||||
obj.transform.position = target.position;
|
||||
obj.transform.rotation = target.rotation;
|
||||
|
||||
// If we are provided a material, use that for all debris
|
||||
if (material != null)
|
||||
{
|
||||
var renderers = obj.GetComponentsInChildren<MeshRenderer>();
|
||||
foreach (var childRenderer in renderers)
|
||||
childRenderer.sharedMaterial = material;
|
||||
}
|
||||
|
||||
// Set explosion position
|
||||
var exp = obj.GetComponent<Explosion>();
|
||||
exp.explosionPosition = position;
|
||||
|
||||
// Modify the particle color
|
||||
var particles = exp.GetComponent<ParticleSystem>();
|
||||
ParticleSystem.MainModule main = particles.main;
|
||||
main.startColor = color;
|
||||
|
||||
Shake(duration: 0.4f, amplitude: amplitude);
|
||||
}
|
||||
|
||||
private static void WrapAround(ref float x, float min, float max)
|
||||
{
|
||||
if (x <= min)
|
||||
x = max;
|
||||
else if (x >= max)
|
||||
x = min;
|
||||
}
|
||||
|
||||
internal bool IsInsideGameplayArea(Vector3 position, float margin = 0.8f)
|
||||
{
|
||||
if (!gameCamera || !gameCamera.orthographic)
|
||||
return true;
|
||||
|
||||
var orthoSize = gameCamera.orthographicSize;
|
||||
var horizontalExtent = orthoSize * gameCamera.aspect;
|
||||
return (position.x >= -horizontalExtent - margin) &&
|
||||
(position.x <= horizontalExtent + margin) &&
|
||||
(position.y >= -orthoSize - margin) &&
|
||||
(position.y <= orthoSize + margin);
|
||||
}
|
||||
|
||||
private static bool TryTeleportOrthographicExtents(Camera camera, Vector3 position,
|
||||
out Vector3 result, float margin = 0.8f)
|
||||
{
|
||||
// Wrap around constraint x, y and teleport player if outside orthographic camera bounds
|
||||
if (camera && camera.orthographic)
|
||||
{
|
||||
var orthoSize = camera.orthographicSize;
|
||||
var horizontalExtent = orthoSize * camera.aspect;
|
||||
var newPosition = position;
|
||||
WrapAround(ref newPosition.x, -horizontalExtent - margin, horizontalExtent + margin);
|
||||
WrapAround(ref newPosition.y, -orthoSize - margin, orthoSize + margin);
|
||||
if (newPosition != position)
|
||||
{
|
||||
result = newPosition;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
result = position;
|
||||
return false;
|
||||
}
|
||||
|
||||
internal bool TryTeleportOrthographicExtents(Vector3 position, out Vector3 result, float margin = 0.8f)
|
||||
{
|
||||
return TryTeleportOrthographicExtents(gameCamera, position, out result, margin);
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// This game is designed for landscape orientation, so make sure we use it.
|
||||
Screen.orientation = ScreenOrientation.LandscapeLeft;
|
||||
|
||||
m_FeedbackController = GetComponent<FeedbackController>();
|
||||
|
||||
m_EnemyPool = new ObjectPool<Enemy>(
|
||||
createFunc: () =>
|
||||
{
|
||||
var enemyComponent = Instantiate(enemy).GetComponent<Enemy>();
|
||||
enemyComponent.pool = m_EnemyPool;
|
||||
enemyComponent.target = m_Player.transform;
|
||||
enemyComponent.manager = this;
|
||||
return enemyComponent;
|
||||
},
|
||||
actionOnGet: (obj) => obj.gameObject.SetActive(true),
|
||||
actionOnRelease: (obj) => obj.gameObject.SetActive(false),
|
||||
actionOnDestroy: (obj) => Destroy(obj.gameObject));
|
||||
|
||||
m_CameraPosition = gameCamera.transform.position;
|
||||
|
||||
m_EarliestTimeToChangeState = Time.timeAsDouble;
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// Instantiate and initialize the player
|
||||
m_Player = Instantiate(player, transform, worldPositionStays: true);
|
||||
var playerComponent = m_Player.GetComponent<Player>();
|
||||
playerComponent.manager = this;
|
||||
|
||||
// Setup feedback controller
|
||||
var playerController = m_Player.GetComponent<PlayerController>();
|
||||
playerController.feedbackController = m_FeedbackController;
|
||||
|
||||
// Delay first spawn so player has a chance to get ready
|
||||
m_TimeToNextSpawn = 3.0f;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
Application.focusChanged += OnApplicationFocusChanged;
|
||||
paused = !Application.isFocused;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
Application.focusChanged -= OnApplicationFocusChanged;
|
||||
paused = true;
|
||||
}
|
||||
|
||||
private void OnApplicationFocusChanged(bool focus)
|
||||
{
|
||||
paused = !focus;
|
||||
}
|
||||
|
||||
void SpawnEnemy()
|
||||
{
|
||||
if (m_EnemySpawnCount == 0)
|
||||
return;
|
||||
|
||||
m_TimeToNextSpawn -= Time.deltaTime;
|
||||
if (m_TimeToNextSpawn > 0.0f)
|
||||
return;
|
||||
|
||||
m_TimeToNextSpawn += enemySpawnRate;
|
||||
--m_EnemySpawnCount;
|
||||
|
||||
// Rent an enemy from the enemy pool
|
||||
var enemyComponent = m_EnemyPool.Get();
|
||||
|
||||
// Make the enemy spawn on border of visible game area
|
||||
var orthoSize = gameCamera.orthographicSize;
|
||||
var horizontalExtent = orthoSize * gameCamera.aspect;
|
||||
var axis = Random.Range(-1.0f, 1.0f);
|
||||
var margin = 0.5f;
|
||||
var random = Random.Range(0, 4);
|
||||
switch (random)
|
||||
{
|
||||
case 0:
|
||||
enemyComponent.transform.position = new Vector3(axis * horizontalExtent, orthoSize + margin, 0.0f);
|
||||
break;
|
||||
case 1:
|
||||
enemyComponent.transform.position = new Vector3(axis * horizontalExtent, -orthoSize - margin, 0.0f);
|
||||
break;
|
||||
case 2:
|
||||
enemyComponent.transform.position = new Vector3(-horizontalExtent - margin, axis * orthoSize, 0.0f);
|
||||
break;
|
||||
case 3:
|
||||
enemyComponent.transform.position = new Vector3(horizontalExtent + margin, axis * orthoSize, 0.0f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void AnimateCameraShake()
|
||||
{
|
||||
var time = Time.timeAsDouble;
|
||||
var elapsed = (time - m_ShakeTime);
|
||||
var t = m_ShakeDuration <= 0.0f ? 1.0f : elapsed / m_ShakeDuration;
|
||||
m_ShakeForce = Mathf.Lerp(m_ShakeMaxForce, 0.0f, (float)t);
|
||||
|
||||
var cameraShakeOffset = new Vector3(
|
||||
m_ShakeForce * Mathf.Sin((float)time * 71.0f),
|
||||
m_ShakeForce * Mathf.Sin((float)time * 53.0f + Mathf.PI / 3.0f),
|
||||
0f);
|
||||
|
||||
gameCamera.transform.position = m_CameraPosition + cameraShakeOffset;
|
||||
|
||||
// Apply shake to feedback controller if available
|
||||
if (m_FeedbackController != null)
|
||||
m_FeedbackController.rumble = m_ShakeForce;
|
||||
}
|
||||
|
||||
private GameplayState m_NextGameplayState = GameplayState.StartLevel;
|
||||
|
||||
void Update()
|
||||
{
|
||||
var now = Time.time;
|
||||
while (now >= m_EarliestTimeToChangeState && m_NextGameplayState != m_GameplayState)
|
||||
{
|
||||
m_EarliestTimeToChangeState = now;
|
||||
|
||||
// Transition exit
|
||||
switch (m_GameplayState)
|
||||
{
|
||||
case GameplayState.None: break;
|
||||
case GameplayState.StartLevel: break;
|
||||
case GameplayState.Playing: break;
|
||||
case GameplayState.CompleteLevel: break;
|
||||
case GameplayState.GameOver:
|
||||
case GameplayState.ResetGame: break;
|
||||
}
|
||||
|
||||
m_GameplayState = m_NextGameplayState;
|
||||
|
||||
// Transition enter
|
||||
switch (m_NextGameplayState)
|
||||
{
|
||||
case GameplayState.None:
|
||||
m_NextGameplayState = GameplayState.StartLevel;
|
||||
break;
|
||||
|
||||
case GameplayState.StartLevel:
|
||||
m_EnemySpawnCount = 5 + (++level) * 2;
|
||||
m_RemainingEnemiesOnThisLevel = m_EnemySpawnCount;
|
||||
enemySpawnRate *= 0.9f;
|
||||
|
||||
m_EarliestTimeToChangeState += 2.0;
|
||||
m_NextGameplayState = GameplayState.Playing;
|
||||
break;
|
||||
|
||||
case GameplayState.Playing:
|
||||
break;
|
||||
|
||||
case GameplayState.CompleteLevel:
|
||||
m_NextGameplayState = GameplayState.StartLevel;
|
||||
break;
|
||||
|
||||
case GameplayState.GameOver:
|
||||
m_EarliestTimeToChangeState += 3.0;
|
||||
m_NextGameplayState = GameplayState.ResetGame;
|
||||
break;
|
||||
|
||||
case GameplayState.ResetGame:
|
||||
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
// Notify listeners about gameplay state being updated
|
||||
GameplayStateChanged?.Invoke(m_GameplayState);
|
||||
}
|
||||
|
||||
// Spawn enemies while in playing state only
|
||||
if (state == GameplayState.Playing)
|
||||
{
|
||||
if (m_RemainingEnemiesOnThisLevel == 0)
|
||||
m_NextGameplayState = GameplayState.CompleteLevel;
|
||||
else
|
||||
SpawnEnemy();
|
||||
}
|
||||
|
||||
// Always animate regardless of state
|
||||
AnimateCameraShake();
|
||||
}
|
||||
|
||||
void UpdateCursor()
|
||||
{
|
||||
if (paused)
|
||||
{
|
||||
Cursor.visible = true;
|
||||
Cursor.lockState = CursorLockMode.None;
|
||||
}
|
||||
else
|
||||
{
|
||||
Cursor.visible = false;
|
||||
Cursor.lockState = CursorLockMode.Locked;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13c95923af8174931ad73d78d63413bc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace UnityEngine.InputSystem.Samples.RebindUI
|
||||
{
|
||||
/// <summary>
|
||||
/// A UI to show messages reflecting changes to gameplay state.
|
||||
/// </summary>
|
||||
public class Message : MonoBehaviour
|
||||
{
|
||||
[Tooltip("The associated gameplay manager.")]
|
||||
public GameplayManager gameplayManager;
|
||||
|
||||
[Tooltip("The associated UI root to hide/show.")]
|
||||
public GameObject root;
|
||||
|
||||
[Tooltip("The associated UI text to be altered to show messages.")]
|
||||
public Text text;
|
||||
|
||||
private Action m_TimeoutCallback;
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
// Monitor changes to gameplay state and game pause state.
|
||||
gameplayManager.GameplayStateChanged += OnGameplayStateChanged;
|
||||
gameplayManager.PauseChanged += OnPauseChanged;
|
||||
|
||||
// Initialize
|
||||
OnGameplayStateChanged(gameplayManager.state);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
// Unsubscribe from monitoring gameplay and pause state.
|
||||
gameplayManager.GameplayStateChanged += OnGameplayStateChanged;
|
||||
gameplayManager.PauseChanged -= OnPauseChanged;
|
||||
}
|
||||
|
||||
private void OnPauseChanged(bool paused)
|
||||
{
|
||||
OnGameplayStateChanged(gameplayManager.state);
|
||||
}
|
||||
|
||||
private void Hide()
|
||||
{
|
||||
root.SetActive(false);
|
||||
}
|
||||
|
||||
private void Show(string message)
|
||||
{
|
||||
text.text = message;
|
||||
root.SetActive(true);
|
||||
}
|
||||
|
||||
private void Show(string message, float duration)
|
||||
{
|
||||
Show(message);
|
||||
}
|
||||
|
||||
private void OnGameplayStateChanged(GameplayManager.GameplayState state)
|
||||
{
|
||||
if (gameplayManager.paused)
|
||||
{
|
||||
Show("PAUSED");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case GameplayManager.GameplayState.None:
|
||||
break;
|
||||
case GameplayManager.GameplayState.StartLevel:
|
||||
Show($"ROUND {gameplayManager.level}");
|
||||
break;
|
||||
case GameplayManager.GameplayState.CompleteLevel:
|
||||
break;
|
||||
case GameplayManager.GameplayState.Playing:
|
||||
Hide();
|
||||
break;
|
||||
case GameplayManager.GameplayState.GameOver:
|
||||
Show("GAME OVER");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8ab179ac572fd4ff5a2598d5878d962d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,300 @@
|
||||
using System;
|
||||
using UnityEngine.Pool;
|
||||
|
||||
// Note: Error handling has been excluded from this script since not the main focus of example.
|
||||
|
||||
namespace UnityEngine.InputSystem.Samples.RebindUI
|
||||
{
|
||||
public class Player : MonoBehaviour
|
||||
{
|
||||
// Since since its expected to be assigned at run-time
|
||||
[HideInInspector]
|
||||
[Tooltip("The gameplay manager")]
|
||||
public GameplayManager manager;
|
||||
|
||||
[Tooltip("The fire object")]
|
||||
public GameObject fireObject;
|
||||
|
||||
[Tooltip("The omni-fire object")]
|
||||
public GameObject omniFireObject;
|
||||
|
||||
[Tooltip("The bullet/particle object")]
|
||||
public GameObject particle;
|
||||
|
||||
[Tooltip("The cannon belt")]
|
||||
public GameObject belt;
|
||||
|
||||
[Tooltip("The cannon barrel")]
|
||||
public GameObject barrel;
|
||||
|
||||
[Tooltip("The regular fire rate")]
|
||||
public float fireRate = 0.25f;
|
||||
|
||||
[Tooltip("The omni-fire rate")]
|
||||
public float omniFireRate = 1.0f;
|
||||
|
||||
[Tooltip("The change rate")]
|
||||
public float changeRate = 1.0f;
|
||||
|
||||
[Tooltip("List of color animation targets")]
|
||||
public Renderer[] animatedRenderers;
|
||||
|
||||
/// <summary>
|
||||
/// Specifies whether the player is firing or not.
|
||||
/// </summary>
|
||||
public bool firing { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The move vector of the player that specifies movement direction and magnitude.
|
||||
/// </summary>
|
||||
public Vector2 move { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Get the current color of the player.
|
||||
/// </summary>
|
||||
/// <returns>Current color.</returns>
|
||||
public Color GetColor() => GetColor(m_OmniFire); //m_Material != null ? m_Material.GetColor(Color1) : Color.black;
|
||||
|
||||
/// <summary>
|
||||
/// Request mode change.
|
||||
/// </summary>
|
||||
public void Change()
|
||||
{
|
||||
m_ChangeRequested = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rotate the player by the given angle.
|
||||
/// </summary>
|
||||
/// <param name="angle">Angle in degrees (additive).</param>
|
||||
public void Rotate(float angle)
|
||||
{
|
||||
m_RotationAngle += angle;
|
||||
}
|
||||
|
||||
private static readonly int Color1 = Shader.PropertyToID("_Color");
|
||||
|
||||
private Material m_Material;
|
||||
private Vector3 m_TargetEulerAngles;
|
||||
private Color m_TargetColor;
|
||||
private Color m_Color;
|
||||
private float m_TargetScale;
|
||||
|
||||
private int m_ColorIndex;
|
||||
private float m_TimeUntilNextFire;
|
||||
private float m_TimeUntilNextChange;
|
||||
private bool m_OmniFire;
|
||||
private bool m_ChangeRequested;
|
||||
|
||||
private float m_TargetBeltAngle;
|
||||
private float m_BeltAngle;
|
||||
private float m_BarrelPosition;
|
||||
private float m_RotationAngle;
|
||||
|
||||
private ObjectPool<Bullet> m_ObjectPool;
|
||||
|
||||
private Rigidbody m_Rigidbody;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
m_Rigidbody = GetComponent<Rigidbody>();
|
||||
|
||||
m_BarrelPosition = barrel.transform.localPosition.y;
|
||||
|
||||
fireObject.transform.localScale = m_OmniFire ? Vector3.zero : Vector3.one;
|
||||
omniFireObject.transform.localScale = m_OmniFire ? Vector3.one : Vector3.zero;
|
||||
|
||||
m_TargetColor = GetColor(m_OmniFire);
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
// Note that this creates a instance (copy) of the material we want to animate.
|
||||
// When then assign the instance to all tagged child renderers to benefit from
|
||||
// batching and allow animating color without affecting the asset in editor.
|
||||
foreach (var animatedRenderer in animatedRenderers)
|
||||
{
|
||||
if (animatedRenderer == null)
|
||||
continue;
|
||||
if (m_Material == null)
|
||||
m_Material = animatedRenderer.material;
|
||||
else
|
||||
animatedRenderer.sharedMaterial = m_Material;
|
||||
}
|
||||
#else
|
||||
// When not in editor we can safely modify the shared material without
|
||||
// indirectly changing the source material.
|
||||
m_Material = animatedRenderers[0].sharedMaterial;
|
||||
#endif
|
||||
|
||||
// Create an object pool for bullets/projectiles
|
||||
m_ObjectPool = new ObjectPool<Bullet>(
|
||||
createFunc: () =>
|
||||
{
|
||||
var bullet = Instantiate(particle).GetComponent<Bullet>();
|
||||
bullet.Initialize(manager, m_ObjectPool);
|
||||
return bullet;
|
||||
},
|
||||
actionOnGet: (bullet) => bullet.gameObject.SetActive(true),
|
||||
actionOnRelease: (bullet) => bullet.gameObject.SetActive(false),
|
||||
actionOnDestroy: (bullet) => Destroy(bullet.gameObject));
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
m_TimeUntilNextFire = 0.0f;
|
||||
m_TimeUntilNextChange = 0.0f;
|
||||
}
|
||||
|
||||
private void UpdateFire(float deltaTime)
|
||||
{
|
||||
if (Throttle(ref m_TimeUntilNextFire, firing, deltaTime, m_OmniFire ? omniFireRate : fireRate))
|
||||
return;
|
||||
|
||||
// Fire in all directions with 45 degree offset for each bullet
|
||||
if (m_OmniFire)
|
||||
{
|
||||
for (var i = 0; i < 8; ++i)
|
||||
FireBullet(Quaternion.AngleAxis(i * 45.0f, Vector3.forward) * transform.up);
|
||||
return;
|
||||
}
|
||||
|
||||
// Else: Fire in forward direction
|
||||
FireBullet(transform.up);
|
||||
}
|
||||
|
||||
private static bool Throttle(ref float remainingTime, bool condition, float deltaTime, float timeUntilNextEvent)
|
||||
{
|
||||
remainingTime -= deltaTime;
|
||||
if (remainingTime > 0.0f)
|
||||
return true; // Enough time has not elapsed
|
||||
if (condition)
|
||||
remainingTime += timeUntilNextEvent;
|
||||
if (remainingTime < 0.0f)
|
||||
remainingTime = 0.0f;
|
||||
return !condition;
|
||||
}
|
||||
|
||||
private void FireBullet(Vector3 direction)
|
||||
{
|
||||
// Fire a single bullet in the direction of the player, approximately originating from the muzzle.
|
||||
var bullet = m_ObjectPool.Get();
|
||||
bullet.direction = direction;
|
||||
bullet.transform.position = transform.position + direction.normalized * (1.6f * transform.lossyScale.y);
|
||||
|
||||
// Animate barrel to simulate recoil
|
||||
var pos = barrel.transform.localPosition;
|
||||
barrel.transform.localPosition = new Vector3(pos.x, m_BarrelPosition - 0.2f, pos.z);
|
||||
|
||||
// Rotate the belt for each fired round, simulated a reload
|
||||
m_BeltAngle += 45.0f;
|
||||
}
|
||||
|
||||
private void UpdateChangeWeapon(float deltaTime)
|
||||
{
|
||||
if (Throttle(ref m_TimeUntilNextChange, m_ChangeRequested, deltaTime, changeRate))
|
||||
return;
|
||||
m_ChangeRequested = false;
|
||||
|
||||
// Change weapon, animate change, belt rotation, color
|
||||
m_OmniFire = !m_OmniFire;
|
||||
m_TargetScale = m_OmniFire ? 1.0f : 0.0f;
|
||||
m_BeltAngle += 360.0f;
|
||||
m_TargetColor = GetColor(m_OmniFire);
|
||||
}
|
||||
|
||||
private void UpdateRotate()
|
||||
{
|
||||
// We do not want to use physics for this rotation to give a more direct feel.
|
||||
transform.Rotate(Vector3.forward, m_RotationAngle, Space.World);
|
||||
|
||||
// Reset rotation angle and let it accumulate until next update.
|
||||
m_RotationAngle = 0;
|
||||
}
|
||||
|
||||
private void OnCollisionEnter(Collision other)
|
||||
{
|
||||
// If we collide with an enemy
|
||||
if (other.gameObject.GetComponent<Enemy>())
|
||||
{
|
||||
// Create an explosion matching our current color
|
||||
Color.RGBToHSV(GetColor(), out float h, out float s, out float v);
|
||||
var explosionColor = Color.HSVToRGB(h, s * 0.5f, v);
|
||||
manager.Explosion(transform, other.GetContact(0).point, 0.5f, explosionColor, m_Material);
|
||||
|
||||
// End the game
|
||||
manager.GameOver();
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// Update game logic
|
||||
var deltaTime = Time.deltaTime;
|
||||
UpdateFire(deltaTime);
|
||||
UpdateChangeWeapon(deltaTime);
|
||||
UpdateRotate();
|
||||
if (manager.TryTeleportOrthographicExtents(transform.position, out var result))
|
||||
transform.position = result;
|
||||
|
||||
// Animate
|
||||
AnimateChangeWeapon(deltaTime);
|
||||
AnimateFireWeapon(deltaTime);
|
||||
AnimateColors(deltaTime);
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
// Use physics to animate player movement to get a feeling of inertia.
|
||||
//var moveValue = move.action.ReadValue<Vector2>();
|
||||
var y = move.y;
|
||||
if (y < 0.0f)
|
||||
y *= 0.33f;
|
||||
#if UNITY_6000_0_OR_NEWER
|
||||
var velocityMagnitude = m_Rigidbody.linearVelocity.magnitude;
|
||||
#else
|
||||
var velocityMagnitude = m_Rigidbody.velocity.magnitude;
|
||||
#endif
|
||||
if (velocityMagnitude < 10.0f)
|
||||
m_Rigidbody.AddRelativeForce(Vector3.up * (10.0f * y) + Vector3.right * (5.0f * move.x), ForceMode.Acceleration);
|
||||
}
|
||||
|
||||
private void AnimateChangeWeapon(float deltaTime)
|
||||
{
|
||||
// Animate scale of fire vs omni-fire to be the inverse of each other
|
||||
var omniFireScale = Mathf.Lerp(omniFireObject.transform.localScale.x, m_TargetScale, deltaTime * 10.0f);
|
||||
fireObject.transform.localScale = new Vector3(1.0f - omniFireScale, 1.0f - omniFireScale, 1.0f - omniFireScale);
|
||||
omniFireObject.transform.localScale = new Vector3(omniFireScale, omniFireScale, omniFireScale);
|
||||
}
|
||||
|
||||
private void AnimateFireWeapon(float deltaTime)
|
||||
{
|
||||
// Animate belt angle to simulate bullet reload
|
||||
m_BeltAngle = Mathf.Lerp(m_BeltAngle, m_TargetBeltAngle, deltaTime * 10.0f);
|
||||
belt.transform.localEulerAngles = new Vector3(0, m_BeltAngle, 0);
|
||||
|
||||
// Animate barrel back to rest position after bullet has been fired
|
||||
var localPosition = barrel.transform.localPosition;
|
||||
barrel.transform.localPosition = new Vector3(
|
||||
localPosition.x,
|
||||
Mathf.Lerp(localPosition.y, m_BarrelPosition, deltaTime * 10.0f),
|
||||
localPosition.z);
|
||||
}
|
||||
|
||||
private void AnimateColors(float deltaTime)
|
||||
{
|
||||
var color = Color.Lerp(m_Material.color, m_TargetColor, deltaTime * 2.0f);
|
||||
if (color != GetColor())
|
||||
{
|
||||
// Update material
|
||||
m_Material.SetColor(Color1, color);
|
||||
}
|
||||
}
|
||||
|
||||
private static Color GetColor(bool omniFire)
|
||||
{
|
||||
return omniFire ? Color.yellow : Color.red;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0a97c93226e2448b2ac01ab952c481e7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0f92337866e254da99f12fd4390ecc7c
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,116 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine.InputSystem.Controls;
|
||||
using UnityEngine.InputSystem.DualShock;
|
||||
using UnityEngine.InputSystem.XR;
|
||||
|
||||
namespace UnityEngine.InputSystem.Samples.RebindUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Component that integrates Input System actions with the player object.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(Player))]
|
||||
[DefaultExecutionOrder(-1)] // We need this to run before Player to avoid potential additional latency
|
||||
public class PlayerController : MonoBehaviour
|
||||
{
|
||||
[Tooltip("The move action, must generate Vector2")]
|
||||
public InputActionReference move;
|
||||
|
||||
[Tooltip("The move action, must generate Vector2")]
|
||||
public InputActionReference look;
|
||||
|
||||
[Tooltip("The move action, must generate Button value")]
|
||||
public InputActionReference fire;
|
||||
|
||||
[Tooltip("The move action, must generate Button value")]
|
||||
public InputActionReference change;
|
||||
|
||||
[Tooltip("Feedback controller handling device feedback")]
|
||||
public FeedbackController feedbackController;
|
||||
|
||||
// Cached actions to avoid excessive memory allocation on binding callback functions
|
||||
private Action<InputAction.CallbackContext> m_OnFire;
|
||||
private Action<InputAction.CallbackContext> m_OnChange;
|
||||
|
||||
// Required player reference
|
||||
private Player m_Player;
|
||||
|
||||
private const float kMouseSensitivity = 0.4f;
|
||||
private const float kGamepadSensitivity = 1.0f;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
// Get required player instance
|
||||
m_Player = GetComponent<Player>();
|
||||
Debug.Assert(m_Player != null);
|
||||
|
||||
// Create (and cache) actions
|
||||
m_OnFire = OnFire;
|
||||
m_OnChange = OnChange;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
// Monitor button interaction via callbacks to not miss them.
|
||||
fire.action.performed += m_OnFire;
|
||||
change.action.performed += m_OnChange;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
fire.action.performed -= m_OnFire;
|
||||
change.action.performed -= m_OnChange;
|
||||
|
||||
feedbackController.color = Color.black;
|
||||
}
|
||||
|
||||
private void OnFire(InputAction.CallbackContext context)
|
||||
{
|
||||
var isFiring = context.action.IsPressed();
|
||||
|
||||
if (isFiring)
|
||||
feedbackController?.RecordRecentDeviceFromAction(context.action);
|
||||
|
||||
m_Player.firing = isFiring;
|
||||
}
|
||||
|
||||
private void OnChange(InputAction.CallbackContext context)
|
||||
{
|
||||
feedbackController?.RecordRecentDeviceFromAction(context.action);
|
||||
|
||||
m_Player.Change();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
// Sample desired move direction and magnitude based on move input per update.
|
||||
var moveValue = move.action.ReadValue<Vector2>();
|
||||
m_Player.move = moveValue;
|
||||
if (moveValue.sqrMagnitude > 0.05f)
|
||||
feedbackController?.RecordRecentDeviceFromAction(move);
|
||||
|
||||
// Sample desired rotation angle based on look input per update:
|
||||
// - If the underlying control is a relative control we should not scale with time, but rely
|
||||
// on accumulated provided via action, e.g. accumulated (sum of) deltas since last update.
|
||||
// - If the underlying control is absolute, we scale magnitude with elapsed time to sample
|
||||
// the absolute state to behave like a per-update relative delta control.
|
||||
if (look != null && look.action != null)
|
||||
{
|
||||
var lookValue = look.action.ReadValue<Vector2>();
|
||||
if (lookValue.sqrMagnitude > 0.05f)
|
||||
feedbackController?.RecordRecentDeviceFromAction(look);
|
||||
|
||||
var timeInvariant = look.action.activeControl is DeltaControl;
|
||||
var scale = timeInvariant ?
|
||||
1.0f * kMouseSensitivity :
|
||||
Time.deltaTime * 300.0f * kGamepadSensitivity;
|
||||
var angle = lookValue.x * -1.0f * scale;
|
||||
m_Player.Rotate(angle);
|
||||
}
|
||||
|
||||
// Let player color feedback on device when supported
|
||||
if (feedbackController != null)
|
||||
feedbackController.color = m_Player.GetColor();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ecff6c5f10b3948158e8f9e2955d591a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,84 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: PlayerMaterial
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _EMISSION
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 2
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 0.9999878, g: 0.00000610655, b: 5.213871e-15, a: 1}
|
||||
- _EmissionColor: {r: 0.27450982, g: 0.078431375, b: 0.19607843, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a5b0ca71d8db548cf8e1a012f993e105
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,84 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: PlayerMaterial2
|
||||
m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords:
|
||||
- _EMISSION
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 2
|
||||
m_EnableInstancingVariants: 0
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0.502
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 0.27999285, g: 0.49056602, b: 0.4855082, a: 1}
|
||||
- _EmissionColor: {r: 0.27, g: 0.07830001, b: 0.19331999, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a18eb2f16b9964e128f4a3e801106785
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user