vs快捷键:
回到上一个光标位置:使用组合键Ctrl + -
前进到下一个光标位置:“Ctrl + Shift + - 查找:使用组合键“Ctrl+F”;
搜索 使用组合键Ctrl+i
复制一整行代码,Ctrl+C
剪切一整行代码,Ctrl+X
删除一整行代码,Ctrl+LCtrl+Enter:在当前行的上面插入一个空行;
Ctrl+Shift+Enter:在当前行的下面插入一个空行。 注释:组合键Ctrl+K+C
取消注释:组合键“Ctrl+K+U转小写:Ctrl+ U
转大写:CTRL + SHIFT + U
如果操纵rigidbody,脚本的具体操纵要写在void FixedUpdate(){}函数中
在unity4当中rigidbody.velocity直接去的rigidbody的速度是可以的然而在unity5当中这样写取不出rigidbody,这是因为unity5当中把语法规范化了,先 Rigidbody rigidbody;然后rigidbody = GetComponent<Rigidbody>();然后才能拿到.velocity
由于限定刚体位置的x在xMin,xMax之间,所以调用了mathf.clamp值,该函数的作用是取得xMin,xMax之间的值,打灰机项目中在update函数中添加这行代码可以永远控制飞机的位置不超出边界
在脚本中创建了2个类,但是在unity中只会显示monobehaviour类中的参数,我们需要把它可序列化
只需添加一行即可
这样unity中显示两个类的参数
飞船发射的子弹不希望有边边,在shader---->particles----->addictive这样就直剩子弹了
组件collider要使用Trigger检测物体进入,则需要勾选Is Trigger选项
Updata函数和FixedUpdate函数的区别:
Update是在每次渲染新的一帧的时候才会调用
FixedUpdate,是在固定的时间间隔执行,不受游戏帧率(fps)的影响
FixedUpdate的时间间隔可以在项目设置中更改,Edit->Project Setting->time 找到Fixed timestep。就可以修改了
在检测鼠标的上下左右键时可以卸载fixedupdate函数中
飞机一秒只发射4发子弹的代码;
public float fireRate=0.25f;
private float nextFire;
if( time.time>nextFire ){
nextFire=time.time+fireRate;
//具体操作
。。。
}
instantiate用法:
Instantiate(Object original, Vector3 position, Quaternion rotation);
original是创建的对象,position是对象要放的位置坐标,rotation是旋转的角度。
Quaternion的意思是四元数,用于代表旋转。
Quaternion.identity的含义:
transform.rotation = Quaternion.identity;
mathf.Lerp插值运算,用于渐变
Mathf.Lerp(float ,float,float);//基于浮点数第三个参数返回第一个数到第二个数之间的插值,第三个参数限制在0~1之间。
var minimum = 10.0;
var maximum = 20.0;
float a=Mathf.Lerp(minimum, maximum, Time.time) // 在一秒内从minimum渐变到maximum一般运动的物体添加rigidbody属性,墙不用添加rigidbody
在打灰机项目中控制飞机的移动这样操作。可以看到rigidbody.velocity是个向量,用平面的x,y轴的长度放到一个向量上乘以速度赋给刚体的速度
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
Vector3 move=new Vector3(h,0f,v);
rigidbody.velocity = speed * move;public GameObject bolt; //发射子弹
public GameObject spawnPosition; //发射位置
void Update()
{
if (Input.GetButton("Fire1"))
{
Instantiate(bolt,spawnPosition.transform.position,spawnPosition.transform.rotation);
}
}如何让陨石实现自我旋转的:这里Random.insideUnitSphere函数是返回半径为1的球体内的一个随机点,这里rigidbody.angularVelocity是刚体的角速度向量,不是角速度长度,如果是角速度长度则是rigidbody.angularVelocity.magnitude rigidbody.angularVelocity = Random.insideUnitSphere*5;打灰机是如何实现爆炸效果的:这里的playerExplosion当然在脚本外属性中把爆炸效果拖动到其中public GameObject playerExplosion;
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "feiji")
{
Instantiate(playerExplosion, this.transform.position, this.transform.rotation);
}public GameObject[] xingXing;
void Update () {
if (Random.value<0.1)
{
Xiahua();
} }
//陨石下滑函数
void Xiahua()
{
GameObject o = xingXing[Random.Range(0,xingXing.Length)];
Vector3 p = new Vector3(Random.Range(-vector.x,vector.x),vector.y,vector.z);
Quaternion q = Quaternion.identity;
Instantiate(o,p,q);
}static List<int> GetInitialData()
{
return new List<int>(){1,2,3,4};
}
static IEnumerable<int> FilterWithoutYield()
{
List<int> result = new List<int>();
foreach (int i in GetInitialData())
{
if (i > 2)
{
result.Add(i);
}
}
return result;
}
static IEnumerable<int> FilterWithYield()
{
foreach (int i in GetInitialData())
{
if (i > 2)
{
yield return i;
}
}
yield break;
Console.WriteLine("这里的代码不执行");
}c# coroutine:类似于Android延迟一段时间需要开辟新线程用法:StartCoroutine(函数名());IEnumerator 函数名(){
yield return ;}c#中需要强转,后面加 as 类型即可协程在执行到第一个yield return就不执行了,然后到第二帧执行到第二个yield return就不执行了,第三帧。。。找组件这样也可以啊//旋转刚体绕世界y轴
function FixedUpdate () {
rigidbody.AddTorque (Vector3.up * 10);
}
transform.position = Vector3.Lerp(start.position, end.position, Time.time);正交Orthographic (无消失点投影) 正交视图无法看到一个物体是远离自己还是正在我们面前。为什么?因为它不会根据距离收缩。所以如果你如果你画一个固定大小的物体在视点前面,同时画一个同样大小的物体在第一个物体的远后方,你无法说那个物体是第一个。因为两个都是一样的大小,根距离无关。他们不会随着距离而收缩。通常我们在unity中制作2D UI,或是2D游戏的时候,就会把Camera的投射选择此项,例如NGUI的UICamera组件,默认的视图就是正交,还有2DTookit,也会把Main Camera的视图选择成正交
透视Perspective (有消失点投影) 透视视图和我们从眼睛看到的视图是一样的。例如,一个高个子的人站在你面前,他看上去是很高的。但是如果这个高个子站在100米以外,他甚至还没有你的拇指大。他看上去会随着距离而缩小,但是我们实际上都知道,它依然是个高个子。这种效果叫做透视。上面例子中提到的两个物体,第二个物体将会显示地更小,所以我们可以区分哪个是离我们近的物体,那个是离我们远的物体。这个在3D中经常用到,例如3D Max中几种不同的视图,而Unity的Main Camera默认也是这种视图。切水果游戏的一些小总结:
当水果从屏幕下面出来要实例化一个水果,实例的位置在屏幕下面的中间位置,加上屏幕的左右一半的正负坐标要让水果向上走,需要两步,第一步,给它一个初始速度,第二,给它一个扭矩,推动它向上走他这里让水果每隔2秒产生一个就在start方法里面调用InvokeRepeating方法,每隔2秒调用Spawn方法产生一个水果如果报错这样:解决方法:如果在rigidbody中没勾选is Kinematic那么要在mesh Collider中勾选Convex来说下切水果手指滑动怎么判断切到水果,视频中讲的是手指滑动的线上每一点像镜头里面发射一条射线,如果射线穿过水果,就判断切到,具体方法如下:start.x,end.x都是鼠标移动得到的坐标,在屏幕的坐标,需要转成世界坐标,所以用Camera.main.ScreenToWorldPoint函数,这里如果不知道a的接收变量的类型,选用var接收,相当于java中的object添加一个Gameobject添加Line Renderer属性,把切水果的划痕材质拖到里面,在Line Renderer属性中有个Position,意思是在线段中设置几个点,我们设10个点在里面,当然如果你想通过捕获当前鼠标按下的坐标,然后触发碰撞检测事件来判断碰撞,这样不行,因为鼠标按下每一帧都会捕获,也就是每一帧都会返回一个坐标,我们应该让采样慢点,也即鼠标滑了0.1f距离捕获一次坐标。将这个坐标保存到一个大小为9的数组中,采样一次数组更新一次(计数+1),队列向前移动一个单位,具体代码如下:我们拿到了0.1f划痕采样的10个点,接着,遍历10个点,射线检测看有没有碰到水果我们看到在每两个点之间,这里又分成了若干段,通过插值函数vector3.lerp来对每一段进行射线检测,最后还要记得把数组中的点传到Line Renderer属性中的Position中在另一个项目中,通过屏幕滑动拿到局部坐标的api是这样只要在屏幕上滑动就会不断返回二维坐标AI系统:自动攻击和自动寻路