【笔记】Unity第三周
杜致远

课后笔记就简单记录一下。

改变对象的颜色

1
2
Color32 _c = new Color32((byte)Random.Range(0, 255), (byte)Random.Range(0, 255) , (byte)Random.Range(0, 255), 255);
obj.GetComponent<MeshRenderer>().material.color = _c;
  • 这里值得注意的是unity封装的color,输入参数范围是0-1的,开始找了很久输入值为0-255范围的函数没有找到,其实用color32就可以。

DeltaTime

第一次课就碰到但没理解也没深究的东西,今天查了一下,blog讲的很清楚,非常佩服最初开发者的智慧。

Unity增量时间Time.deltaTime详解

碰撞

  • 主要讲解了rigidbody
  • 如果设置为trigger,会被物理引擎忽视,不会触发具体效果
  • 脚本挂在的对象需要能有collider
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 重载碰撞函数
// 这个是和unity中的box collider关联的,所以脚本必须挂在有collider属性的物体上
private void OnCollisionEnter(Collision collision)
{
print("!");
print(collision.collider.name);
}

private void OnCollisionStay(Collision collision)
{
print(collision.collider.name);
}

private void OnCollisionExit(Collision collision)
{
print("离开");
print(collision.collider.name);
}
  • 这里有一个小细节,OnCollisionStay在触发一定次数后就不会触发了,查了很久发现是为了减少计算开销会休眠物体。这里查到了官方文档,发现查官方文档总是效率最高的,但好像unity这个官方文档关于代码介绍的并不多,wakeup函数用法乱试了半天才试出来,不知道是不是我没找对文档,前面找color的输入范围时也没找到代码细节。

    1
    2
    //避免刚体进入睡眠,加上这句可以持续检测碰撞
    obj2.GetComponent<Rigidbody>().WakeUp();

施加力

1
obj2.GetComponent<Rigidbody>().AddForce(Vector2.right * 0.2f, ForceMode.Impulse);

Unity 施加在刚性体的(ForceMode)四种作用力

与鼠标选中的物体进行交互

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//接收鼠标信息
if (Input.GetMouseButtonDown(0))
{
//创建射线,从摄像机到鼠标位置
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit raycastHit;

//对鼠标点到的物体进行操作
if (Physics.Raycast(ray, out raycastHit))
{
GameObject o = raycastHit.collider.gameObject;
//o.GetComponent<MeshRenderer>().material.color = Color.red;
if (o.GetComponent<MeshRenderer>().material.color == Color.red)
{
o.GetComponent<MeshRenderer>().material.color = Color.white;
}
else
{
o.GetComponent<MeshRenderer>().material.color = Color.red;
}
}
}

老师教的是把特定对象变红,自己改了下可以点哪个哪个就变红,然后旁边韩国小姐姐问我能不能再让它变白,又教了下她实现点哪个物体哪个物体变颜色,能够有把握教给可爱的人知识感觉真好TT。

地形场景环境

最后快下课的时候老师给我们讲了下贴图!但还没来得及下载素材包所以这里没有效果展示了,但真的贴一贴就很像那么回事了!原来把摄像机放在眼睛那里就可以实现第一人称视角,外面再放一个就是第三人称视角,写个逻辑就可以做视角切换。感觉任督二脉被打通了,再结合前几天用vizard进行虚拟现实开发的流程,已经可以想象unity的类似步骤了,至少整个流程比较清晰了,快乐!