/Unity/人物跳躍.固定視角.放大/Assets/BlindWomen_MixAttack.cs

https://bitbucket.org/Mugicer/san-zhuan · C# · 92 lines · 69 code · 10 blank · 13 comment · 6 complexity · 2a63b43a5ab8f1704a5f2bc1d1e941c6 MD5 · raw file

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class BlindWomen_MixAttack : StateMachineBehaviour {
  5. public GameObject TruthBullet;
  6. public GameObject FakeBullet;
  7. public GameObject lamp;
  8. public float creatdistance = 1;
  9. public float creatforsecond = 1;
  10. public GameObject[] po;
  11. float time =0;
  12. float[] ro = new float[] { 0, 15,-15, 30, -30, 45, -45 };
  13. bool shoot = true;
  14. GameObject a;
  15. GameObject b;
  16. GameObject child;
  17. GameObject mid;
  18. Transform player;
  19. // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
  20. override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
  21. a = animator.GetComponent<Blind_women>().empty;
  22. b = animator.GetComponent<Blind_women>().childrenempty;
  23. child = animator.GetComponent<Blind_women>().children;
  24. mid = animator.GetComponent<Blind_women>().mid;
  25. player = animator.GetComponent<Blind_women>().player.transform;
  26. shoot = true;
  27. for (int i = 0; i < 4; i++)
  28. {
  29. po[i] = animator.GetComponent<Blind_women>().po[i];
  30. }
  31. //還需要設置 盲女 位置
  32. animator.transform.position = po[Random.Range(0,4)].transform.position + new Vector3(Random.Range(5f, -5f), 0, Random.Range(5f,-5f));
  33. //還需要設置 小女孩 位置
  34. child.transform.position = mid.transform.position + new Vector3(Random.Range(35f,-35f),0,Random.Range(27.5f,-27.5f));
  35. for (int i = 0; i < 3; i++)
  36. {
  37. GameObject c = Instantiate(lamp);
  38. animator.GetComponent<Blind_women>().Lamp[i]=c;
  39. c.transform.position = mid.transform.position + new Vector3(Random.Range(35f, -35f), 0, Random.Range(27.5f, -27.5f));
  40. }
  41. }
  42. // OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
  43. override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
  44. animator.transform.LookAt(new Vector3(player.position.x,animator.transform.position.y, player.position.z));
  45. child.transform.LookAt(new Vector3(player.position.x, animator.transform.position.y, player.position.z));
  46. if (shoot)
  47. {
  48. for (int i = 0; i < ro.Length; i++)
  49. {
  50. a.transform.Rotate(0,ro[i],0);
  51. a.transform.Translate(0,1,creatdistance);
  52. Instantiate(FakeBullet, a.transform.position, a.transform.rotation);
  53. a.transform.SetPositionAndRotation(animator.transform.position,animator.transform.rotation);
  54. }
  55. for (int i = 0; i < ro.Length; i++)
  56. {
  57. b.transform.Rotate(0, ro[i], 0);
  58. b.transform.Translate(0, 1, creatdistance);
  59. Instantiate(TruthBullet, b.transform.position, b.transform.rotation);
  60. b.transform.SetPositionAndRotation(child.transform.position, child.transform.rotation);
  61. }
  62. shoot = false;
  63. }
  64. time += Time.deltaTime;
  65. if (time>creatforsecond)
  66. {
  67. time -= creatforsecond;
  68. shoot = true;
  69. }
  70. }
  71. // OnStateExit is called when a transition ends and the state machine finishes evaluating this state
  72. override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
  73. }
  74. // OnStateMove is called right after Animator.OnAnimatorMove(). Code that processes and affects root motion should be implemented here
  75. //override public void OnStateMove(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
  76. //
  77. //}
  78. // OnStateIK is called right after Animator.OnAnimatorIK(). Code that sets up animation IK (inverse kinematics) should be implemented here.
  79. //override public void OnStateIK(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
  80. //
  81. //}
  82. }