在Unity 2D中翻转2D Sprite动画
我有一个关于2D Sprite动画的快速问题,我无法在任何地方找到具体答案:
我有一个带有步行动画的精灵到右边。 但是,当他向左走(2D侧卷轴)时,我显然想要将动画向左翻转。
我可以使用transform.localscale.x
轻松翻转精灵本身,但是,它只翻转精灵。 不是动画片段。 (这不再发生在Unity中)
因此,当精灵翻转时,动画片段开始播放的那一刻,它会向右翻转(因为我唯一的动画片段是面向右侧的精灵)。
这是在Photoshop中翻转精灵的唯一方法,还是有办法在Unity中执行此操作?
谢谢!
更新:如果通过将变换乘以-1
来缩放变换,则使用单位的实际版本,动画帧也会缩放。
我终于通过这样做弄明白了:
void Flip() { // Switch the way the player is labelled as facing facingRight = !facingRight; // Multiply the player's x local scale by -1 Vector3 theScale = transform.localScale; theScale.x *= -1; transform.localScale = theScale; }
这是来自Unity的2D平台示例。
要实现某种使用Flip
方法的检查,您可以执行类似于以下示例的操作,这是基本的移动代码。 facingRight
被设置为类的值,以便其他方法可以使用它,并且默认为false
。
void Update() { //On X axis: -1f is left, 1f is right //Player Movement. Check for horizontal movement if (Input.GetAxisRaw ("Horizontal") > 0.5f || Input.GetAxisRaw("Horizontal") < -0.5f) { transform.Translate (new Vector3 (Input.GetAxisRaw ("Horizontal") * moveSpeed * Time.deltaTime, 0f, 0f)); if (Input.GetAxisRaw ("Horizontal") > 0.5f && !facingRight) { //If we're moving right but not facing right, flip the sprite and set facingRight to true. Flip (); facingRight = true; } else if (Input.GetAxisRaw("Horizontal") < 0.5f && facingRight) { //If we're moving left but not facing left, flip the sprite and set facingRight to false. Flip (); facingRight = false; } //If we're not moving horizontally, check for vertical movement. The "else if" stops diagonal movement. Change to "if" to allow diagonal movement. } else if (Input.GetAxisRaw ("Vertical") > 0.5f || Input.GetAxisRaw("Vertical") < -0.5f) { transform.Translate (new Vector3 (0f, Input.GetAxisRaw ("Vertical") * moveSpeed * Time.deltaTime, 0f)); } //Variables for the animator to use as params anim.SetFloat ("MoveX", Input.GetAxisRaw ("Horizontal")); anim.SetFloat ("MoveY", Input.GetAxisRaw ("Vertical")); }
void FlipHorizontal() { animator.transform.Rotate(0, 180, 0); }
你也可以在变形时做到这一点(没有动画师)。 但在这种情况下,旋转值可以被动画师覆盖
这就是我的做法 – 几乎与Jestus使用统一脚本的其他技术相同。
var facing : String = "right"; function updateFacing(curr : String){ if(curr != facing){ facing = curr; var theScale : Vector3 = gameObject.transform.localScale; theScale.x *= -1; gameObject.transform.localScale = theScale; } } //put to use function controls(){ if(Input.GetKey (KeyCode.LeftArrow)){ updateFacing("left"); } else if(Input.GetKey (KeyCode.RightArrow)){ updateFacing("right"); } }
如果你在Unity中制作动画:
- 复制要翻转的动画的所有帧(精灵)。
- 将这些帧粘贴到新动画中,然后选择第一帧上的所有内容。
- 将第一帧的x比例从1更改为-1。
- 对动画的最后一帧做同样的事情。
现在它应该朝着另一个方向发挥!
上述就是C#学习教程:在Unity 2D中翻转2D Sprite动画分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1021631.html