2017-01-14 52 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)。 –