c# - 让我的 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,因为它实际上并不是在寻找玩家脚本。它正在寻找一个没有附加到播放器的脚本的子变换。而且因为我有两个不同的玩家游戏对象,你可以在游戏中随时切换,所以在这方面对我来说真的不起作用。
解决方案
如果您希望它始终面向玩家,您将需要对带有小鸟位置的玩家位置进行某种检查。准系统方法只是比较两个对象的 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;
}
您应该在此处进行一些额外的检查,以防止它在没有变化时每帧更新比例。
推荐阅读
- unit-testing - 使用内容创建文件创建单元测试
- php - 通过直接调用图像源 url 来显示 Facebook 图像 - 我需要 FB API 吗?
- c# - 在 JS 中解析查询字符串以过滤结果
- vba - VISIO VBA - 在现有形状内定位形状
- java - 当注释的方法参数不是最终的时,IntelliJ 以一种意想不到的方式格式化它们
- python - 使用 scipy.stats 和 pandas 计算相关性及其统计意义
- postgresql - PostgreSQL 触发器是异步的吗?
- react-native - 在 React Native 中,我怎样才能只允许正确的方向 panResponder?
- python - Python 中的多处理问题
- python - 如何将 glob 与跳过列表一起使用