Tag: unity3d

重复序列化和反序列化会创建重复项

大家好我的json serealization问题。 我在Unity下使用Json.NET包:我正在搜索一个数据库,可以在我的应用程序上编辑,并通过wwwForm和一个php文件存储在我的服务器上。 我没有问题来创建它并将其推到网上。 问题是,当我加载它时,数据库最后有一个新条目。 数据库类是这样的: public class Database { public List armies { get; set;} public Database() { armies = new List(); armies.Add (new Army()); } } public class Army { public string faction { get; set;} public List army { get; set;} public Army() { faction = “RED”; army = new List(); army.Add […]

Application.persistentDataPath在构建中的位置

当我从编辑器运行我的游戏并保存加载数据时,我在以下位置找到该数据: C:\Users\User\AppData\LocalLow\DefaultCompany\projectname\data 。 当我构建它并获得可执行文件时,该数据仍然正常加载,但如果我保存并重新启动,则不会保存。 但是,当我从编辑器中启动它时它会这样做。 这是我的代码中的错误,还是当我不从Unity Editor运行它时的其他文件? 后来当我导出游戏以启动它时,我有持久的数据I Json文件,它必须与它一起使游戏工作。 为清楚起见, 这里是处理Json的保存/加载的类: public class DataHandler { //Save Data public static void saveData(T dataToSave, string dataFileName) { string tempPath = Path.Combine(Application.persistentDataPath, “data”); tempPath = Path.Combine(tempPath, dataFileName + “.txt”); //Convert To Json then to bytes string jsonData = JsonUtility.ToJson(dataToSave, true); byte[] jsonByte = Encoding.ASCII.GetBytes(jsonData); //Create Directory if it […]

在Unity中,Unity如何神奇地调用所有“接口”?

Unity有一个“接口”,因为他们称之为IPointerDownHandler ( doco )。 你只需实现OnPointerDown … public class Whoa:MonoBehaviour,IPointerDownHandler { public void OnPointerDown (PointerEventData data) { Debug.Log(“whoa!”); } } Unity将“神奇地”在任何此类MonoBehavior中调用OnPointerDown 。 您无需注册,设置事件或执行任何其他操作 。 您所做的只是将“IPointerDownHandler”和“public void OnPointerDown”添加到类中,您可以随时神奇地获取这些消息。 (如果你不是Unity开发者 – 如果你在游戏运行时突然在编辑器中添加一个,它甚至可以工作!) 他们到底怎么做? 我怎么能用扩展名做到这一点? 它更像是一个抽象类 – 他们是如何做到的? 所以,我想这样做: public interface IGetNews { void SomeNews(string s); } 然后我可以将SomeNews添加到任何MonoBehavior中 ,从而随时 “向这些项目发送新闻”。 我完全熟悉各种替代解决方案。 我想知道他们是如何实现这种“神奇”的行为。 (顺便说一句:我觉得Unity 不应该调用这些接口 ,因为它基本上没什么就像接口一样 – 它恰恰相反! 。你可以说它们神奇地想要从一个以上的抽象类inheritance,我想。) 在旁边: […]

如何在Unity3D中使用GameObject.Find(“”)查找非活动对象?

我需要使用C#在Unity3D中查找非活动对象。 我有64个对象,每当我单击一个按钮,它就会在运行时激活/取消激活相应按钮的对象。 我怎样才能找到不活动的对象?

从Java调用Unity函数

我是团结的新手: 我在Unity中创建了一个简单的立方体并在其上放置了一些纹理 我旋转立方体…移动相机….然后导出到Android工作室。 当我运行一切看起来像Unity。 但我想从Android工作室代码(编程线)移动相机或立方体,我找不到任何方式..“findViewById”或类似的能够找到我的立方体:) 我尝试制作一个C#文件(我只在资源文件夹中创建一个)并放入: public class test : MonoBehaviour { public GameObject respawn; void Start () { Debug.Log(“aaaaaaaaaaaaa1111111111111111”); if (respawn == null) respawn = GameObject.FindWithTag(“mamaie”); respawn.transform.Rotate(10f, 50f, 10f); } // Update is called once per frame void Update () { transform.Rotate(10f, 50f, 10f); } void LateUpdate() { transform.Rotate(10f, 50f, 10f); } } 那么……我如何从编程线控制我的立方体(在统一设计并在android工作室中导入)?

通过脚本更改UI按钮的颜色

我正在尝试使用这行代码更改UI按钮上的颜色。 prev.GetComponent().colors.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f); 但是我收到了这个错误 Assets / _Scripts / OptionSwitch.cs(28,53):错误CS1612:无法修改`UnityEngine.UI.Selectable.colors’的值类型返回值。 考虑将值存储在临时变量中 我已经尝试将按钮和颜色存储为变量,然后再调用它们,但它不会更改错误代码。 编辑 : using UnityEditor; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using UnityEngine.Sprites; public class OptionSwitch : MonoBehaviour { ColorBlock colorBlock = new ColorBlock(); colorBlock.normalColor = new Color(0.0f, 0.0f, 0.0f, 1.0f); [MenuItem (“GameObject/UI/Switch”)] static void Switch(){ if (GameObject.FindObjectOfType (typeof(Canvas)) != […]

String.Split()函数神秘地忽略重复

在Unity3D中,我正在阅读包含节点及其连接信息的文本文件。 但是,似乎所有重复项都会自动删除! for (int j = 0; j < tokens.Length; j++) { Debug.Log(tokens[j]); } } 控制台中的结果: Node,Node2,Node2,Lamp,Lamp,Node1,Node3,Node4 // string text Node Node2 Lamp Node1 Node3 Node4 因此,当循环遍历数组时,它似乎跳过重复。

Unity3D。 试图在没有权限的情况下发送对象的命令

我有一个多人回合制战略游戏,需要一个游戏经理,控制当前的游戏状态(轮到谁了)。 这个管理器应该对每个客户端都是通用的,它的状态应该在服务器上同步。 以下是我这样做的方法:游戏管理器对象是NetworkBehaviour,它具有NetworkIdentity,它不是本地玩家权限,也不是服务器权限。 我已经制作了一个自定义的NetworkManager,它在客户端连接上生成游戏管理器,也测试它是否是服务器。 这是一个代码: public override void OnClientConnect(NetworkConnection conn) { ClientScene.Ready(conn); if (NetworkServer.active) { var manager = Instantiate(MultiplayerManagerPrefab, Vector3.zero, Quaternion.identity) as GameObject; var tacticsManager = manager.GetComponent(); NetworkServer.RegisterHandler(MsgType.AddPlayer, tacticsManager.CreatePlayerOnServer); NetworkServer.Spawn(manager); } ClientScene.AddPlayer(0); } 当我在服务器上运行它时它工作正常,它在客户端上创建一个实例并同步从服务器到客户端的变量。 但是,当我尝试从客户端运行命令时,它会忽略它们,抛出此警告: 试图在没有权限的情况下发送对象的命令。 UnityEngine.Networking.NetworkBehaviour:SendCommandInternal(NetworkWriter,Int32,String) 请注意,此游戏管理器是在任何玩家之前生成的,因为它必须负责产生玩家。 我究竟做错了什么?

随着时间的推移缩放GameObject

我制作了一个统一的测试游戏,这样当我点击一个按钮时,它会产生一个从工厂类创建的圆柱体。 我正在尝试这样做,当我创建圆柱体时,它的高度在接下来的20秒内缩小。 我发现的一些方法很难转化为我正在做的事情。 如果你能引导我走向正确的方向,我将非常感激。 这是我的圆柱类代码 public class Cylinder : Shape { public Cylinder() { GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder); cylinder.transform.position = new Vector3(3, 0, 0); cylinder.transform.localScale = new Vector3(1.0f, Random.Range(1, 2)-1*Time.deltaTime, 1.0f); cylinder.GetComponent().material.color = Random.ColorHSV(); Destroy(cylinder, 30.0f); } }

在Unity中,如何判断这是否是第一次打开游戏?

我想要一个脚本运行, 每当我在Unity中的游戏第一次打开时。