3Dアクションゲームを作っている者です
敵をRigidBodyで速度制限をかけ、最高速度=制限速度で移動ということをしたいのですが、
制限速度になったらその場で静止してしまっています
どのようにすれば同じ速度で移動できるでしょうか?
お願いしますm(_ _)m
スクリプトです
rb = キャラのRigidBody
MaxSpeed = 加速の際の最高値
MinSpeed = 加速の際の最低値
LimitSpeed = 制限速度
C#
1 rb.AddForce(transform.forward * Random.Range(MaxSpeed, MinSpeed), ForceMode.Impulse); 2 if (rb.velocity.magnitude > LimitSpeed) 3 { 4 rb.velocity = new Vector3(rb.velocity.x / 1.1f, rb.velocity.y, rb.velocity.z / 1.1f); 5 }
お願いします
追記
スクリプト全てが見たいとのことでしたのでここに貼ります
Target = 標的(プレイヤー)
WalkTargetPoint = NavMeshAgentで取得した向きを入れるVector3型変数
C#
1public class Enemy1Script : MonoBehaviour 2{ 3 [SerializeField] 4 NavMeshAgent nav; 5 public GameObject Target; 6 [SerializeField] 7 Rigidbody rb; 8 Vector3 WalkTargetPoint; 9 [SerializeField] 10 Animator anim; 11 [SerializeField] 12 float LimitSpeed; 13 [SerializeField] 14 float MaxSpeed; 15 [SerializeField] 16 float MinSpeed; 17 [SerializeField] 18 float HP; 19 [SerializeField] 20 float speed; 21 // Start is called before the first frame update 22 void Start() 23 { 24 Target = GameObject.Find("Player"); 25 HP = 100; 26 } 27 28 // Update is called once per frame 29 void Update() 30 { 31 speed = rb.velocity.magnitude; 32 nav.SetDestination(Target.transform.position); 33 if (nav.pathPending == false) 34 { 35 WalkTargetPoint = nav.path.corners[1]; 36 Quaternion Point = Quaternion.LookRotation(WalkTargetPoint - transform.position); 37 Point.x = 0; 38 Point.z = 0; 39 transform.rotation = Point; 40 if (Vector3.Distance(transform.position, Target.transform.position) >= 30 && rb.velocity.magnitude <= LimitSpeed) 41 { 42 rb.AddForce(transform.forward / Random.Range(MaxSpeed, MinSpeed), ForceMode.Impulse); 43 anim.SetBool("Run", true); 44 } 45 else if(Vector3.Distance(transform.position, Target.transform.position) <= 5 && rb.velocity.magnitude <= LimitSpeed) 46 { 47 rb.AddForce(-transform.forward / Random.Range(MaxSpeed, MinSpeed), ForceMode.Impulse); 48 anim.SetBool("Run", true); 49 } 50 else 51 { 52 anim.SetBool("Run", false); 53 anim.SetTrigger("1Attack"); 54 } 55 56 } 57 if (HP <= 0) 58 { 59 Destroy(gameObject); 60 } 61 } 62 63 void OnTriggerStay(Collider other) 64 { 65 if (other.gameObject.tag == "Hydrochloric Acid") 66 { 67 HP -= 0.01f; 68 rb.velocity = new Vector3(rb.velocity.x / 1.0005f, rb.velocity.y / 1.0005f, rb.velocity.z / 1.0005f); 69 } 70 } 71 void OnTriggerEnter(Collider other) 72 { 73 if (other.gameObject.tag == "Atack") 74 { 75 HP -= 10; 76 rb.AddForce(transform.forward * -100, ForceMode.Impulse); 77 } 78 } 79 void OnCollisionEnter(Collision collision) 80 { 81 if (collision.gameObject.tag == "Hydrochloric Acid") 82 { 83 if (collision.gameObject.name == "LastRE-ZA-") 84 { 85 HP -= 50; 86 } 87 else 88 { 89 HP -= 2; 90 } 91 } 92 } 93 void OnCollisionStay(Collision collision) 94 { 95 if (collision.gameObject.tag == "Hydrochloric Acid") 96 { 97 HP -= 5; 98 } 99 } 100}
このスクリプトだとrb.velocity.magnitudeが際限なく増え続けます(speedにmagnitudeを入れて表示してるのですがどこまでも増え続けてるのにオブジェクトは動きません)
無理だったらプロジェクト作り直しします
おねがいしますm(_ _)m
回答1件
あなたの回答
tips
プレビュー