2017-01-14 8 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)를 설정하는 방법을 살펴보아야합니다. –

관련 문제