呼和浩特u3d游戏培训怎么收费
呼和浩特u3d游戏培训怎么收费
2004年,英特尔、波音、Adobe、微软以及30余家公司在西班牙巴塞罗那共同宣布合作开发一个名为U3D的通用3D图形格式标准。旨在让用户无须专用软件,能够像MP4用于视频和JPEG用于静态图像那样,可以免费获得的3D数据编码方式。
Unity3D游戏开发工程师班
阶段一 Unity基础
Unity界面与资源系统 Unity简介、Material、Light、Camera、地形编辑器。熟练操作Unity编辑器, 掌握常用物体及组件在实际开发中的应用
Unity环境搭建 C#语言00P技术:类对象的创建和使用,理解构造和析构函数的申请与释放过程、了解C#内存申请释放 的处理过程;成员变量属性化操作、纯虚类继承设计方案、类抽象性变化、使用泛型完成任意类型对象、 深度复制和浅复制的操作、0bject基类的使用、集合应用;
Unity3D物理系统和粒子系统学习 温习牛顿三大定律;使用牛顿定律学习“刚体”的重力引擎控制;在万有引力的基础上学习基本的3D物 理碰撞学;学习使用程序代码直接操作刚体的力量变化,监视碰撞消息;理解美术如何制作粒子,学习粒 子系统的控制;使用代码控制粒子系统的自动装载和卸载过程;消费型框架;
Unity3D动画系统 使用Animation旧动画系统实现简单的重复性运动;使用脚本实习旧动画系统实现状态机控制;MecAnim新 动画系统的学习和使用;利用新动画系统采用图示化的方式构建动作执行方案;使用代码控制动画状态机产 生运动变化;状态机控制框架;
Unity API函数库介绍 脚本简介、GUI简介、GUI类、GUILayout类、API函数库,灵活运用三角函数、 反三角函数、向量、旋转等工具类, 解决游戏中数学问题。
阶段二 C#语言基础
C#语言基础 变量、语句、方法、数组、数据类型、类和对象。深入理解.NET框架原理,熟练掌握C#编程技巧。 培养良好的企业级编程习惯。
C#*开发 C#语言00P技术:类对象的创建和使用,理解构造和析构函数的申请与释放过程、了解C#内存申请释放 的处理过程;成员变量属性化操作、纯虚类继承设计方案、类抽象性变化、使用泛型完成任意类型对象、 深度复制和浅复制的操作、0bject基类的使用、集合应用;
*数据结构 单相,双向链表的构建与实际应用,堆和栈的构建与使用,队列的构建与使用,二叉树创建与周游、 使用二叉树性质研究B树的构建方案、创建哈夫曼编码树实现gao效键值对排序; 内部排序算法:插入排序、选择排序、交换排序归并排序、基数排序;
阶段三 Unity*应用
Unity3D UI开发 NGUI与UGUI :利用NGUI与UGUI制作控件、MVC架构学习、学习事件回调机制; Unity Editor控件工具制作;
2D游戏 认识Unity2D游戏,Unity2D游戏相关碰撞、射线、刚体、关节等,制作精灵动画,讲解Unity2D相关API。
手机游戏以及优化 移动平台环境开发概述,移动平台开发环境搭建,触屏、虚拟摇杆使用,手机重力感应,Android、Ios发布, 游戏优化。掌握手机操控开发,可以实现手机触屏操控游戏
Unity3D*开发 Socket套接字应用,XML文件读写;Json文件读写; sqlite3使用;多线程消息通知框架
阶段四 Unity实战项目案例孵化
美术规范、优化 撰写unity美术制作规范文档、前期建模软件和unity对接注意事项,模型、贴图、材质、动画部分针对不同 平台导出设置及优化
游戏发布及调试 不同平台游戏发布、测试、调试、修改bug,发布游戏
第五阶段 作品指导
课程 课程内容
毕业作品指导 毕业作品点评修改,分析工作形式及指导;应聘注意事项及分析
执行外部脚本的方式
假如在当前目录有 a.sh 脚本,内容如下
#!/bin/bash
echo "a.sh..."
在一个脚本中执行外部脚本主要有以下几种方式
source 外部脚本名字
在当前目录下的 b.sh 脚本,内容如下:
#!/bin/bash
source a.sh
echo "b.sh..."
执行 ./b.sh,结果如下
[root@ecs-centos-7 ~]# ./b.sh
a.sh...
b.sh...
脚本中 source a.sh 命令 会先执行当前目录下的 a.sh脚本,所以结果会先输出 a.sh...再输出 b.sh脚本本身的打印
点号 外部脚本名字
把 b.sh 脚本中执行a.sh脚本的语句修改成 点号 + 空格 + a.sh ,修改之后的脚本内容如下:
注意:点号和a.sh之间一定要加上空格,否则执行的时候会出错
#!/bin/bash
. a.sh
echo "b.sh..."
执行 ./b.sh,结果如下
[root@ecs-centos-7 ~]# ./b.sh
a.sh...
b.sh...
在上述脚本中, . a.sh 会先执行a.sh脚本, 结果会先输出 a.sh...再输出 b.sh...
sh 外部脚本名字
sh 外部脚本名字 和 ./外部脚本名字 两种方式是一样的,选择哪一种方式都没问题,下面是以前面一种方式为例说明的
把 b.sh 脚本中 source a.sh修改成 sh a.sh ,修改之后的脚本内容如下:
#!/bin/bash
sh a.sh
echo "b.sh..."
执行 ./b.sh 命令, 结果如下
[root@ecs-centos-7 ~]# ./b.sh
a.sh...
b.sh...
可以看出,结果输出和上面两种方式是一样的
三种方式的有什么区别
调用外部脚本有 source 外部脚本 、点号 外部脚本、sh 外部脚本 三种方式,它们之间有什么区别呢?
其中,source 外部脚本 和 点号 外部脚本 两种方式是相同的,当前脚本继承了外部脚本的全局变量和函数, 相当于把外部脚本的函数和全局变量导入了当前脚本中
修改 a.sh 和 b.sh 脚本, 内容如下
a.sh脚本
#!/bin/bash
VAR_A=10
func_a()
{
echo "a.sh...pid:$$,param:$1"
}
b.sh脚本
#!/bin/bash
source a.sh
func_a $1
echo "vara:$VAR_A"
echo "b.sh...pid:$$"
执行 ./b.sh 5 命令,结果如下
[root@ecs-centos-7 ~]# ./b.sh 5
a.sh...pid:21485,param:5
vara:10
b.sh...pid:21485
两个脚本中的 $$ 是指执行脚本的进程ID,从结果可以看出,a.sh 和 b.sh 都是在同一个进程内执行的,所以在 b.sh 脚本中执行 source a.sh 命令,会把 a.sh 脚本中的全局变量 VAR_A 和函数 func_a导入到 b.sh中
在 b.sh中打印变量 VAR_A,输出的值和 a.sh中相同,调用 func_a函数,输出也说明了调用的是 a.sh中的函数
source 外部脚本 、点号 外部脚本 两种方式是相同的, 所以, 把 b.sh 中 source a.sh 修改成 . a.sh , 执行 ./b.sh 5, 结果依然是相同的
由于 sh 外部脚本的方式是当前脚本和外部脚本在两个不同的进程中执行,所以当前脚本不能直接使用外部脚本中的函数和全局变量
修改 a.sh 和 b.sh 脚本, 内容如下
a.sh脚本
#!/bin/bash
test_a()
{
echo "a.sh...test_a"
}
echo "a.sh...pid:$$"
b.sh脚本
#!/bin/bash
sh a.sh
echo "b.sh...pid:$$"
test_a
执行 ./b.sh 命令,结果如下
[root@ecs-centos-7 ~]# ./b.sh
a.sh...pid:21818
b.sh...pid:21817
./b.sh:行7: test_a: 未找到命令
从结果可以看出,执行 a.sh 和 b.sh 的进程ID是不同的,b.sh脚本进程找不到test_a函数,所以在b.sh中调用test_a 函数会提示 未找到命令
调用外部脚本中的函数
上一节讲到 sh 外部脚本 的方式无法直接使用外部脚本中函数和全局变量,下面提供几种方法可以解决这个问题
case 分支选择
这种方法类似于程序代码中的 switch case 语句,通过switch 选择不同的分支从而执行不同的逻辑,shell脚本中是使用case关键字来实现的
a.sh脚本
#!/bin/bash
VAR_A=10
test_a()
{
echo "test_a..pid:$$,p1:$1,p2:$2"
}
get_var()
{
echo ${VAR_A}
}
case "$1" in
ta)
test_a $2 $3
;;
var)
get_var
;;
*)
echo "parameter err..."
esac
b.sh脚本
#!/bin/bash
echo "b.sh...pid:$$"
sh a.sh ta 3 5
ret=$(sh a.sh var)
echo "ret:$ret"
执行 ./b.sh 命令,结果如下
[root@ecs-centos-7 ~]# ./b.sh
b.sh...pid:24813
test_a..pid:24814,p1:3,p2:5
ret:10
脚本b.sh一开始打印了调用自身的进程ID
sh a.sh ta 3 5 语句是调用a.sh脚本,传入的三个参数分别是ta, 3, 5 ,执行a.sh时,传入的*一个参数 ta经过case匹配之后调用 test_a函数,并把剩下的两个参数 3和5作为参数传入函数
ret=$(sh a.sh var) 语句时调用a.sh脚本,传入一个var 参数,经过case匹配之后调用get_var函数,该函数的作用输出脚本中全局变量VAR_A的值,语句中$()的作用是获取()中命令的返回值,这里是把a.sh脚本中 get_var函数的返回值赋值给 ret变量,所以该变量的值是 a.sh脚本中全局变量VAR_A的值
说明:如果想要获取函数的返回值,可以在函数中用 echo 打印相应的输出值,然后使用$(函数名 参数列表)可以获取到函数中打印的值,如上面b.sh脚本中 ret=$(sh a.sh var)语句,变量ret的值是 a.sh脚本中 get_var函数输出的值10
这里需要注意的是, 如果函数中有echo调试日志,那么调试日志也会一起返回
函数调用模板
上面介绍的用 case 关键字去匹配调用不同的函数有一个缺点,每次a.sh脚本中增加一个函数的时候,case 就需要添加一个分支,分支里调用不同的函数,还需要注意函数是否有参数传入以及参数数量是否正确
我们可以在每个供外部调用脚本的尾部加上以下的语句,就可以解决上述问题, 具体语句如下
if [ $# -ge 1 ]; then
name="$1"
shift 1
$name "$@"
fi
上述语句首先判断调用脚本时传入的参数数量,只有参数数量大于等于1才有效,传入的*一个参数表示函数名字,从第二个参数到较后一个参数都会作为参数传入到函数中
这里的 shift 1 是把传入脚本的参数左移一个位置,比如:传入脚本参数有 $1 $2 $3三个参数,左移一个位置之后, $2 移动到 $1 的位置,$3 移动到 $2 的位置,参数数量变为2了
原因: 传入脚本的参数中,*一个参数是函数名字,从第二个参数起才是函数的参数,如果不做左移处理,*一个参数函数名字也会作为参数传入到函数中
下面是完整的脚本内容
a.sh脚本
#!/bin/bash
VAR_A=10
test_a()
{
echo "test_a..pid:$$,p1:$1,p2:$2"
}
get_var()
{
echo ${VAR_A}
}
if [ $# -ge 1 ]; then
name="$1"
shift 1
$name "$@"
fi
b.sh脚本
#!/bin/bash
echo "b.sh...pid:$$"
sh a.sh test_a 3 5
ret=$(sh a.sh get_var)
执行 ./b.sh 命令,结果如下
[root@ecs-centos-7 ~]# ./b.sh
b.sh...pid:25086
test_a..pid:25087,p1:3,p2:5
ret:10
可以看出,结果和上面 case 的方法是一样的
现在其他脚本中都可以通过 sh a.sh 函数名 参数列表 这样的方式调用 a.sh 脚本中的函数了,通过 $(sh a.sh 函数名 参数列表)的方式获取 a.sh脚本函数的返回值
两者的优缺点
与case分支选择的方式相比,函数调用模板的优点是调用者只需要关心复用的脚本中函数名、函数传入参数、函数返回值就可以直接使用
缺点是如果有多个脚本都调用了复用脚本中的函数,当复用脚本中函数名变更时,需要修改所有调用了它的地方
函数调用模板方式的缺点恰恰是case分支选择方式的有点,case分支选择的方式时根据传入的字符串参数调用不同的函数,这里的字符串参数相当于函数的别名,只要这个参数保持不变,脚本中的函数名字可以任意变更
上述的优缺点比较只是一个相对的比较,实际应用中下不会很明显,大部分情况两种方式都可以使用
更多培训课程,学习资讯,课程优惠等学校信息,请进入 呼和浩特达内教育呼和浩特java培训呼和浩特php培训 网站详细了解,免费咨询电话:400-998-6158