2017-01-14 6 views
0

ちょっと一気にトップダウンをしています。私が抱えている問題は、npcプレーヤーがプレイヤーに従うときに直面しているやり方を変えることです。プレイヤーが左に曲がると、npcはそれに従いますが、npcが向いている方向に向かうことはありません。私はその歩行が見ている方向を変えないように見えるようにnpcを得ることができます。これは2dのトップダウンゲームです。どんな助けでもうれしいです。ここに私のnpcコードです。NPCアニメ次のプレイヤーユニティ2dトップダウン

using UnityEngine; 
using System.Collections; 

public class SlimeController : MonoBehaviour 
{ 

public Transform Character; // Target Object to follow 
public float speed = 0.1F; // Enemy speed 
public float maxDist = 10.0f; 
public float attackdistance = 3; 
public float farenough; 
private Vector3 directionOfCharacter; 
private bool challenged = false;// If the enemy is Challenged to follow by the player 
public Transform StartMarker; 
private Vector3 goback; 
public Transform EndMarker; 
public Rigidbody2D rb; 
Animator anim; 
float oldx; 
bool left; 
bool right; 

private void Start() 
{ 
    rb = GetComponent<Rigidbody2D>(); 
    anim= GetComponent<Animator>(); 
    oldx = transform.position.x; 

} 



void Update() 
{ 
    anim.SetBool("left", false); 
    anim.SetBool("right", false); 
    var distanceFromPlayer = Vector3.Distance(Character.position, transform.position); 

    if(oldx>transform.position.x) 
    { 
     left = false; 
     right = true; 
    } 

    if(oldx<transform.position.x) 
    { 
     left = true; 
     right = false; 
    } 
    if (oldx == transform.position.x) 
    { 
     left = false; 
     right = false; 
    } 

    if (challenged) 
    { 

     directionOfCharacter = Character.transform.position - transform.position; 
     directionOfCharacter = directionOfCharacter.normalized; // Get Direction to Move Towardsss 
     transform.Translate(directionOfCharacter * speed, Space.World); 
     enabled = true; 




     if (distanceFromPlayer < attackdistance) 
     { 

      attack(); 
     } 

     if (distanceFromPlayer > attackdistance) 
     { 
      speed = 0.03f; 
     } 


    } 

    if (!challenged) 
    { 

     goback = StartMarker.transform.position - transform.position; 
     goback = goback.normalized; 
     transform.Translate(goback * speed, Space.World); 

    } 
} 

// Will be triggered as soon as player would touch the Enemy Object 
void OnTriggerEnter2D(Collider2D other) 
{ 
    if (other.gameObject.name == ("Player")) 
    { 
     challenged = true; 

    } 
} 

private void OnTriggerExit2D(Collider2D other) 
{ 
    if (other.gameObject.name == ("Player")) 
    { 
     speed = 0.03f; 
     challenged = false; 
    } 

} 

void attack() 
{ 
    speed = 0; 
    transform.Translate(directionOfCharacter * speed, Space.World); 
} 

}

答えて

1

あなたは自分の目標に向けて、オブジェクトを移動しているためです。しかし、あなたのターゲットを見るには、あなたのターゲットの方向にもそれを回転させる必要があります。

変換コンポーネントにはLookAtという機能があります。あなたのターゲットとあなたのオブジェクトが回転すべき枢軸をそれに供給します。だからあなたの場合:

this.transform.LookAt(Character, Vector3.up); 

LookAt詳細はhereを参照してください。

+0

私はオブジェクトを回転させようとしていません。アニメーションを変更するだけです。 –

+0

この場合、Animator Controllerで[Blend Trees](https://docs.unity3d.com/Manual/class-BlendTree.html)を設定する方法を見てください。 –

関連する問題