2017-01-14 49 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); 

here更多的信息上LookAt

+0

我不想旋轉對象只是改變它的動畫。 –

+0

在這種情況下,您應該看看如何在Animator控制器中設置[Blend Trees](https://docs.unity3d.com/Manual/class-BlendTree.html)。 –