unity图片水平/垂直翻转

转载出处:Unity 图片翻转

    //水平翻转
 	Texture2D HorizontalFlipTexture(Texture2D texture)
    {
        //得到图片的宽高
        int width = texture.width;
        int height = texture.height;

        Texture2D flipTexture = new Texture2D(width, height);

        for (int i = 0; i < width; i++)
        {
            flipTexture.SetPixels(i, 0, 1, height, texture.GetPixels(width - i - 1, 0, 1, height));
        }
        flipTexture.Apply();

        return flipTexture;
    }
    // 垂直翻转
 	Texture2D VerticalFlipTexture(Texture2D texture)
    {
        //得到图片的宽高
        int width = texture.width;
        int height = texture.height;

        Texture2D flipTexture = new Texture2D(width, height);
        for (int i = 0; i < height; i++)
        {
            flipTexture.SetPixels(0, i, width, 1, texture.GetPixels(0, height - i - 1, width, 1));
        }
        flipTexture.Apply();
        return flipTexture;
    }
### 实现物体在 Unity 中围绕特定轴翻转 180 度 为了实现在 Unity 中使物体围绕某个轴翻转 180 度的效果,可以通过 `transform.Rotate` 方法或使用四元数 (`Quaternion`) 来完成这一操作。下面介绍这两种方法的具体实现。 #### 使用 `transform.Rotate` 此方法允许指定一个向量来定义旋转的角度增量以及所绕的轴。对于一次性翻转 180 度的需求来说,可以在脚本中的合适位置调用该函数并传入相应的参数: ```csharp using UnityEngine; public class FlipObject : MonoBehaviour { private void OnMouseDown() { // 绕X轴翻转180度 transform.Rotate(Vector3.right * 180); // 或者绕Y轴翻转180度 // transform.Rotate(Vector3.up * 180); // 或者绕Z轴翻转180度 // transform.Rotate(Vector3.forward * 180); } } ``` 这段代码会在点击对象时触发一次性的 180 度翻转动作[^4]。 #### 利用 Quaternion 完成平滑过渡效果 如果希望创建更加流畅自然的感觉,则可以采用插值的方式逐步改变物体的姿态直到达到预期的目标角度。这里推荐使用协程配合 `Quaternion.Slerp` 函数来进行处理: ```csharp using UnityEngine; using System.Collections; public class SmoothFlip : MonoBehaviour { public float duration = 2f; // 设置动画持续时间 IEnumerator StartFlipping(float angle, Vector3 axis) { var fromAngle = transform.rotation; var toAngle = Quaternion.AngleAxis(angle, axis); for (float t = 0.0f; t < 1.0f; t += Time.deltaTime / duration) { transform.rotation = Quaternion.Slerp(fromAngle, toAngle, Mathf.SmoothStep(0f, 1f, t)); yield return null; } transform.rotation = toAngle; } private void OnMouseDown(){ StartCoroutine(StartFlipping(180, Vector3.up)); // 这里可以选择其他轴如Vector3.right 或 Vector3.forward } } ``` 上述代码实现了当鼠标按下时启动一个协程,在给定的时间内平稳地将物体沿选定轴线翻转至相反方向[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值