我有txt包含游戏中地图数据的文件.问题是文件存储在中,Application.persistentDataPath所以我甚至可以从我的Android设备(创建的地图创建者)更改它,那么如何在我的PC上创建包含基本地图的txt文件,并在persistentDataPath安装时将其显示在我的Android设备上应用?
我已经将一个脚本附加到Unity游戏对象.该脚本包含各种公共属性,包括我自己的一些类.如下面的简化代码所示,其中TestMonoBehaviorClass附加到游戏对象并且TestClass' TestString在检查器中显示.
public class TestMonoBehaviorClass : MonoBehaviour
{
public TestClass Test;
}
[System.Serializable]
public class TestClass
{
public string TestString;
public TestClass ()
{
Debug.Log ("TestClass creator called.");
this.TestString = "Reset String";
}
}
Run Code Online (Sandbox Code Playgroud)
当我将脚本附加到游戏对象时,我希望调用一次TestClass(编辑:不是从MonoBehavior派生的构造函数)的构造函数.但如果我在Unity编辑器中运行程序然后停止程序,则会调用它四次.如果我将脚本附加到两个游戏对象上,则会七次.至少我多次在控制台中看到Debug.Log的输出.
不过,如果我TestString在编辑器中更改属性的内容,我手动输入的内容不会被覆盖!
为什么构造函数经常调用?何时在Unity的执行顺序中调用(Unity的事件函数执行顺序)?我可以忽略调用,还是必须在构造函数中添加特殊处理?到目前为止,我没有看到任何实际问题或副作用.
编辑:似乎只调用没有参数的构造函数.如果我只有带参数的构造函数,则不调用任何构造函数.
如何使用HEX值更改Unity中的按钮颜色?
我尝试了这个,但它不起作用,也许我在这里犯了一个错误:
btn.image.color = ColorUtility.TryParseHtmlString(DADADAFF, out color);
Run Code Online (Sandbox Code Playgroud) 我的场景中有一个淡入淡出面板gameobject,它必须位于所有其他游戏对象之上。但是,当我单击编辑器窗口中的某个对象时,由于该对象gameobject位于所有对象之上,因此是在层次结构中自动选择的对象。
有没有办法将 保持gameobject在画布顶部,就像现在一样,但当我单击场景时使其完全不可选择?
我有自定义的构建脚本,我想在其中添加更多选项。目标架构是其中之一。(我将IL2CPP用作脚本后端-我通过脚本进行设置)
根据文档,我可以使用PlayerSettings.SetArchitecture(),但似乎根本不适合我。它只有0-无,1-ARM64,2-通用的选项,我想要全部。所以我尝试使用:
PlayerSettings.SetArchitecture(BuildTargetGroup.Android, unchecked((int)AndroidArchitecture.All));
Run Code Online (Sandbox Code Playgroud)
但它不会改变任何东西,下面的几行也不会改变任何东西:
PlayerSettings.SetArchitecture(BuildTargetGroup.Android, unchecked((int)AndroidArchitecture.ARM64));
PlayerSettings.SetArchitecture(BuildTargetGroup.Android, unchecked((int)AndroidArchitecture.ARMv7));
PlayerSettings.SetArchitecture(BuildTargetGroup.Android, unchecked((int)AndroidArchitecture.X86));
Run Code Online (Sandbox Code Playgroud)
我想知道如何正确地做到这一点?
我有一个点(A)和一个向量(V)(假设它是无限长),并且我想找到直线上与原始点(A)最接近的点(B)。使用Unity Vector2或Vector3的最简单的表达式是什么?
我在一个 Unity 项目中工作,用户选择.bmp用于制作Texture2D并粘贴到模型的图像文件(格式),我创建了下一个代码,我可以正常使用.png和.jpg文件,但是当我尝试加载时,.bmp我得到了只有(我假设)带有红色“?”的默认纹理 符号,所以我认为是图像格式,如何.bmp在运行时使用文件创建纹理?
这是我的代码:
public static Texture2D LoadTexture(string filePath)
{
Texture2D tex = null;
byte[] fileData;
if (File.Exists(filePath))
{
fileData = File.ReadAllBytes(filePath);
tex = new Texture2D(2, 2);
tex.LoadImage(fileData);
}
return tex;
}
Run Code Online (Sandbox Code Playgroud) 我有一个项目,我在屏幕上有一个图像开始空白,然后图像作为精灵放置.我很想知道如何让精灵恢复为默认状态.谢谢
我有一个MonoBehavior使用这些方法的源脚本:
private void Update () {
if (Input.GetMouseButton(0)) {
HandleInput();
}
}
private void HandleInput () {
Ray inputRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(inputRay, out hit)) {
var position = transform.InverseTransformPoint(hit.point);
Coordinates coords = Coordinates.FromPosition(position);
HexCell cell = null;
if (!cells.TryGetValue(coords, out cell)) {
var err = string.Format("{0} is an invalid position and coordinates are improperly calculated: {1}", position, coords);
print(err);
throw new System.ArgumentException(err);
}
print(string.Format("[{0}] cell: [{1}] {2}", DateTime.Now, cell.id, cell.coordinates));
OnCellTouched(cell);
}
}
Run Code Online (Sandbox Code Playgroud)
网格是透明的,我按预期得到六边形(单元格).在编辑器中,当我单击一个单元格时,我得到一条消息输出:
[05.31.2017.14.15.14.2836] …Run Code Online (Sandbox Code Playgroud) 首先,我需要停用一个游戏对象,然后在10秒后激活它,所以我认为协同程序是合适的:
IEnumerator BarDeactivate(float sec)
{
yield return new WaitForSeconds(sec);
var obj = GameObject.Find("OBJ");
obj.SetActive(false);
}
IEnumerator BarReactivate(float sec)
{
yield return new WaitForSeconds(sec);
var obj = transform.Find("OBJ");
obj.SetActive(true);
}
Run Code Online (Sandbox Code Playgroud)
显然,我不能再使用,GameObject.Find所以我用它transform.Find来找到不活跃的游戏对象,但当然.SetActive现在不行,因为obj实际上并不是游戏对象...
如何投射找到的变换,以便可以再次设置它?
我试过obj.gameObject.SetActive(true)但它一定是错的,因为这个物体不会复活......
c# ×10
android ×1
bmp ×1
colors ×1
constructor ×1
execution ×1
inspector ×1
texture2d ×1
textures ×1
vectormath ×1