小编Pro*_*mer的帖子

Unity - 如何在RawImage上使用VideoPlayer API播放旋转和全屏视频

由于MovieTexture在Unity 5.6.0b1之后已被弃用,我使用VideoPlayer Api通过RawImage for Android播放视频,参考此处.我正在尝试添加一个切换按钮,从RawImage Texture上播放的视频的初始大小切换到全屏,并在视频停止后返回原始状态.

我有一个完美播放的视频,到目前为止,我可以使用此代码将视频的变换更改为全屏.

void Update () {
    if (Input.GetButtonDown("Jump"))
    {
        image.rectTransform.offsetMax = Vector2.Lerp(Vector2.up, Vector2.down, 100);
        image.rectTransform.offsetMin = Vector2.Lerp(Vector2.left, Vector2.right, 100);
        image.rectTransform.rotation = Quaternion.AngleAxis(Mathf.Lerp(0f, 90f, 50), Vector3.forward);
    }
}
Run Code Online (Sandbox Code Playgroud)

if块内的前两行能够全屏显示播放视频的RawImage,如图2的第2部分所示.这是Vector2的文档.

对于第三行轮换代码,我参考了Unity论坛上的讨论,但我仍然无法获得我想要的效果,结果在第3部分.我想旋转RawImage的内容,但我正在旋转RawImage本身,这可能是因为引用没有描述旋转内容.

任何人都可以帮我找出如何解决它.如果它帮助我使用的Unity版本是Unity 5.6.0b11 Beta,并且如果要在您的设备上测试,请下载示例项目. Unity Video Player.zip 18.33MB您也可以在YouTube上关注新的VideoPlayer视频教程.

全屏和旋转视频使用RawImage上的Unity VideoPlayer播放

更新1

到目前为止,我唯一得到的是,我只尝试使用旋转代码并通过删除if块内的前两行,我能够旋转视频,但是当我尝试拉伸RawImage时,它会拉伸到屏幕外.请看这里的图像

更新2

经过大量的研究,打击和试验.我终于使用此代码完成了RawImage的全屏和旋转,以在Unity上播放全屏视频.

image.rectTransform.offsetMin = new Vector2(-560, 560);            
image.rectTransform.offsetMax = new Vector2(560, -560);
Run Code Online (Sandbox Code Playgroud)

但是,如您所见,我向矢量提供的值是静态数字,并不保证可以在多种屏幕尺寸上工作.好吧,当RawImage与RawImage一起旋转时,旋转RawImage会让人感到困惑,但是一些组件没有被改变或旋转,并且当改变偏移值时,RawImage在引用旧的Rect时改变了它的值(我真的不知道是什么正在这里发生). 在此输入图像描述

旋转RawImage旋转连接到它的轴.在上图中,您可以看到RawImage旋转,然后旋转轴.但即使图像旋转,您也可以看到有一些参考线.

在此输入图像描述

我是怎么解决这个问题的? …

c# video android unity-game-engine

9
推荐指数
1
解决办法
2456
查看次数

在Unity中使用自定义清单文件和权限?

我目前正在尝试使用Unity3D为Android编写一个小游戏。因为我想要一个可见的状态栏,所以我在Project文件夹(C:\ Users \ Public \ Documents \ Unity Projects \ ProjectName \ Temp \ StagingArea)中修改了AndroidManifest,如下所示:

<application android:theme="Theme.Light.NoTitleBar" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false" android:isGame="true" android:banner="@drawable/app_banner">
Run Code Online (Sandbox Code Playgroud)

但是每次我生成APK时,Unity都会将Android Manifest更改为:

<application android:theme="@style/UnityThemeSelector" android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false" android:isGame="true" android:banner="@drawable/app_banner">
Run Code Online (Sandbox Code Playgroud)

Unity3D是否每次都会更改修改过的清单?

c# java xml android unity-game-engine

9
推荐指数
2
解决办法
1万
查看次数

克隆/复制现有的 GameObject 及其子项

Unity 中是否有 C# 方式来复制现有的 GameObject 及其所有子项?就我而言,我有一个空的 GameObject,其中有许多 Text 对象作为子对象,我想为它们创建一个副本,包括相对位置、文本值、字体、颜色等......

预制件不会轻易工作,因为我想复制对象,包括其当前状态。

c# copy unity-game-engine gameobject unity5

9
推荐指数
1
解决办法
2万
查看次数

没有GC的无限方法参数

我正在尝试创建一个函数,可以接收无限量的参数,而无需创建GC.

我知道这可以通过params关键字完成,但它会创建GC.还要明白你可以将数组传递给函数但我想知道是否可以传递无限的方法参数而不创建GC并且不创建数组或列表并将其传递给List.

这是param代码的示例:

void Update()
{
    GameObject player1 = GameObject.Find("Player1");
    GameObject player2 = GameObject.Find("Player2");

    GameObject enemy1 = GameObject.Find("Enemy1");
    GameObject enemy2 = GameObject.Find("Enemy2");
    GameObject enemy3 = GameObject.Find("Enemy3");

    Vector3 newPos = new Vector3(0, 0, 0);
    moveObjects(newPos, 3f, player1, player2, enemy1, enemy2, enemy3);
}

void moveObjects(Vector3 newPos, float duration, params GameObject[] objs)
{
    for (int i = 0; i < objs.Length; i++)
    {
        //StartCoroutine(moveToNewPos(objs[i].transform, newPos, duration));
    }
}
Run Code Online (Sandbox Code Playgroud)

即使StartCoroutine注释掉函数执行,它也会分配80个字节.起初,我认为这是发生的,因为我使用了foreach循环,然后我将其更改为for循环,但它仍然创建GC然后我意识到这 …

c# memory-management variadic-functions unity-game-engine

9
推荐指数
2
解决办法
673
查看次数

如何创建一个illustrator/photoshop-like pentool用于在Unity中创建贝塞尔曲线

我需要创建复杂的分段贝塞尔曲线,所以我想更新代码以创建illustrator/photoshop类笔工具贝塞尔曲线.此视频显示了pentool的行为方式.

请注意,不是使用前两个锚点创建二次贝塞尔曲线(如视频中所示),我宁愿选择立方体(如链接代码示例中所示).

以下是我已经实现的Illustrator/photoshop笔工具的功能,这些功能是Unity中复制所必需的.

  • 在第一次单击时在同一个鼠标点创建所有锚点/控制点(在第一次单击时创建对象)

  • 当鼠标点从第一次点击移动(未按下)时,控制点将与两个锚点一起落入以创建一条直线(三次曲线)

  • 当单击并拖动鼠标(距离第一次点击任何距离)时,控制点远离直线移动以形成基于拖动方向的曲线,当拖动距离增加时,它们的长度也会增加单击.

  • 在创建曲线期间重新选择第一个锚点时,应关闭路径

我也不确定如何解决上述问题,但这是我到目前为止编写的代码:

BPath:

[System.Serializable]
public class BPath
{

    [SerializeField, HideInInspector]
    List<Vector2> points;

    [SerializeField, HideInInspector]
    public bool isContinuous;

    public BPath(Vector2 centre)
    {
        points = new List<Vector2>
    {
        centre+Vector2.left,
            centre+Vector2.left,
            centre+Vector2.left,
            centre+Vector2.left
    };
    }

    public Vector2 this[int i]
    {
        get
        {
            return points[i];
        }
    }

    public int NumPoints
    {
        get
        {
            return points.Count;
        }
    }

    public int NumSegments
    {
        get
        {
            return (points.Count - 4) / 3 + 1;
        }
    }

    public void AddSegment(Vector2 …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine unity-editor

9
推荐指数
1
解决办法
147
查看次数

随着时间的推移移动GameObject

我正在从Swift SpriteKit背景学习Unity,其中移动精灵的x位置与运行动作一样直接如下:

let moveLeft = SKAction.moveToX(self.frame.width/5, duration: 1.0)
let delayAction = SKAction.waitForDuration(1.0)
let handSequence = SKAction.sequence([delayAction, moveLeft])
sprite.runAction(handSequence)
Run Code Online (Sandbox Code Playgroud)

我想知道一种等效或类似的方法,将精灵移动到特定持续时间(例如,一秒)的特定位置,并且延迟不必在更新函数中调用.

c# unity-game-engine unity5

8
推荐指数
1
解决办法
5238
查看次数

从Unity3D代码启动android服务

在我的android的Unity3D应用程序中,我需要启动一个服务,它将在后台运行.我无法弄清楚我该怎么做.必须在活动上调用方法startService(),但我不知道如何将当前的unity活动从unity脚本传递到我的android插件.我还没有找到任何方法来获取静态方法中的活动并在其中运行startService().

据我了解序列,我需要获得主要的Unity3D活动并从中启动服务.

我的班级应该叫服务.

public final class StatusCheckStarter {

    public static void StartCheckerService()
    {
        startService(new Intent(this, CheckService.class));
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码不起作用,因为"无法解析方法startService",我没有任何东西可以传递给这个参数.我需要获得当前的活动.

c# service plugins android unity-game-engine

8
推荐指数
1
解决办法
8864
查看次数

如何从Unity连接到数据库

我试图通过Unity连接到MS SQL数据库.但是,当我尝试打开连接时,我收到IOException:连接丢失.

我从Unity\Editor\Data\Mono\lib\mono\2.0导入了System.Data.dll.我使用以下代码:

 using UnityEngine;
 using System.Collections;
 using System.Data.Sql;
 using System.Data.SqlClient;

 public class SQL_Controller : MonoBehaviour {

     string conString = "Server=myaddress.com,port;" +
             "Database=databasename;" +
             "User ID=username;" +
             "Password=password;";

     public string GetStringFromSQL()
     {
         LoadConfig();
         string result = "";

         SqlConnection connection = new SqlConnection(conString);
         connection.Open();
         Debug.Log(connection.State);
         SqlCommand Command = connection.CreateCommand();
         Command.CommandText = "select * from Artykuly2";
         SqlDataReader ThisReader = Command.ExecuteReader();
         while (ThisReader.Read())
         {
             result = ThisReader.GetString(0);
         }
         ThisReader.Close();
         connection.Close();

         return result;
     }
 }
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

IOException: Connection lost
Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacketHeader ()
Mono.Data.Tds.Protocol.TdsComm.GetPhysicalPacket ()
Mono.Data.Tds.Protocol.TdsComm.GetByte …
Run Code Online (Sandbox Code Playgroud)

c# sql-server mono unity-game-engine sql-server-2008

8
推荐指数
1
解决办法
3万
查看次数

在android studio中将Unity场景显示为子视图

我对在Android工作室项目中显示3D模型和图形感到有些困惑.

我一直在与Rajawali合作,这是一款Android OpenGL ES 2.0/3.0引擎.

感谢Rajawali,我能够显示3D模型,执行简单的动画并移动相机.

现在我想执行越来越复杂的动作和动画,也许创建自定义材质和纹理,但Rajawali wiki非常过时,这个库有一些限制(在我看来).

所以现在我想知道是否有办法在Unity3D中创建场景或某些东西,例如我可以用手指旋转的动画3D模型视图,然后将其转换为Android Java类或CustomView.

谢谢.

编辑:

这是我目前得到的:

在此输入图像描述

这是我的Android Studio APP的主屏幕.在Backgroud我有一个用Rajawali"加载"的3D模型视图.

如何使用Unity获得相同的结果?

android unity-game-engine

8
推荐指数
1
解决办法
5462
查看次数

如何为组件/脚本创建泛型池系统?

我对泛型的认识是,他们可以帮助我简化我的汇集,但无法弄清楚如何.

我的汇集系统简约,但很混乱.而现在变得笨拙和凌乱,还有MESSY.它不能很好地扩展......

我的FXDistribrutor.cs类是附加到初始场景中的对象的组件,旨在永久存在于游戏的所有场景中.它有自己的静态引用,所以我可以轻松地从任何地方调用它.更多关于最后的设计.我甚至不确定这是否是"正确"的方式.但它很好用.

FXDistributor为它能够分发的每种类型的FX单元都有一个公共插槽,为这种类型的FX池提供一个数组,以及一个数组的索引和池的大小.

这是两个例子:

    public BumperFX BmprFX;
    BumperFX[] _poolOfBumperFX;
    int _indexBumperFX, _poolSize = 10;

    public LandingFX LndngFX;
    LandingFX[] _poolOfLndngFX;
    int _indexLndngFX, _poolSizeLndngFX = 5;
Run Code Online (Sandbox Code Playgroud)

在Unity Start调用中,我填写每个FX单元的池:

void Start(){

    _poolOfBumperFX = new BumperFX[_poolSize];
    for (var i = 0; i < _poolSize; i++) {
    _poolOfBumperFX[i] = Instantiate(BmprFX, transform );
    }

    _poolOfLndngFX = new LandingFX[_poolSizeLndngFX];
    for ( var i = 0; i < _poolSizeLndngFX; i++ ) {
    _poolOfLndngFX[i] = Instantiate( LndngFX, transform );
    }
}
Run Code Online (Sandbox Code Playgroud)

在课程的主体中,我为每种FX类型提供了一系列方法,以便在需要的地方提供它们:

public LandingFX GimmeLandingFX ( ){
    if …
Run Code Online (Sandbox Code Playgroud)

c# generics pooling unity-game-engine

8
推荐指数
1
解决办法
596
查看次数