summaryrefslogtreecommitdiff
path: root/AlienSurvival/Assets/Test/Scripts
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-04-16 16:20:20 +0800
committerchai <chaifix@163.com>2022-04-16 16:20:20 +0800
commit6cf30c620615508705e2e800c04eebb7a45e6e04 (patch)
tree7383063f55f9709a5d9fb55caa1b37ad02a7cc11 /AlienSurvival/Assets/Test/Scripts
parent67eb78bc7820f189b60da157dddea1ec16ade65a (diff)
+ plant test
Diffstat (limited to 'AlienSurvival/Assets/Test/Scripts')
-rw-r--r--AlienSurvival/Assets/Test/Scripts/TestAstro.cs65
-rw-r--r--AlienSurvival/Assets/Test/Scripts/TestFakeHeight.cs86
-rw-r--r--AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs182
-rw-r--r--AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs.meta11
-rw-r--r--AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs39
-rw-r--r--AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs.meta11
-rw-r--r--AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs175
-rw-r--r--AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs.meta11
8 files changed, 557 insertions, 23 deletions
diff --git a/AlienSurvival/Assets/Test/Scripts/TestAstro.cs b/AlienSurvival/Assets/Test/Scripts/TestAstro.cs
index 3d7fd2d..3b4df18 100644
--- a/AlienSurvival/Assets/Test/Scripts/TestAstro.cs
+++ b/AlienSurvival/Assets/Test/Scripts/TestAstro.cs
@@ -4,18 +4,21 @@ using UnityEngine;
public class TestAstro : MonoBehaviour
{
- [SerializeField]
- private float m_Speed;
+ [SerializeField] private Transform m_Camera;
- [SerializeField]
- private SpriteRenderer m_Shadow;
+ [SerializeField] private float m_Speed;
+
+ [SerializeField] private SpriteRenderer m_Shadow;
+
+ private SpriteRenderer m_SpriteRenderer;
+ private TestFakeHeight m_FakeHeight;
- private SpriteRenderer m_SpriteRenderer;
+
void Start()
{
m_SpriteRenderer = GetComponent<SpriteRenderer>();
-
+ m_FakeHeight = GetComponent<TestFakeHeight>();
}
void Update()
@@ -23,23 +26,51 @@ public class TestAstro : MonoBehaviour
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
- Vector2 direction = new Vector2(x, y).normalized;
+ Vector3 targetZoom = Vector3.one;
+
+ if(x != 0 || y != 0)
+ {
+ targetZoom = new Vector3(1f, 1f, 1);
+
+ Vector2 direction = new Vector2(x, y).normalized;
- Vector3 position = transform.position;
- position.x += direction.x * m_Speed * Time.deltaTime;
- position.y += direction.y * m_Speed * Time.deltaTime;
+ Vector3 position = transform.position;
+ position.x += direction.x * m_Speed * Time.deltaTime;
+ position.y += direction.y * m_Speed * Time.deltaTime;
- transform.position = position;
+ transform.position = position;
- if (x > 0)
+ if (x > 0)
+ {
+ m_SpriteRenderer.flipX = false;
+ m_Shadow.flipX = false;
+ }
+ else if (x < 0)
+ {
+ m_SpriteRenderer.flipX = true;
+ m_Shadow.flipX = true;
+ }
+ }
+ else
{
- m_SpriteRenderer.flipX = false;
- m_Shadow.flipX = false;
+ targetZoom = new Vector3(0.5f, 0.5f, 1);
}
- else if (x < 0)
+
+ Vector3 zoom = m_Camera.localScale;
+ m_Camera.localScale = Vector3.Lerp(zoom, targetZoom, Time.deltaTime);
+
+ CameraFollow();
+ }
+
+ void CameraFollow()
+ {
+ Vector3 pos = m_Camera.position;
+ pos.x = m_FakeHeight.x;
+ pos.y = m_FakeHeight.y;
+
+ if(Vector3.Distance(pos, m_Camera.position) > 0.1f)
{
- m_SpriteRenderer.flipX = true;
- m_Shadow.flipX = true;
+ m_Camera.position = Vector3.Lerp(m_Camera.position, pos, 3 * Time.deltaTime);
}
}
diff --git a/AlienSurvival/Assets/Test/Scripts/TestFakeHeight.cs b/AlienSurvival/Assets/Test/Scripts/TestFakeHeight.cs
index 06fe545..35174a5 100644
--- a/AlienSurvival/Assets/Test/Scripts/TestFakeHeight.cs
+++ b/AlienSurvival/Assets/Test/Scripts/TestFakeHeight.cs
@@ -4,11 +4,85 @@ using UnityEngine;
public class TestFakeHeight : MonoBehaviour
{
- [SerializeField]
- private float m_Height; // fake height
-
- void Update()
+ [SerializeField] private Transform m_Shadow;
+
+ public float height { get { return m_Height; } set { m_Height = value; } }
+ [SerializeField] private float m_Height; // current fake height
+
+ public float x
+ {
+ get
+ {
+ return transform.position.x;
+ }
+
+ set
+ {
+ Vector3 pos = transform.position;
+ pos.x = value;
+ transform.position = pos;
+ }
+ }
+
+ public float y
+ {
+ get
+ {
+ return transform.position.y - m_Height;
+ }
+ set
+ {
+ Vector3 pos = transform.position;
+ pos.y = value + m_Height;
+ transform.position = pos;
+ }
+ }
+
+ public Vector3 position
+ {
+ get
+ {
+ Vector3 pos = new Vector3(x, y, height);
+ return pos;
+ }
+ }
+
+ public Vector2 positionOnGround
+ {
+ get
+ {
+ Vector2 pos = new Vector2(x, y);
+ return pos;
+ }
+ set
+ {
+ x = value.x;
+ y = value.y;
+ }
+ }
+
+ private float m_PreHeight;
+
+ private SpriteRenderer m_SpriteRenderer;
+
+ private void OnEnable()
+ {
+ m_SpriteRenderer = GetComponent<SpriteRenderer>();
+ m_PreHeight = m_Height;
+ }
+
+ void Update()
{
-
- }
+ Vector3 pos = transform.position;
+
+ pos.y = pos.y - m_PreHeight + m_Height;
+ transform.position = pos;
+
+ m_Shadow.position = new Vector3(transform.position.x, transform.position.y - m_Height, transform.position.z);
+
+ m_PreHeight = m_Height;
+
+ // ¸ù¾ÝyÉèÖÃsortOrder
+ m_SpriteRenderer.sortingOrder =(int) (-y * 100);
+ }
}
diff --git a/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs b/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs
new file mode 100644
index 0000000..7b1a43d
--- /dev/null
+++ b/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs
@@ -0,0 +1,182 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Events;
+
+public class TestPeaceMaker : MonoBehaviour
+{
+
+ [SerializeField] private Transform m_Camera;
+ [SerializeField] private float m_Speed;
+ [SerializeField] private SpriteRenderer m_Shadow;
+ [SerializeField] private Transform m_Centre;
+ [SerializeField] private SpriteRenderer m_Arrow;
+ [SerializeField] private float m_ArrowRadius;
+ [SerializeField] private TestPeaceMakerBullet m_Bullet;
+ [SerializeField] private Vector2 m_Zoom;
+
+ private SpriteRenderer m_SpriteRenderer;
+ private TestFakeHeight m_FakeHeight;
+ private Coroutine m_CoFire;
+
+ private Vector3 m_PreMouse;
+
+ private Vector2 m_AimDirection;
+
+ private enum ControlMode
+ {
+ Mouse,
+ Joystick,
+ }
+ private ControlMode m_ControlMode;
+
+ void Start()
+ {
+ m_SpriteRenderer = GetComponent<SpriteRenderer>();
+ m_FakeHeight = GetComponent<TestFakeHeight>();
+
+ m_ControlMode = ControlMode.Mouse;
+ m_AimDirection = Vector2.zero;
+ }
+
+ void Update()
+ {
+ float x = Input.GetAxisRaw("Horizontal");
+ float y = Input.GetAxisRaw("Vertical");
+
+ Vector3 targetZoom = Vector3.one;
+
+ if (x != 0 || y != 0)
+ {
+ targetZoom = new Vector3(m_Zoom.y, m_Zoom.y, 1);
+
+ Vector2 direction = new Vector2(x, y).normalized;
+
+ Vector3 position = transform.position;
+ position.x += direction.x * m_Speed * Time.deltaTime;
+ position.y += direction.y * m_Speed * Time.deltaTime;
+
+ transform.position = position;
+
+ if (x > 0)
+ {
+ m_SpriteRenderer.flipX = false;
+ m_Shadow.flipX = false;
+ }
+ else if (x < 0)
+ {
+ m_SpriteRenderer.flipX = true;
+ m_Shadow.flipX = true;
+ }
+ }
+ else
+ {
+ targetZoom = new Vector3(m_Zoom.x, m_Zoom.x, 1);
+ }
+
+ Vector3 zoom = m_Camera.localScale;
+ m_Camera.localScale = Vector3.Lerp(zoom, targetZoom, Time.deltaTime);
+
+ CameraFollow();
+
+ SetAim();
+
+ Fire();
+
+ }
+
+ void CameraFollow()
+ {
+ Vector3 pos = m_Camera.position;
+ pos.x = m_FakeHeight.x;
+ pos.y = m_FakeHeight.y;
+
+ if (Vector3.Distance(pos, m_Camera.position) > 0.1f)
+ {
+ m_Camera.position = Vector3.Lerp(m_Camera.position, pos, 3 * Time.deltaTime);
+ }
+
+ }
+
+ void SetAim()
+ {
+ float xAxis = Input.GetAxisRaw("AimHorizontal");
+ float yAxis = Input.GetAxisRaw("AimVertical");
+
+ bool bJoytick = xAxis != 0 || yAxis != 0;
+
+ bool bMouse = (Input.mousePosition - m_PreMouse).magnitude > 0.01f;
+ m_PreMouse = Input.mousePosition;
+
+ if(bJoytick)
+ {
+ m_ControlMode = ControlMode.Joystick;
+ }
+ if(bMouse)
+ {
+ m_ControlMode = ControlMode.Mouse;
+ }
+
+ Vector2 centrePos = m_Centre.position;
+ Vector2 dir = Vector2.zero;
+ if (m_ControlMode == ControlMode.Mouse)
+ {
+ Vector2 camPos = GetCameraPosition();
+ dir = (camPos - centrePos).normalized;
+ }
+ else
+ {
+ dir = new Vector2(xAxis, -yAxis).normalized;
+ }
+
+ if(dir.magnitude > 0)
+ {
+ m_AimDirection = dir;
+ Vector2 arrowPos = centrePos + m_ArrowRadius * m_AimDirection;
+ m_Arrow.transform.position = new Vector3(arrowPos.x, arrowPos.y, m_Arrow.transform.position.z);
+ m_Arrow.transform.rotation = Quaternion.Euler(0, 0, Mathf.Atan2(m_AimDirection.y, m_AimDirection.x) * Mathf.Rad2Deg);
+ }
+ }
+
+ Vector2 GetCameraPosition()
+ {
+ Vector3 screenPos = Input.mousePosition;
+ Vector2 target = Camera.main.ScreenToWorldPoint(screenPos);
+ return target;
+ }
+
+ void Fire()
+ {
+ if (Input.GetButtonDown("Fire1") || (Input.GetAxis("GunTrigger") == 1))
+ {
+ if (m_CoFire == null)
+ {
+ m_CoFire = StartCoroutine(coFire(0.1f));
+ }
+ }
+ if (!Input.GetButton("Fire1") && (Input.GetAxis("GunTrigger") == 0))
+ {
+ if(m_CoFire != null)
+ {
+ StopCoroutine(m_CoFire);
+ m_CoFire = null;
+ }
+ }
+ }
+
+ IEnumerator coFire(float interval)
+ {
+ while (true)
+ {
+ TestPeaceMakerBullet bullet = Instantiate<TestPeaceMakerBullet>(m_Bullet);
+
+ bullet.transform.position = m_Arrow.transform.position + new Vector3(m_AimDirection.x, m_AimDirection.y, 0) * 1f;
+
+ bullet.Set(m_AimDirection, 12f, 2f);
+ bullet.gameObject.SetActive(true);
+
+ yield return new WaitForSeconds(interval);
+ }
+ }
+
+}
diff --git a/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs.meta b/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs.meta
new file mode 100644
index 0000000..e8f0316
--- /dev/null
+++ b/AlienSurvival/Assets/Test/Scripts/TestPeaceMaker.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e1b4df1c072214a4f947497f833281d9
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs b/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs
new file mode 100644
index 0000000..bab2472
--- /dev/null
+++ b/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs
@@ -0,0 +1,39 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class TestPeaceMakerBullet : MonoBehaviour
+{
+
+ private Vector2 m_Direction;
+
+ private float m_Speed;
+
+ private float m_LifeTime;
+
+ public void Set(Vector2 dir, float speed, float lifeTime)
+ {
+ m_Direction = dir;
+ m_Speed = speed;
+ m_LifeTime = lifeTime;
+ transform.rotation = Quaternion.Euler(0, 0, Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg);
+ }
+
+ void Update()
+ {
+ m_LifeTime -= Time.deltaTime;
+ if(m_LifeTime <= 0)
+ {
+ Destroy(this.gameObject);
+ return;
+ }
+
+ Vector2 move = m_Direction * m_Speed * Time.deltaTime;
+
+ Vector3 pos = transform.position;
+ pos.x += move.x;
+ pos.y += move.y;
+
+ transform.position = pos;
+ }
+}
diff --git a/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs.meta b/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs.meta
new file mode 100644
index 0000000..c3bce5a
--- /dev/null
+++ b/AlienSurvival/Assets/Test/Scripts/TestPeaceMakerBullet.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cf74c7651403bc449b55858cefd8debb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs b/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs
new file mode 100644
index 0000000..b310fbd
--- /dev/null
+++ b/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs
@@ -0,0 +1,175 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class TestWaspRobot : MonoBehaviour
+{
+ [SerializeField] private TestFakeHeight m_Follow;
+
+ [SerializeField] private SpriteRenderer m_Shadow;
+
+ [SerializeField] private float m_MoveSpeed;
+
+ private SpriteRenderer m_SpriteRenderer;
+ private TestFakeHeight m_Coords;
+
+ // wasp»·ÈÆ
+ [SerializeField] private float m_Radius;
+
+ [SerializeField] private List<Sprite> m_Sprites;
+
+ private bool m_Following;
+
+ private float m_Angle;
+
+ private float m_OrbitSpeed = 3f;
+
+ enum State
+ {
+ None,
+ Move,
+ Orbit,
+ }
+
+ private State m_State = State.None;
+
+ private Coroutine m_Coroutine;
+
+ private void Start()
+ {
+ m_SpriteRenderer = GetComponent<SpriteRenderer>();
+ m_Coords = GetComponent<TestFakeHeight>();
+
+ m_Following = false;
+ m_Angle = 0;
+
+ ChangeState(State.Move);
+ }
+
+ private void ChangeState(State state)
+ {
+ if(m_State != state)
+ {
+ Debug.Log(m_State.ToString() + "->" + state.ToString());
+
+ if(m_Coroutine != null)
+ {
+ StopCoroutine(m_Coroutine);
+ }
+ m_State = state;
+ m_Coroutine = StartCoroutine("co" + m_State.ToString());
+ }
+ }
+
+ 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;
+
+ if(m_Following)
+ {
+ ChangeState(State.Move);
+ }
+ else
+ {
+ ChangeState(State.Orbit);
+ }
+
+ }
+
+ IEnumerator coMove()
+ {
+ while (true)
+ {
+ 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;
+
+ float rad = GetAngleToTarget();
+ int index = GetSpriteIndex(rad);
+ SetSprite(index);
+ }
+
+ yield return null;
+ }
+ }
+
+ IEnumerator coOrbit()
+ {
+ m_Angle = GetAngleToTarget();
+
+ while (true)
+ {
+ 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 = Vector2.Lerp(m_Coords.positionOnGround, centre, 0.25f);
+
+ int index = GetSpriteIndex(m_Angle);
+ SetSprite(index);
+
+ yield return null;
+ }
+ }
+
+ float GetAngleToTarget()
+ {
+ Vector2 posOnGround = m_Coords.positionOnGround;
+ Vector2 target = m_Follow.positionOnGround;
+
+ Vector2 dir = (posOnGround - target).normalized;
+
+ return Mathf.Atan2(dir.y, dir.x);
+ }
+
+ // angle rad
+ int GetSpriteIndex(float rad)
+ {
+ int index = ((int)Mathf.Floor(((rad * Mathf.Rad2Deg) % 360) / 30)) % 12;
+ index = Mathf.Clamp(index, 0, m_Sprites.Count - 1);
+ return index;
+ }
+
+ void SetSprite(int index)
+ {
+ m_SpriteRenderer.sprite = m_Sprites[index];
+ m_Shadow.sprite = m_Sprites[index];
+ }
+
+}
diff --git a/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs.meta b/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs.meta
new file mode 100644
index 0000000..9bd17eb
--- /dev/null
+++ b/AlienSurvival/Assets/Test/Scripts/TestWaspRobot.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 37e797e79063cdf4883cf54509d9ddc3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: