【问题标题】:Unity: Flip 2D GameObject(Clone) while GetKeyDownUnity:在 GetKeyDown 时翻转 2D 游戏对象(克隆)
【发布时间】:2017-04-04 04:09:37
【问题描述】:

我的问题是当我实例化一个游戏对象时,它应该像我的播放器一样翻转 但是当我左转时它只是在翻转。

using UnityEngine;
using System.Collections;

public class beam : MonoBehaviour {

public Transform firePoint;
public move dino;

void Awake()
{
    dino = GetComponent<move>();
    dino = FindObjectOfType<move>();
    firePoint = GameObject.FindGameObjectWithTag("spawn").transform;
}

// Use this for initialization
void Start () {      
}

void FixedUpdate ()
{
    transform.position = firePoint.position;
}
void Update ()
{
    if (dino.GetComponent<move>().facingRight == false)
    {
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }

}
}

例如:我的播放器面向右侧,“Beam”也面向右侧,但是当我的播放器面向左侧时,“Beam”在-1 和 +1 之间切换

我希望你明白我的意思。请帮忙:)

【问题讨论】:

  • 是精灵吗?还是 3d?
  • 它是一个精灵。

标签: c# unity3d 2d flip


【解决方案1】:

你正在更新方法中进行快速翻转:当恐龙没有面对右翻转时,它就像疯了一样!将 *= 更改为 = ,它应该可以工作。或者如果它已经被缩放,那么这样做:

void Update ()
{
    if (dino.GetComponent<move>().facingRight == false)
    {
        Vector3 theScale = transform.localScale;
        theScale.x = Mathf.Abs(theScale.x) * -1;
        transform.localScale = theScale;
    }
}

注意:

最好使用SpriteRenderer.FlipX = true/false 而不是缩放。

另一个说明:

如果你使用batching,不均匀的缩放和翻转是致命的。使用多个精灵并在它们之间切换。

【讨论】:

  • 你先生真棒! theScale.x = Mathf.Abs(theScale.x) * -1; 为我工作!
  • @OliverSradnick 如果解决了您的问题,请不要忘记accept他的回答。
  • 也谢谢@Programmer :-)
  • 不客气。我总是使用 scale*-1,甚至不知道 SpriteRenderer.flipX 和 flipY 存在。从您的回答中得到了这一点,我认为这很有用。一个更正虽然,我认为你的Sprite.FlipX = true/false 应该是SpriteRenderer.FlipX = true/falseSprite 是一个有效的 Unity 类,但没有 FlipXFlipX 变量。 SpriteRenderer 确实如此。
  • @Programmer 你是对的我想我很懒惰! FlipX 和 FlipY 是安全的,因为它们是按比例添加的。想象一下这样一种情况,其中缩放动画并且 FlipX 在代码中发生变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多