Added sprite dissolve shader

This commit is contained in:
OMGeeky
2022-05-22 14:18:07 +02:00
parent 00e20ebbb0
commit fc47e7d8f4
33 changed files with 13676 additions and 2455 deletions

View File

@@ -7,21 +7,22 @@ using Unity.Mathematics;
using UnityEngine;
[RequireComponent( typeof(Renderer) )]
[RequireComponent( typeof(SpriteRenderer) )]
public class Character : MonoBehaviour
{
public bool isActivePlayer;
public Character root;
#region Components
private new Collider2D collider;
private SpriteRenderer spriteRenderer;
#endregion
#region Inspector
[SerializeField] public bool isActivePlayer;
[SerializeField] private Sprite aliveSprite;
[SerializeField] private Sprite deadSprite;
[SerializeField] private float dissolveSpeed = 0.05f;
[SerializeField] private Transform spawnPosition;
[SerializeField] private Transform parentForNew;
@@ -31,6 +32,12 @@ public class Character : MonoBehaviour
#endregion
#region Other public data
public Character root;
#endregion
#region Events
public event Action<Character> Killed;
@@ -41,10 +48,11 @@ public class Character : MonoBehaviour
public List<Character> spawnedObjects = new();
private static readonly int DissolveAmount = Shader.PropertyToID( "_DissolveAmount" );
private readonly Collider2D[] findColliders = new Collider2D[50];
private IEnumerator Start()
private void Start()
{
yield return new WaitForSeconds( 0.5f );
// yield return new WaitForSeconds( 0.5f );
if ( root == null )
{
@@ -58,9 +66,9 @@ public class Character : MonoBehaviour
private void OnEnable()
{
GetComponent<InputToMovement>();
GetComponent<CharacterController2D>();
collider = GetComponent<Collider2D>();
spriteRenderer = GetComponent<SpriteRenderer>();
spriteRenderer.sprite = aliveSprite;
if ( root != null )
{
Spawned -= OnSpawned;
@@ -93,6 +101,7 @@ public class Character : MonoBehaviour
// inputToMovement.enabled = false;
isActivePlayer = false;
SpawnNew();
spriteRenderer.sprite = deadSprite;
// newPlayer.GetComponent<InputToMovement>().enabled = true;
// newPlayer.GetComponent<CharacterController2D>().enabled = true;
@@ -126,15 +135,18 @@ public class Character : MonoBehaviour
float closestDistance = float.MaxValue;
var t = transform;
var localScale = t.localScale;
Collider2D[] colliders = new Collider2D[50];
Array.Clear( findColliders , 0 , findColliders.Length );
Physics2D.OverlapBoxNonAlloc( point: t.position
, size: new Vector2( localScale.x + range , localScale.y + range )
, angle: t.rotation.eulerAngles.z
, results: colliders
, results: findColliders
, layerMask: findLayerMask );
foreach ( Collider2D coll in colliders )
foreach ( Collider2D coll in findColliders )
{
if ( coll == null )
continue;
if ( !coll.TryGetComponent( out Character character ) )
continue;

View File

@@ -10,6 +10,7 @@ using UnityEngine.Events;
/// </summary>
public class CharacterController2D : MonoBehaviour
{
public bool active = true;
[SerializeField] private float jumpForce = 50f; // Amount of force added when the player jumps.
[Range( 0 , .3f )] [SerializeField] private float movementSmoothing = .05f;// How much to smooth out the movement
[SerializeField] private bool airControl = true; // Whether or not a player can steer while jumping;
@@ -33,6 +34,9 @@ public class CharacterController2D : MonoBehaviour
private void FixedUpdate()
{
if ( !active )
return;
m_Grounded = false;
Array.Clear( colliders , 0 , colliders.Length );
@@ -65,6 +69,9 @@ public class CharacterController2D : MonoBehaviour
public void Move( float move , bool jump )
{
if(!active)
return;
//only control the player if grounded or airControl is turned on
if ( m_Grounded || airControl )
{

View File

@@ -1,6 +1,7 @@
using System;
using UnityEngine;
// ReSharper disable RedundantCheckBeforeAssignment
[RequireComponent( typeof(CharacterController2D) , typeof(Character) )]
@@ -13,8 +14,6 @@ public class InputToMovement : MonoBehaviour
{
controller2D = GetComponent<CharacterController2D>();
character = GetComponent<Character>();
// interactTimer = 0;
}
// Update is called once per frame
@@ -27,16 +26,15 @@ public class InputToMovement : MonoBehaviour
private void Update()
{
if(controller2D.active != character.isActivePlayer)
controller2D.active = character.isActivePlayer;
if ( !character.isActivePlayer )
return;
// if ( controller2D == null )
// return;
var horizontal = Input.GetAxis( "Horizontal" );
var jump = Input.GetButton( "Jump" );
// var crouch = Input.GetButton( "Crouch" );
if ( horizontal != 0 || jump )
{
controller2D.Move( horizontal , jump );