如何将一个脚本中的所有bool设置为另一个脚本中的bool?

时间:2018-05-13 19:46:10

标签: c# unity3d

是的,所以我在两个gameObjects上有两个相同脚本的实例。他们有bo ..

var express = require('express');
var router = express.Router();
var passport = require('passport');
router.get('/',(req, res, next) => {
    res.render('login', {title:'Login to use Overseer'});
});
router.post('/', passport.authenticate('local', {successReturnToOrRedirect: '/', failureRedirect: '/login'}), (req,res,next) => {
    if (req.body.remember) {
        req.session.cookie.maxAge = 30 * 24 * 60 * 60 * 1000; // Cookie expires after 30 days
    }
    else {
        req.session.cookie.expires = false; // Cookie expires at end of session
    }
    res.redirect('/');

});
module.exports = router;

右。现在我想将值从一个游戏对象复制到另一个游戏对象。但是,如果我向此脚本添加一个值,我不想更改复制值的脚本。有没有办法自动循环遍历所有布尔值并在一次脚本中将它们设置为值?

2 个答案:

答案 0 :(得分:2)

不确定

这是如何实现这一目标的一个例子:

public class Program
{
    public static void Main(string[] args)
    {
        var original = new Values();
        original.One = true;
        original.Two = false;
        var copy = CopyValuesToAnotherValues(original);
        Console.WriteLine($"one value: {copy.One}; two value: {copy.Two}");
        Console.ReadLine();
    }

    public static AnotherValues CopyValuesToAnotherValues(Values originalValue)
    {
        var valuesProperties = typeof(Values).GetProperties();
        var anotherValuesProperties = typeof(AnotherValues).GetProperties();

        var anotherValueInstance = new AnotherValues();

        foreach (PropertyInfo property in valuesProperties)
        {
            if (property.PropertyType != typeof(bool))
            {
                continue;
            }

            var booleanValue = property.GetValue(originalValue);
            anotherValuesProperties.Where(x => x.Name == property.Name).Single().SetValue(anotherValueInstance, booleanValue);
        }

        return anotherValueInstance;
    }
}

public class Values
{
    public bool One { get; set; }
    public bool Two { get; set; }
}

public class AnotherValues
{
    public bool One { get; set; }
    public bool Two { get; set; }
}

当然,这需要根据您的用例进行调整,但这是它的基础知识并且有效,试一试并尝试理解这些机制。

另一种实现此目的的方法是使用AutoMapper,稍后查看它并决定是否要为此推送自己的代码或使用此库。

答案 1 :(得分:0)

如果我理解正确,你想创建"共享"变量

因此,您可以使用ScriptableObject。在assets文件夹中创建名为 BoolVariable 的新脚本,并输入以下代码:

using UnityEngine;
[CreateAssetMenu(menuName = "Shared/Bool")]
public class BoolVariable : ScriptableObject{
    public bool Value;
}

然后创建你的bool对象 enter image description here

您的Values课程将更改为:

public class Values: MonoBehaviour {
    public BoolVariable One;
    public BoolVariable Two;
}

设置新的' Bools'

enter image description here

希望这可以帮助你,或者提供一些想法!