diff options
author | chai <chaifix@163.com> | 2022-04-16 16:20:20 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2022-04-16 16:20:20 +0800 |
commit | 6cf30c620615508705e2e800c04eebb7a45e6e04 (patch) | |
tree | 7383063f55f9709a5d9fb55caa1b37ad02a7cc11 /AlienSurvival/Assets/Test/Scripts | |
parent | 67eb78bc7820f189b60da157dddea1ec16ade65a (diff) |
+ plant test
Diffstat (limited to 'AlienSurvival/Assets/Test/Scripts')
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: |