如何翻转在Unity巡逻点移动的敌人



我意识到这是一个常见的问题,但我是编码和Unity的新手,我所有的"解决方案";失败了。敌人沿着2D地图上的随机巡逻点移动,但它不是对称的,我希望它每次朝这个方向移动时都能在x轴上翻转

这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PatrolBehavior : StateMachineBehaviour
{
private GameObject[] patrolPoints;
public float speed;
private int randomPoint;
// OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
patrolPoints = GameObject.FindGameObjectsWithTag("patrolPoints");
randomPoint = Random.Range(0, patrolPoints.Length);
}
// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacks
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
animator.transform.position = Vector2.MoveTowards(animator.transform.position, patrolPoints[randomPoint].transform.position, speed * Time.deltaTime);
if (Vector2.Distance(animator.transform.position, patrolPoints[randomPoint].transform.position) < 0.1f)
{
randomPoint = Random.Range(0, patrolPoints.Length);
}
}
// OnStateExit is called when a transition ends and the state machine finishes evaluating this state
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{

}

}

在你询问代码之前,它不是我的。我正在学习99%的教程,这就是为什么我在解决代码问题时毫无用处。我真的很感激有一个更具针对性的回应比";使用动画师.变换.旋转(0,180,0("因为我不知道该怎么用:(.

要在X轴上翻转精灵,请执行以下操作:SpriteRenderer渲染器=GetComponent((;renderer.flipX=!renderer.flipX;

您可以通过进行翻页。LocalScale

LocalScale代码示例:

public void FlipSprite() {
// Get the X Value of the patrolPoint
float pointXValue = patrolPoints[randomPoint].transform.position.x;
// Get the X Value of the Enemy
float enemyXValue = gameObject.transform.x
// PatrolPoint is to the Left
if (pointXValue < enemyXValue) {
// Flip Sprite on the X Axis
transform.localScale = new Vector3 (-1f, 1f, 1f);
}
// PatrolPoint is to the Right
else if (pointXValue > enemyXValue) {
// Flip Sprite back on the X Axis
transform.localScale = new Vector3 (1f, 1f, 1f);
}
}

在选择新的RandomRange Point后,这段代码需要位于要翻转的GameObject中,才能访问它的Transform。每次设置randomPoint后,您都需要调用函数。

// Getting new patrolPoint
randomPoint = Random.Range(0, patrolPoints.Length);
// Fliping Sprite
FlipSprite();

我不建议你通过flipX进行切换。只有Rendering(精灵(会受到翻转的影响。其他一切都会保持不变,所以如果你的Collider2D不对称,可能会导致Collisions以后出现问题

最新更新