繁体   English   中英

NPC动画跟随玩家统一2D自上而下

[英]Npc animation following player unity 2d top down

嘿,我正在统一制作自上而下的游戏。 我可能遇到的问题是使npc播放器在跟随播放器时改变其面对的方式。 因此,如果玩家向左转,npc将跟随他们,但不会转身面对npc的前进方向。 我可以使NPC看起来像它的行走,只是不改变它的方向。 这是一个2d自上而下的游戏,请提供任何帮助。 这是我的NPC代码。

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);
}

}

这是因为您只是将对象移向目标。 但是要使它对准目标,您还需要朝目标方向旋转它。

变换组件具有一个名为LookAt的函数。 您为其提供目标和对象应绕其旋转的轴。 因此,在您的情况下:

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

有关LookAt更多信息,请参见此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM