foreach循环遍历中不能修改遍历dui x
foreach循环遍历中不能修改遍历dui x
ci chu为什么用反射调用方法
//1.修改stone脚本的CreateTears方法
private void CreateTears(){
tearNum++;
GameObject go = Instantiate(tearsGo,roadsTrans[0].position,Quaternion.identity);
Tear tear = go.GetComponent<Tear>();
tear.pointsTrans = pointTrans;
}
//2.把眼泪的层级改成2
//3.新建脚本Tear
public class Tear:MonoBehaviour
{
public Transform[] pointsTrans;
void Update()
{
Vector2.MoveTowards(transform.position,)
}
}
Tear脚本
public Transform[] roadsTrans;
void Update(){
Vector2.MoveTowards(transform.posistion,roadsTrans[roadsTrans.Length-1].posistion,0.02f);
}
获取Points下的子路点:
两种方法
方法1:
tearsGo = Rescources.Load<GameObject>("Prefabs/Tear");
transform.Find("Points").GetChild(0);
transform.Find("Points").GetChild(0-n);
方法2:定义一个数组,存放子路点
private Transform[] pointsTrans;
void Start(){
tearsGo = Rescources.Load<GameObject>("Prefabs/Tear");//加载资源预制体
Transform pointTrans = trans.Find("Points");
//寻找父路点
pointsTrans = new Transform[pointTrans.childCount];//初始化路点数组,数组大小是父节点的数目
for(int i=0;i<pointsTrans.Length;i++)
{
//把子路点加进去
pointsTrans[i] = pointsTrans.getChild(i);
}
foreach(var item in pointsTrans)
{
Debug.Log(item);
}
}
Invoke(Invoke和InvokeRepeating有啥区别)
和携程移动眼泪
private int tearNum;
start(){
...
Invoke("StartcreatingTears",6);
}
// 定义一个方法
private void CreateTear(){
tearNum++;
Instantiate(tearsGo,roadsTrans[0]);
}
//每次生成一滴眼泪
private void StartcreatingTears(){
//从第0s开始,每隔2s开始调用一次方法
InvokeRepeating("CreateTear",0,2)
}
//眼泪数量限制,到达数量了停掉
void Update(){
if(tearNum>=5){
CancelInvoke();
tearNum = 0;
}
}
prefabs预制体文件夹的创建
拖动tear文件到prefabs中变成预制体
stone脚本挂在石像上
使用resource.Load<>加载预制体
a.先定义一个初始变量
private GameObject tearsGo;
b.加载资源
tearsGo = Resources.Load<GameObject>("Prefabs/Tear");
创建几个空游戏对象,作为tears的lu'dian
组件Trail Renderer 拖尾效果
材质的设置Materials选择一个材质
持续时间0.6
拖尾效果的修改,贝塞尔qu'xian(0.02-->0)
主要是讲了一下脚本的挂载
先定义一个路点sp1作为目标位置
1.寻找到目标物体sp1的位置,获取目标位置的位置
private Transform Trans;
Start(){
Trans = GameObject.Find("sp1").transform;
}
2.使用moveTowards方法当前移动物体
transform.position = Vector2.MoveToward(transform.posistion,Trans.posistion,移动速度);
当前位置,目标位置,移动速度
1.先创建animator和animation
2.在animator文件夹中创建animator controll,然后再需要播放动画的物体上挂载animator ,把刚刚创建的动画对象拖进controll
3.选中动画资源,然后ctrl全选,拖动到需要播放对象的物体身上。
4.把生成的anim动画文件放入animation文件下下
5.在动画面板观察动画顺序
6.设置显示的层级
7.在环境空物体中添加audio scorce背景音乐
1.面向对象七大设计原则?
1.开闭原则 2.单一职责 3.特米特法则原则
4.合成/聚合原则 5.依赖原则 6.里氏替换
7.接口隔离
2.面向对象三大特性
继承 封装 多态
3.为什么需要构造方法
使用tab.Get<object,object>(item); 进行遍历
完成代码如下:
var tab = MainLuaEnv.luaEnv.Global.Get<LuaTable>("Person");
foreach (var item in tab.GetKeys())
{
print("通过luatable的方式访问lua:" + item+"----"+ tab.Get<object,object>(item));
}
加了 [CSharpCallLua]特性 还是报错的话
将interface设置成public,然后回到unity界面,上方以此点击
Clear Generated Code=>
Generate Code
再次运行就不会报错了
class类中定义的名字要和lua中table表的名字一致
C#要关闭NoDelay
这节课贼绕
1..接收信息的时候先更新writeIndex指针,写入到length的位置,length包含2个长度的头,也就是
|A|A|1|2|3|4| | | |
writeIndex = 6 指向的值为4
2.处理接收到的信息的时候更新readIndex
|A|A|1|2|3|4| | | |
首先readIndex += 2 先指向body内容处
然后再 readIndex += bodyLength
readIndex = 6 指向的值为4
使用character controller 没有重力效果,只能模拟重力
有条件的情况下可以不用勾选has edit time,没有的话需要勾选
1.课程与项目介绍
2.游戏整体框架梳理与UML图制作
3.UIPanel的制作与UI细节功能的学习与实现
4.常用设计模式的学习与在项目中的应用
5.UIPanel功能的实现
6.编图功能的制作与怪物的功能实现
7.游戏住逻辑与功能的实现
8.游戏的完善与怪物窝的制作
这里的缓动变黑可以用DOTWeen的 DOTween.To
private CanvasGroup fadeCanvaseGroup;
private bool isFade;
private void Start()
{
fadeCanvaseGroup = FindObjectOfType();
Fade(1);
}
private void Fade(float alpha)
{
isFade = true; DOTween.To(() => fadeCanvaseGroup.alpha, a => fadeCanvaseGroup.alpha = a, alpha, 10);
}