ScriptableObject平时开发存在的一些问题:
一个场景内有多个相同组件使用相同数值的时候,这个组件也在内存中多了一份实例,浪费内存空间。
static或者[Serializable]修饰的变量,在程序退出后会还原。编辑器模式运行时,只能通过Copy Component Values来临时保存调整好的数值。
项目之间、场景之间数据很难共享。
在runtime下要改变某个GameObject上组件的数值,就一定要获取到这个GameObject实例,使项目耦合度成倍提高,最后变成蜘蛛网。
场景中总会有一些空的GameObject用来保存和共享数据,这个GameObject基本不会参与太多的游戏逻辑,但为了保存和共享场景内的数据就不得不碍眼的在场景中出现,逼死强迫症,也不利于模块抽象。
同样,要通过UGUI Button中的On Click事件调用一个GameObject上的方法,也只能获取到GameObject实例来调用,数量太多的话也变成了蜘蛛网。
使用ScriptableObject如何解决
ScriptableObject是将数据存储在.asset文件中的,可 ...
unity
未读一、背景滚动实现方法
创建一个3d对象Quad,重命名为SimpleBackground,调整好大小(跟图片差不多大)
新建一个材质,设置shader为Unlit/Textu
将图片texture type设置为default,拖入材质。
将材质拖进SimpleBackground,这样就做好了背景。
通过实时更改材质中offset偏移值,来实现滚动效果
滚动代码如下:将Start()改为每帧刷新的协程(模拟Update())
Material material; [SerializeField] Vector2 scrollVelocity;//速度 void Awake() { material = GetComponent<Renderer>().material; } private IEnumerator Start() { while (GameManager.GameState != GameState.GameOver) //游戏状 ...
unity
未读slider.onValueChanged.AddListenerslider.onValueChanged.AddListener((float v) => {//v等价于slider.value AudioTuning.Instance.SetMasterVolume(v); });
AudioTuning:public class AudioTuning : SingLeton<AudioTuning>{ [SerializeField] AudioMixer audioMixer; public void SetMasterVolume(float volume) { audioMixer.SetFloat("MasterVolume", volume); }}
unity
未读
通过对象名称(Find方法)
GameObject.Find("name")
通过标签获取单个游戏对象(FindWithTag方法)
GameObject.FindWithTag("Tag");
通过标签获取多个游戏对象(FindGameObjectsWithTags方法)
通过类型获取单个游戏对象(FindObjectOfType方法)
通过类型获取多个游戏对象(FindObjectsOfType方法)
unity
未读参考项目:https://www.bilibili.com/video/BV15W411976h新加的功能1.怪物球自转
2.不同炮台只可在特定颜色,区域内建造。
3.未选中炮台不可建造
遇到的问题炮弹打中敌人之后发现后方的一个怪会持续扣血直到死亡。初步猜测是碰撞触发了多次,后来暂停看的时候发现,子弹爆炸特效(在子弹销毁时触发) 在敌人死亡的时候会一下子刷出特别多。因此我判断是子弹打入敌人之后没有实时销毁。运行一测,果然是。最后在子弹脚本中,释放子弹爆炸特效的前方增加了销毁自身的代码。修复了bug。
待续..
1.配置提交人姓名: git config --global user.name提交人姓名2.配置提交人姓名: git config --global user.email提交人邮箱3.查看git配置信息: git config --list
git init |初始化git仓库git status |查看文件状态git add 文件列表 |提交到暂存区git commit -m 提交信息 |向仓库提交代码
用==暂存区==中的文件覆盖==电脑工作目录==的文件:git checkout 文件名
将文件从暂存区里删除: git rm --cached 文件
将git仓库中置顶的更新==记录恢复==出来,并且覆盖==暂存区和工作目录==:
git reset --hard commitID
分支命令功能分支 -> 开发分支 -> 主分支
git branch 查 ...
unity
未读unity的Axis设置,路径为Edit->Project setting->Input:
属性如下:
Name:==按键名==该键的名称,可以在脚本编程中直接引用他。比如:Input.GetButtonDown(“Jump”);
Descriptive Name:==【描述名】==在游戏的独立机构中的配置对话框中,当控制值为正时候所显示的名称。默认空白。
Negative Descriptive Name:==【负描述】==在游戏的独立机构中的配置对话框中,当控制值为负的时候所显示的名称。
Nagative Button:==【负向按钮】==玩家按下这个按钮来让被控制物体向负方向运动。
Positive Button:==【正向按钮】==玩家按下这个按钮让被控制物体向正方向运动。
Alt Negative Button: 玩家可以使用的备选负向按钮,比如方向键和WASD
Al ...
using System;using System.Linq;namespace Calculator{ class Program { static void Main(string[] args) { for (int i = 0; i < 3; i++) { string inputStr = Console.ReadLine(); CalcOnline(inputStr); } } static CalcInfo[] configs = new CalcInfo[] { new CalcInfo("+",(a,b)=>a+b), new CalcInfo("-",(a,b)=>a-b), new CalcInfo ...
委托delegate:可以保存多个函数指针,试用=+,-+进行操作。//将函数赋值给delegate,delegate会储存下来。 //Action无返回值 Action<string> print = Print; print("使用print打印"); Func<float,float,float> fc = Mul;//打印:Func,第三个参数是返回值类型 var f = fc(3, 4).ToString(); //打印:乘法3 * 4 = 12 Console.WriteLine(f);//打印:12 CalFunc func = Add; func(1.1f, 2);//打印:加法1.1+2=3.1 Console.WriteLine("加入Sub()"); ...


