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);
}
}
개체를 회전하려고하지 않고 애니메이션을 변경하려고합니다. –
이 경우에는 Animator Controller에서 [Blend Trees] (https://docs.unity3d.com/Manual/class-BlendTree.html)를 설정하는 방법을 살펴보아야합니다. –