Unityで操作キャラクタや、敵キャラクタなど、衝突判定や重力処理、加えていくらかの
物理挙動をさせたいけれど、かといって、完全に物理挙動を適用はしたくない(ぶつかったときに、回転とかは困る)というケースはかなり普通のことだと思うのですが、
こういう場合、Rigidbodyコンポーネントを適用したうえで、スクリプトなどで制御したほうがいいのか、
あるいは、いっそRigidbodyを最初から使わずに、スクリプト書いたほうが速いんでしょうか?
どちらのほうが定石というか、一般的に好まれるんでしょうか?
質問に不備があるとご指摘いただき、今後は気を付けます。。。
それで、ちょっと情報を追加いたします。
以下のように、敵キャラクタのスクリプトを書いた場合、
Constraintsを使うと、衝突して吹っ飛んで回転などは抑えられるのですが、
LookAt()による回転は抑えられないようで、プレイヤーと衝突するとめり込んで
浮き上がって回転します。。。どうしたらよいでしょうか?
lang
1using UnityEngine; 2using System.Collections; 3 4public class Enemy : MonoBehaviour { 5 private Animator anim; 6 public Transform player; //プレイヤーを代入 7 public float speed = 3; //移動速度 8 public float scope = 15; //敵の知覚範囲 9 // Use this for initialization 10 void Start () { 11 player = GameObject.FindGameObjectWithTag("Player").transform; 12 anim = GetComponent<Animator>(); 13 } 14 15 // Update is called once per frame 16 void FixedUpdate () { 17 18 19 if (getDistance()<scope) { 20 21 anim.SetBool("Tracking", true); 22 transform.position = transform.position + (getDirection() * speed * Time.deltaTime); 23 transform.LookAt(player); //プレイヤーの方を向く 24 } 25 else 26 { 27 anim.SetBool("Tracking",false); 28 } 29 } 30 31 float getDistance() 32 { 33 Vector3 playerPos = player.position; //プレイヤーの位置 34 Vector3 relativePlayerPos = playerPos - transform.position; //敵から見た相対位置 35 return relativePlayerPos.magnitude; //距離 36 } 37 38 Vector3 getDirection() 39 { 40 41 Vector3 playerPos = player.position; //プレイヤーの位置 42 Vector3 relativePlayerPos = playerPos - transform.position; //敵から見た相対位置 43 return relativePlayerPos.normalized; //単位化(距離要素を取り除く) 44 45 } 46} 47

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/04 10:07
2016/09/05 02:02