标签: unity5

Class不会使用unity的JSONUtility序列化为JSON

我有以下类,它是可序列化的,只有字符串作为字段:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[System.Serializable]
public class Cabeza
{

    string id, urlOBJ, urlTextura, pathOBJbajado, pathTexturaBajada;

    public string Id { get; set; }
    public string UrlOBJ { get; set; }
    public string UrlTextura { get; set; }
    public string PathOBJbajado { get; set; }
    public string PathTexturaBajada { get; set; }


    public Cabeza (string nuevoId)
    {
        Id = nuevoId;
        UrlOBJ =  nuevoId +".obj";
        UrlTextura =  nuevoId + ".png";

    }


}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我知道应该可以从中获取JSON ...但是,JsonUtility.ToJson()只返回{ }.这怎么可能?我错过了什么?

c# json unity-game-engine unity5

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

Unity-Monodevelop变量同步问题

我在主摄像头上添加了一个C#脚本.我定义了一个MyNumber如下变量-

public int MyNumber = 9;
Run Code Online (Sandbox Code Playgroud)

我的问题是当我改变变量的值时; 在Unity Editor中,它保持不变.例如,如果我使用Monodevelop将C#脚本文件中的值从9更改为19,则Unity编辑器将继续显示My Number = 9而不是19; 除非我重置脚本文件.

请检查截图: 变量未正确同步

c# monodevelop unity-game-engine unityscript unity5

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

Unity:需要在返回池时重置池化对象.也许使用ScriptableObject?

我最近一直在尝试统一对象池,以便一次加速几个游戏对象的实例化.

但是,由于这些是相当复杂的对象,我需要在它们返回池中时重置它们.

我读到使用ScriptableObject可能是存储默认值以便轻松重置的好方法.但为了做到这一点,我需要在运行时加载一个新的ScriptableObject来存储对象的实际值.

所以在伪代码中,我有一个带public MyScriptableData data和的类public MyScriptableData defaults

1)使用默认的ScriptableObject创建新的池化对象data = defaults;;

2)做一些在对象生命周期内改变脚本对象值的东西

3)取消激活,然后将池化对象返回池,将scriptableObject重置为默认值(data = defaults;再次).

我有3个主要问题:

A)我不确定如何实际实现这一点.在我看来,在步骤2中,默认值将被更改.因此,重置为默认值将不起作用.我考虑过使用创建脚本对象的新实例

data = ScriptableObject.CreateInstance<MyScriptableData>();

但是,我将如何复制默认值defaults,确保永远不会更改默认值?我希望默认值可以在Unity编辑器中作为资产进行编辑.

B)如果我使用CreateInstance,性能会不好?我正在做这个对象池的全部原因是为了降低对象实例化的性能成本.我不想通过实例化脚本化对象来重新引入慢速代码.

C)这种方法好吗?或者是否有更好的方法在返回池之前重置对象?

编辑基于一些答案:我已经有一个具有很长字段列表的设置,然后将这些字段的默认值存储在字典中.但我发现每次我想添加/更改/删除字段时,我都必须在几个位置更改代码

ATTEMPTED SOLUTION(但错误,见下文):我为ScriptableObject创建了一个扩展方法:

using UnityEngine;
using System.Reflection;

public static class ScriptableObjectExtension {

    public static T ShallowCopy<T> (this T orig) where T : ScriptableObject {
        T copiedObject = ScriptableObject.CreateInstance<T> ();
        FieldInfo[] myObjectFields = orig.GetType ().GetFields (
                                         BindingFlags.NonPublic | BindingFlags.Public |
                                         BindingFlags.Instance);

        foreach (FieldInfo fi in myObjectFields) {
            fi.SetValue (copiedObject, …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine object-pooling unity5

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

如何在Unity3D中保存自定义变量?

我正在为Unity3D中的游戏开发一个保存和加载系统.像位置这样的基础很简单,我就是这样

 public void Save() {

     PlayerPrefs.SetFloat ("X", transform.position.x);
     PlayerPrefs.SetFloat ("Y", transform.position.y);
     PlayerPrefs.SetFloat ("Z", transform.position.z);

 }

 public void Load() {

     float x = PlayerPrefs.GetFloat ("X");
     float y = PlayerPrefs.GetFloat ("Y");
     float z = PlayerPrefs.GetFloat ("Z");

     transform.position = new Vector3 (x, y, z);

 }
Run Code Online (Sandbox Code Playgroud)

但是当我想要保存自定义变量时,它就出现了.以下是包含它们的类如下所示:

     [SerializeField] private Stat health; 
     public static Stat Health { get; set; }
     [SerializeField] private Stat exp;
     public static Stat Exp { get; set; }
     [SerializeField] private Stat oxygen;
     public static Stat Oxygen { get; set; }
     [SerializeField] …
Run Code Online (Sandbox Code Playgroud)

c# variables serialization unity-game-engine unity5

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

Unity3d创建具有预定结果的骰子

我有一个预制件(骰子).由于我的游戏是多人游戏,因此我会在玩家实际滚动之前生成掷骰子的结果.然后我将该值发送给游戏.我想取这个值并创建一个模具滚动,结果是预定值.最好的方法是什么?我想这是一个动画(每个结果1)但我不知道从哪里开始.我已经找到了关于创建骰子动画的教程但却找不到任何东西.或者,这可以在代码中完成吗?如果是这样,方向上的任何指针都会很棒.

谢谢

c# unity-game-engine unityscript unity5

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

Unity:什么是Unity测量?

什么是Unity坐标测量?(cm,m,km)

如何实施真正的措施呢?

我想在Unity中实现一个真正的措施.怎么做?

public Vector2 GetAsMeters (Vector2 vec) {
    Vector2 meters = new Vector2 (0, 0);
    while (vec.x > 1000) {
        vec.x -= 1000;
        meters.x++;
    }
    meters.x += vec.x;
    while (vec.y > 1000) {
        vec.y -= 1000;
        meters.y++;
    }
    meters.y += vec.y;
    return meters;
}
Run Code Online (Sandbox Code Playgroud)

编辑:如何实现像"Left 4 Dead"这样的测量?(这个游戏有一个巨大的地图,它只要真正的公里)

c# coordinates unity-game-engine measure unity5

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

正确的方法来移动刚体GameObject

我刚刚开始学习Unity。我试图通过使用此脚本来移动一个简单的盒子。前提是,只要有人按下“ w”,盒子就会向前移动。

public class PlayerMover : MonoBehaviour {

public float speed;
private Rigidbody rb;


public void Start () {
    rb = GetComponent<Rigidbody>();
}

public void Update () {
    bool w = Input.GetButton("w");

    if (w) {
        Vector3 move = new Vector3(0, 0, 1) * speed;
        rb.MovePosition(move);
        Debug.Log("Moved using w key");

    }

}
}
Run Code Online (Sandbox Code Playgroud)

每当我使用此按钮时,该框都不会在“ w”按键上向前移动。我的代码有什么问题?我以为可能是我设置Vector 3move的方式,所以我尝试用速度替换z轴,但这没有用。有人可以告诉我我在搞砸吗?

c# unity-game-engine unity5

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

无法将类转换为dex格式Unity

使用Google Play游戏服务和Admob插件,我似乎无法使自己恢复为APK,并且收到以下错误消息。由于我已删除了一些重复的文件,因此将不胜感激,但是仍然无法找到无法构建我的应用程序的原因。

我正在使用Unity Unity 5.6.1f1(64位)。

游戏服务:https//github.com/playgameservices/play-games-plugin-for-unity广告:https//github.com/unity-plugins/Firebase-Admob-Unity

    CommandInvokationFailure: Unable to convert classes into dex format.
C:/Program Files/Java/jdk1.8.0_121\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="C:/Users/Jack/AppData/Local/Android/sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar" -

    stderr[
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzbyb;
    Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/google/android/gms/internal/zzbyc;
    2 errors; aborting
    ]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

unity-game-engine admob google-play unity5

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

将外部项目添加到统一解决方案

我正在尝试将一个外部项目添加到我的统一解决方案中。使用mono开发可以正常工作,但是每当我切换回unity时,似乎都会从解决方案中删除引用。

有办法防止团结吗?

谢谢,

unity-game-engine unity5

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

如何通过标记找到父对象的子对象?

for (int i = 0; i < numberOfObjects; i++)
        {            
            if (squadMembers.Length == 0)
                go = Instantiate(squadMemeber);
            Vector3 pos = FormationSquarePositionCalculation(i);
            go.position = new Vector3(transform.position.x + pos.x, 0, transform.position.y + pos.y);
            go.Rotate(new Vector3(0, -90, 0));
            go.tag = "Squad Member";
            go.transform.parent = gameObject.transform;
            newpos.Add(go.transform.position);
            qua.Add(go.rotation);
        }
Run Code Online (Sandbox Code Playgroud)

我给所有的孩子们提供了一个标签名称"Squad Member",但它下次还会标记我用来实例化该队员的对象.

所以,例如,如果有20个numberOfObjects,那么当我正在做的程序中的其他地方时:

squadMembers = GameObject.FindGameObjectsWithTag("Squad Member");
Run Code Online (Sandbox Code Playgroud)

现在我的小队成员将包含21个对象.但我希望它包含20个.20个孩子.

c# unity-game-engine unity5

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