c#-Unity-访问其他脚本的变量-正确放置
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-Unity-访问其他脚本的变量-正确放置,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2222字,纯文字阅读大概需要4分钟。
内容图文
我知道如何访问另一个脚本的变量,但是我只能通过函数调用或委托来执行.第一个很简单,但是由于一旦我编辑了原始代码,代码就变得脆弱了,我必须再次编辑.
第二个比较好,但是由于我有很多函数,具有不同类型的返回值和参数,所以会使事情变得很复杂.
假设我想在游戏开始时做一些事情.到目前为止,我已经在适当的脚本中创建了一个名为OnGameStart()的函数,并从那里调用了我需要的所有东西,并且OnGameStart()已公开,并从另一个脚本中进行了调用.
一开始,我将需要播放声音,检查保存的数据,播放UI和其他动画等,但是我不想让代码成为灾难.
我在网上寻找了此信息,但只找到了最简单的“如何在脚本之间进行通信”的内容,它与基本函数调用(有时是事件)一起使用.有人能为我提供一些资源来指导我如何制作紧凑的,隔离的类,以容纳Demeter’s law吗?
解决方法:
解决此类问题的方法绝对有很多,例如,您可以从Hollywood principle中获得一些启发.
而不是让您的播放器搜索某些内容,而是在初始化时提供给他.
这是一个非常简单的示例:
游戏管理器界面的定义:
using UnityEngine;
namespace Assets.Scripts
{
public interface IGameManager
{
void PlayAudioClip(AudioClip audioClip);
}
}
游戏管理员的定义:
using UnityEngine;
namespace Assets.Scripts
{
public class GameManager : MonoBehaviour, IGameManager
{
#region IGameManager Members
public void PlayAudioClip(AudioClip audioClip)
{
// TODO
}
#endregion
}
}
一个例子:
using System;
using UnityEngine;
namespace Assets.Scripts
{
public class Player : MonoBehaviour
{
public GameManager GameManager; // TODO assign this in Inspector
public void Start()
{
if (GameManager == null)
throw new InvalidOperationException("TODO");
}
public void Update()
{
// demo
var wounded = true;
var woundedAudioClip = new AudioClip();
if (wounded)
{
GameManager.PlayAudioClip(woundedAudioClip);
}
}
}
}
您还可以在Unity中使用某种Singleton(或其他适当方法).
笔记:
上面的示例实际上只是一个示例,旨在向您提示如何思考,您还没有提供所有详细信息,即使您这样做了,我们也很难再为您提供帮助(只有随着时间的推移,您才能找到真正适合自己的方法您当前的问题).
在游戏项目中前进时,您会发现没有任何硬性规则可以遵循,显然模式很重要,但是您可能会发现自己最终拥有了自己的模式(即多种模式的细粒度组合使用).
结论是,发现/尝试模式,对其进行调整,随着时间的推移,您会发??现最适合您的方法.
内容总结
以上是互联网集市为您收集整理的c#-Unity-访问其他脚本的变量-正确放置全部内容,希望文章能够帮你解决c#-Unity-访问其他脚本的变量-正确放置所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。