我意识到这是一个常见的问题,但我是编码和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("因为我不知道该怎么用:(.
您可以通过进行翻页。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
以后出现问题