Directional Light:平行光源/方向性光源,用来模拟太阳光(角度只与旋转角度有关,与位置无关)
Point Light:点光源,用来模拟灯泡,向四周发散光源
Spotlight:锥光源/聚光灯,用来模拟手电筒,灯塔等光源,向一个方向扩散性发散光源
Area Light:区域光,用于烘焙光照贴图,上面这三种光源可以用于实时渲染,也可以用于烘焙光照贴图
通过代码控制光源旋转、颜色、强度,可以做出24h光线变幻,日月轮转
----Intensity光线强度,默认1,关闭0
----Shadow Type阴影类型,柔性阴影更耗资源
----Intensity Multiplier反射光
----Spot Angle锥光源的角度

灯光控制
LightType是枚举类型
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyLight : MonoBehaviour
{
// Use this for initialization
void Start()
{
Light light = GetComponent<Light>();
light.intensity = ;
//int[] array = new int[] { 1, 2, 3, 4, 5, 6 };
if (light != null)
{
Debug.Log(light.intensity);
}
}
// Update is called once per frame
void Update()
{
}
}
 
UNITY关于阴影打开关闭的设置

对于单个物体可以在Mesh Renderer中的Cast Shadows选择是否产生阴影,Receive Shadows中选择是否接受阴影;
对于整个地图可以在光源的inspector面板打开和关闭。

 
父子物体:
在层级视图中,将一个游戏物体拖拽到另一个游戏物体下面,就变成了父子物体关系。
特点:子物体动,父物体不动;父物体动,子物体跟随移动。
作用:拼接游戏物体。
Center:父子物体的几何中心
Pivot:选中物体的几何中心

注意:当形成父子物体关系后,在检视面板中(在代码中不同)子物体的Transform下的属性是相对于父物体的值。比如position就是相对于父物体坐标为坐标原点的相对坐标。
当游戏物体没有父物体,世界就是父物体,这个时候坐标就是相对于世界的坐标位置。
在C#代码中所有物体都是世界坐标。
两个游戏物体的关联,本质上是把两个两个游戏物体Transform的关联在一起。
 
建立父子关系
API:Application Programer Interface //应用程序编程接口,拿到Unity来说,有一些需要用到的功能,unity已经帮你写好了,直接拿来用就可以得到想要的结果,不需要自己重新写,而且也不必须知道到底是怎么实现的。
查找游戏物体:
GameObject.Find(string name);//通过游戏物体的名字来查找游戏物体的引用。但是,正常开发过程中,尤其是在频繁的查找过程中,不建议使用Find。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Find_Parent : MonoBehaviour
{
public GameObject sphere;
// Use this for initialization
void Start()
{
//如何在整个场景中查找游戏物体
//查找写成静态方法,是工具,不是某一个对象的方法
sphere = GameObject.Find("Find_Parent/Sphere");
Debug.Log(sphere.name);
//建立父子关系,需要关联transform
gameObject.transform.parent = sphere.transform;
}
// Update is called once per frame
void Update()
{
//不要在Update进行查找,GameObject.Find("Sphere");
//要建一个全局的sphere初始化
//移动父物体,子物体也会动
if (sphere)
{
sphere.transform.Translate(new Vector3(, , 0.1f));
// //或者
// sphere.transform.Translate(Vector3.forward * 0.1f);
}
}
}
 

Unity找到父物体下的子物体

GameObject obj = GameObject.Find("Image Bg");
//首先找到父物体
GameObject zhen = obj.transform.Find("zhen").gameObject;
//然后找到父物体下的子物体
GetComponent推荐使用泛型的重载
1、用代码获取组件
T:GetComponent<T>()//如果获取Transform,就可以直接写Transform,是Component类中的一个只读的成员属性,代表着当前这个组件对象所挂载的游戏物体身上的Transform组件的引用。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetComponent : MonoBehaviour {
// Use this for initialization
void Start () {
Transform trans = GetComponent<Transform>();
//GetComponent获取组件的方法,加()表执行
//GetComponent获取不到组件,会返回空引用变量(空指针),在使用的时候,会报空引用异常的错误
Transform trans = null;
Debug.Log(trans.position);
if (trans != null)
{
Debug.Log(trans.position);
}
//transform
transform.position = new Vector3(, , );//不能只修改transform.position某个分量的值,需要对transform.position整体重新赋值,才会有返回值
Debug.Log(transform.position);
}
// Update is called once per frame
void Update () { }
}
 
2、用代码动态添加组件
gameObject可以直接在继承自component的类中使用,代表着当前组件所挂载的游戏物体的引用。
T:gameObject.AddComponent<T>() 当完成添加组件的任务之后,会返回这个组件的引用。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AddComponent : MonoBehaviour {
// Use this for initialization
void Start () {
Light light = gameObject.AddComponent<Light>();
light.intensity = ;
light.type = LightType.Spot;
light.color = Color.green;
Destroy(light, 5.0f);
}
// Update is called once per frame
void Update () { }
}
 
3、用代码动态移除组件
Destroy(Object obj);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Destroy : MonoBehaviour {
// Use this for initialization
void Start () {
AudioSource audio = GetComponent<AudioSource>();
if (audio)//audio是传进来的引用
{
Destroy(audio);
//5秒后销毁audio引用
Destroy(audio, );
//5秒后销毁Lesson3脚本组件
Destroy(this, );
}
}
// Update is called once per frame
void Update () { }
}
 
平移:transform.Translate(Vector3 translation);
transform.Translate (vector.forward) :移动的是自身坐标系的方向
transform.position += vector.forward:移动世界坐标系的方向
向量 * 标量,控制速度
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Move : MonoBehaviour
{
public float moveSpeed = 0.5f;
// Use this for initialization
void Start()
{
// transform.position = new Vector3(3.0f, 3.0f, 3.0f);//不要放在循环里用,调用一次就够了
}
// Update is called once per frame
void Update()
{
if (transform.position.z < 10.0f)
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}
else
{
transform.position = new Vector3(3.0f, 3.0f, 3.0f);
}
//每帧z轴都移动0.1f,当前坐标加上新坐标,再返回给原坐标
transform.position += new Vector3(, , 0.1f);
//Translate平移
transform.Translate(new Vector3(, , 0.1f));
//自定义myTranslate
myTranslate(new Vector3(, , 0.1f));
}
void myTranslate(Vector3 translation)
{
transform.position += new Vector3(, , 0.1f);
}
}
 
平移控制
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveControl : MonoBehaviour
{
private float moveSpeed = ;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.W))
{
this.transform.Translate(Vector3.forward * Time.deltaTime * moveSpeed);
}
if (Input.GetKey(KeyCode.S))
{
this.transform.Translate(Vector3.back * Time.deltaTime * moveSpeed);
}
if (Input.GetKey(KeyCode.A))
{
this.transform.Translate(Vector3.left * Time.deltaTime * moveSpeed);
}
if (Input.GetKey(KeyCode.D))
{
this.transform.Translate(Vector3.right * Time.deltaTime * moveSpeed);
}
}
}
 
旋转:transform.Rotate(Vector3 eulerAngles);
transform.Rotate (vector.up) :绕着自身坐标系的方向旋转
transform.eulerAngles += vector.up:绕着世界坐标系的方向旋转
transform.eulerAngles = new Vector3(90,0,0);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class position_eulerAngles : MonoBehaviour {
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
transform.position += Vector3.back * 0.05f;
transform.eulerAngles += Vector3.up;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rotate : MonoBehaviour
{
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
//旋转
//欧拉角
transform.eulerAngles += new Vector3(, , 0.1f);
transform.eulerAngles += Vector3.up;
//旋转的API是Rotate
transform.Rotate(Vector3.up);
}
}
 
为什么要继承MonoBehaviour
MonoBehaviour继承于Behaviour

Behaviour继承于Component,Component是所有组件的基类,enabled:组件是否激活

Object是Component的基类,组件的本质是Object类

GetComponent获取不到组件,会返回空引用变量(空指针),在使用的时候,会报空引用异常的错误

 
Unity复习
cookie灯光遮罩效果(平行光源,点光源,椎光源)
jpg图片没有Alpha通道,需要从灰度生成Alpha通道,最好用png图片

点光源,立方体贴图(六个面可以不一样),cookie

Halo光晕

Layer:给游戏物体添加层

Culing Mask遮罩剔除:光源对那些层(游戏物体)起作用

子物体从父物体拖出,会叠加上父物体的Transform,Position和Rotation做加法,Scale做乘法

F12进入定义,a是alpha通道

拖拽游戏物体到脚本组件,可以自动赋值

添加路径路点,“/”代表搜索路径,加上路径可以减少搜索次数
implicit:隐式转换
operator重载:if(exists != null) 可以简写为 if(exists)

Unity3D学习笔记(二):个体层次、绝对和局部坐标、V3平移旋转的更多相关文章

  1. 【Qt官方例程学习笔记】Analog Clock Window Example (画笔的平移/旋转/缩放应用)

    这个例子演示了如何使用QPainter的转换和缩放特性来简化绘图. 值得学习的: 定时器事件ID检查: 在定时器事件中检查定时器id是比较好的实践. QPainter抗锯齿: We call QPai ...

  2. 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...

  3. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  4. Unity3D学习笔记12——渲染纹理

    目录 1. 概述 2. 详论 3. 问题 1. 概述 在文章<Unity3D学习笔记11--后处理>中论述了后处理是帧缓存(Framebuffer)技术实现之一:而另外一个帧缓存技术实现就 ...

  5. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  6. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  7. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  8. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  9. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  10. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

随机推荐

  1. 纯css打造凹进与突出效果

    1.凹进效果   background:#f2f2f2  center repeat; border-bottom: 1px solid #e9e9e9;border-top: 1px solid # ...

  2. zabbix 报错汇总

    打开zabbix web界面点击profile出现以下报错信息: scandir() has been disabled for security reasons [profile.php:198 → ...

  3. 远程开关机神器Wake On LAN,免费有中文版

    https://wol.aquilatech.com/ Wake On Lan 又名 aquilaWOL,这是一款免费且开源的图形界面 WOL 软件,有繁体中文界面,可以管理多台电脑和网络设备,支持批 ...

  4. Pycharm模板添加默认信息

    我们在Pycharm中使用到python3.x版本的解释器,完全没有问题可以正常使用,但是有的时候多少会出现使用python2的时候 我们明明都把代码和文字注释了,为什么使用的时候还会报错呢?? 报错 ...

  5. 纯代码实现WordPress上传图片自动重命名的方法

    在我们使用 WordPress 发布文章时,经常都需要添加图片.多媒体什么的.然而,大家都知道 WordPress 是舶来物,对于中文用户来说,我们都会把图片命名为中文的,由于 WordPress 机 ...

  6. 浅谈远程登录时,ssh的加密原理

    SSH:Secure Shell,是一种网络安全协议,主要用于登录远程计算机的加密过程. 登录方式主要有两种: 1.基于用户密码的登录方式:   加密原理:   当服务器知道用户请求登录时,服务器会把 ...

  7. 机器学习理论基础学习12---MCMC

    作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,以下简称MCMC)在机器学习,深度学习以及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础.比如分 ...

  8. 016-sed

    行处理:一次处理一行.正则选定文本 ----->>sed处理格式:一.命令行格式:sed [options] 'command' files(如果没有则是通过管道)1.options: - ...

  9. css3实现头像旋转360度

    css样式: .div a img{ width: 88px; height: 88px; border-radius: 88px; transition: all 1.2s ease-out 0s; ...

  10. Trove系列(二)—Trove 的架构和流程介绍

    Trove主要逻辑目前Trove支持用户创建一个数据库服务实例,在实例里可以创建多个数据库并进行管理.数据库服务实例目前通过Nova API来创建,然后同样通过Nova API创建一个Volume(未 ...