diff options
author | chai <chaifix@163.com> | 2022-04-18 15:48:28 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-04-18 15:48:28 +0800 |
commit | dc5edaf1025ff4cebaa41eba9a36f854b80d91ec (patch) | |
tree | 6d7a0c789506397f0262c5b3f1eb86ffddde97f8 /AlienSurvival/Assets/Test/Scripts | |
parent | b1882e100887ff1ce6cd6902109a25aea4a20fa5 (diff) |
*misc
Diffstat (limited to 'AlienSurvival/Assets/Test/Scripts')
8 files changed, 223 insertions, 40 deletions
diff --git a/AlienSurvival/Assets/Test/Scripts/TestBrokenPiece.cs b/AlienSurvival/Assets/Test/Scripts/TestBrokenPiece.cs new file mode 100644 index 0000000..4399886 --- /dev/null +++ b/AlienSurvival/Assets/Test/Scripts/TestBrokenPiece.cs @@ -0,0 +1,107 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class TestBrokenPiece : MonoBehaviour +{ + [SerializeField] private List<Sprite> m_Pieces; + + private TestFakeHeight m_Coord; + + private Vector3 m_Velocity; + + private Vector3 m_Gravity = new Vector3(0, 0, -9.8f); + + private float m_Damp = 0.5f; + + private SpriteRenderer m_SpriteRenderer; + + enum State + { + Avlie , + Dead , + } + + State m_State; + + private void Awake() + { + m_Coord = GetComponent<TestFakeHeight>(); + m_SpriteRenderer = GetComponent<SpriteRenderer>(); + } + + public void Set(Vector3 position, Vector3 dir, float speed, int index) + { + m_Coord = GetComponent<TestFakeHeight>(); + m_SpriteRenderer = GetComponent<SpriteRenderer>(); + + m_Coord.x = position.x; + m_Coord.y = position.y; + m_Coord.height = position.z; + + m_Velocity = dir * speed; + + m_SpriteRenderer.sprite = m_Pieces[index % m_Pieces.Count]; + + m_State = State.Avlie; + } + + private void Update() + { + if(m_State == State.Avlie) + { + m_Velocity += m_Gravity * Time.deltaTime; + + m_Coord.x += m_Velocity.x * Time.deltaTime; + m_Coord.y += m_Velocity.y * Time.deltaTime; + m_Coord.height += m_Velocity.z * Time.deltaTime; + + if (m_Coord.height < 0) + { + m_Coord.height = 0; + + // bounce + m_Velocity.x = m_Velocity.x * m_Damp; + m_Velocity.y = m_Velocity.y * m_Damp; + m_Velocity.z = -m_Velocity.z * m_Damp; + + if (m_Velocity.magnitude < 0.1f) + { + m_State = State.Dead; + StartCoroutine(coDead(Random.Range(1f, 3f))); + } + } + } + else if(m_State == State.Dead) + { + } + } + + IEnumerator coDead( float time) + { + Color c = m_SpriteRenderer.color; + + float t = 0; + while (true) + { + t += Time.deltaTime; + + c.a = (time - t) / time; + + m_SpriteRenderer.color = c; + + if(t > time) + { + break; + } + + yield return null; + } + + this.gameObject.SetActive(false); + Destroy(this.gameObject); + + yield break; + } + +} diff --git a/AlienSurvival/Assets/Test/Scripts/TestBrokenPiece.cs.meta b/AlienSurvival/Assets/Test/Scripts/TestBrokenPiece.cs.meta new file mode 100644 index 0000000..73da026 --- /dev/null +++ b/AlienSurvival/Assets/Test/Scripts/TestBrokenPiece.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7182d8bf5ade5c47a2a98ae355119f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AlienSurvival/Assets/Test/Scripts/TestBucket.cs b/AlienSurvival/Assets/Test/Scripts/TestBucket.cs new file mode 100644 index 0000000..010df5e --- /dev/null +++ b/AlienSurvival/Assets/Test/Scripts/TestBucket.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class TestBucket : MonoBehaviour +{ + [SerializeField] private TestBrokenPiece m_Piece; + + private TestFakeHeight m_Coord; + + private void Awake() + { + m_Coord = GetComponent<TestFakeHeight>(); + } + + public void Broken() + { + for(int i = 0; i < 10; ++i) + { + TestBrokenPiece piece = Instantiate<TestBrokenPiece>(m_Piece); + piece.Set(m_Coord.position + new Vector3(0,0,1f), + new Vector3(Random.Range(-1f,1f), Random.Range(-1f, 1f), Random.Range(0.5f, 2f)).normalized, Random.Range(1f, 3f) + , i); + } + + this.gameObject.SetActive(false); + Destroy(this.gameObject); + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/AlienSurvival/Assets/Test/Scripts/TestBucket.cs.meta b/AlienSurvival/Assets/Test/Scripts/TestBucket.cs.meta new file mode 100644 index 0000000..3d9e92b --- /dev/null +++ b/AlienSurvival/Assets/Test/Scripts/TestBucket.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3861aac24d796348936aa3f51d27a97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AlienSurvival/Assets/Test/Scripts/TestMathHelper.cs b/AlienSurvival/Assets/Test/Scripts/TestMathHelper.cs index e2ca833..239d8ed 100644 --- a/AlienSurvival/Assets/Test/Scripts/TestMathHelper.cs +++ b/AlienSurvival/Assets/Test/Scripts/TestMathHelper.cs @@ -13,4 +13,31 @@ public class TestMathHelper : MonoBehaviour ); } + /// <summary> + /// ·µ»Ø½Ç¶È + /// </summary> + /// <param name="vector2"></param> + /// <returns></returns> + public static float Angle(Vector2 vector2) + { + return 360 - (Mathf.Atan2(vector2.y, vector2.x) * Mathf.Rad2Deg * Mathf.Sign(vector2.y)); + } + + public static int Check(bool condition) + { + return condition ? 1 : 0; + } + + //public static float Angle(Vector2 vector2) + //{ + // if (vector2.x < 0) + // { + // return 360 - (Mathf.Atan2(vector2.x, vector2.y) * Mathf.Rad2Deg * -1); + // } + // else + // { + // return Mathf.Atan2(vector2.x, vector2.y) * Mathf.Rad2Deg; + // } + //} + }
\ No newline at end of file diff --git a/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs b/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs index 2ec06e0..b1534f3 100644 --- a/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs +++ b/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs @@ -224,14 +224,6 @@ public class TestPeaceMaker : MonoBehaviour return true; } - Vector3 GetRandomDirection() - { - Vector3 dirOnPlane = Quaternion.Euler(0, 0, Random.Range(-15f, 15f)) * new Vector3(m_AimDirection.x, m_AimDirection.y, 0); - dirOnPlane = dirOnPlane.normalized; - Vector3 dir = new Vector3(dirOnPlane.x, dirOnPlane.y, Random.Range(0f,0.5f)).normalized; - return dir.normalized; - } - IEnumerator coFire(float interval) { while (true) @@ -256,17 +248,30 @@ public class TestPeaceMaker : MonoBehaviour return bullet; } + + Vector3 GetRandomLaunchGrenadeDirection() + { + Vector3 dirOnPlane = Quaternion.Euler(0, 0, Random.Range(-15f, 15f)) * new Vector3(m_AimDirection.x, m_AimDirection.y, 0); + dirOnPlane = dirOnPlane.normalized; + Vector3 dir = new Vector3(dirOnPlane.x, dirOnPlane.y, Random.Range(0f, 1f)).normalized; + return dir.normalized; + } + IEnumerator coLaunchGrenade(float interval) { while (true) { + // grenade TestPeaceMakerGrenade grenade = Instantiate<TestPeaceMakerGrenade>(m_Grenade); - Vector3 position = m_FakeHeight.position + new Vector3(0, 0, 1.8f); - - grenade.Set(position, GetRandomDirection(), Random.Range(8f, 10f)); + grenade.Set(position, GetRandomLaunchGrenadeDirection(), Random.Range(8f, 10f)); grenade.gameObject.SetActive(true); + // vfx + GameObject eff = Instantiate<GameObject>(m_LaunchVfx, this.transform); + eff.transform.position = m_LaunchVfx.transform.position; + eff.SetActive(true); + yield return new WaitForSeconds(interval); } } diff --git a/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs b/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs index bab2472..8229753 100644 --- a/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs +++ b/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs @@ -36,4 +36,16 @@ public class TestPeaceMakerBullet : MonoBehaviour transform.position = pos; } + + private void OnTriggerEnter2D(Collider2D collision) + { + TestBucket bucket = collision.gameObject.GetComponent<TestBucket>(); + + if (bucket) + { + bucket.Broken(); + } + + } + } diff --git a/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs b/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs index dafd7e0..665c406 100644 --- a/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs +++ b/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs @@ -63,34 +63,6 @@ public class TestWaspRobot : MonoBehaviour void Update() { - //float distance = (m_Follow.positionOnGround - m_Coords.positionOnGround).magnitude; - //m_Following = distance > m_Radius + 0.1f; - - //if (m_Following) - //{ - // Vector2 dir = (m_Follow.positionOnGround - m_Coords.positionOnGround).normalized; - - // Vector2 posOnGround = m_Coords.positionOnGround; - // posOnGround.x += m_MoveSpeed * Time.deltaTime * dir.x; - // posOnGround.y += m_MoveSpeed * Time.deltaTime * dir.y; - - // m_Coords.positionOnGround = posOnGround; - - // //m_SpriteRenderer.flipX = m_Follow.x < m_Coords.x; - //} - //else - //{ - // m_Angle += Time.deltaTime * m_OrbitSpeed; - - // Vector2 centre = m_Follow.positionOnGround; - // centre += new Vector2(Mathf.Cos(m_Angle), Mathf.Sin(m_Angle)).normalized * m_Radius; - // m_Coords.positionOnGround = centre; - - // int index = ((int)Mathf.Floor(((m_Angle * Mathf.Rad2Deg) % 360) / 30)) % 12; - // m_SpriteRenderer.sprite = m_Sprites[index]; - // m_Shadow.sprite = m_Sprites[index]; - //} - float distance = (m_Follow.positionOnGround - m_Coords.positionOnGround).magnitude; m_Following = distance > m_Radius + 0.1f; @@ -121,6 +93,9 @@ public class TestWaspRobot : MonoBehaviour m_Coords.positionOnGround = posOnGround; float rad = GetAngleToTarget(); + + Debug.Log(rad * Mathf.Rad2Deg); + int index = GetSpriteIndex(rad); SetSprite(index); } @@ -155,7 +130,7 @@ public class TestWaspRobot : MonoBehaviour Vector2 dir = (posOnGround - target).normalized; - return Mathf.Atan2(dir.y, dir.x); + return Mathf.Atan2(dir.y, dir.x) + 2 * Mathf.PI * TestMathHelper.Check(dir.y < 0); } // angle rad |