首页 > 解决方案 > 让我的 2d 精灵翻转工作,具体取决于变换的位置

问题描述

因此,无论出于何种原因,此代码都没有响应。我有一个敌人,我一直试图面对玩家(敌人会周期性地来回掠过玩家的头)。但是,除了在计时器达到 0 时发生翻转(这并不能很好地工作)之外,我无法让翻转功能工作。我知道 Flipper 功能很好;我已经测试了它和一切。我只是不知道如何告诉敌人当玩家在它的左边时,转向,反之亦然。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class dragoonDetection : MonoBehaviour {

private Rigidbody2D rb;
private Animator anim;
public Transform Player;
private bool facingRight = true;

void Start ()
{
    rb = GetComponent<Rigidbody2D> ();
    anim = GetComponent<Animator> ();
}

void Update()
{
    Flip();
}

    void Flip()
{
    if (Player.transform.localScale.x > 0) {
        transform.localScale = new Vector3 (1.69f, 1.54f, 1f);
    }
        if (Player.transform.localScale.x < 0) {
            transform.localScale = new Vector3 (-1.69f, 1.54f, 1f);
    }
}

void Flipper()
{
    facingRight = !facingRight;
    Vector2 theScale = transform.localScale;
    theScale.x *= -1;
    transform.localScale = theScale;
}
}

有什么想法吗?我宁愿避免使用 FindGameObject,因为它实际上并不是在寻找玩家脚本。它正在寻找一个没有附加到播放器的脚本的子变换。而且因为我有两个不同的玩家游戏对象,你可以在游戏中随时切换,所以在这方面对我来说真的不起作用。

标签: c#unity3dtransformscale

解决方案


如果您希望它始终面向玩家,您将需要对带有小鸟位置的玩家位置进行某种检查。准系统方法只是比较两个对象的 x 位置并相应地更改比例。

void Update()
{
     transform.localScale = new Vector3(getDir()*1.69f, 1.54f, 1);
}

private int getDir()
{
    if (player.transform.position.x < transform.position.x)
        return -1;
    else 
        return 1;
}

您应该在此处进行一些额外的检查,以防止它在没有变化时每帧更新比例。


推荐阅读