一、射线检测
射线Ray的构造函数为 :
public Ray(Vector3 origin, Vector3 direction);
RaycastHit类用于存储发射射线后产生的碰撞信息。常用的成员变量如下:collider与射线发生碰撞的碰撞器
distance 从射线起点到射线与碰撞器的交点的距离
normal 射线射入平面的法向量
point 射线与碰撞器交点的坐标(Vector3对象)
2D射线检测:
GameObject需要有2d collider组件
Physics2D.Raycast(Vector2 origin, Vector2 direction, ContactFilter2D contactFilter, RaycastHit2D[] results);
Physics2D.Raycast(Ray ray, float distance, int layerMask);
Physics2D.Raycast(Ray ray, float distance, int layerMask, float minDepth);
二、UGUI事件监听:3种方法
1 拖拽:
2 代码添加:
public GameObject btnGameObject;
public GameObject sliderGameObject;
public GameObject dropdownGameObject;
public GameObject toggleGameObject;
void Start () {
btnGameObject.GetComponent<Button>()
.onClick.AddListener(this.OnButtonClick);
sliderGameObject.GetComponent<Slider>().
onValueChanged.AddListener(this.OnSliderChange);
dropdownGameObject.GetComponent<Dropdown>().
onValueChanged.AddListener(this.OnDropdownChange);
toggleGameObject.GetComponent<Toggle>().
onValueChanged.AddListener(OnToggleChange);
}
void OnButtonClick() {
Debug.Log("Button On Click");
}
void OnSliderChange(float value) {
Debug.Log("Slider value: " + value);
}
void OnDropdownChange(Int32 index) {
Debug.Log("Dropdown value: " + index);
}
void OnToggleChange(bool value) {
Debug.Log("Toggle value: " + value);
}
通过实现接口的方式进行监听:
特点:脚本是一对一的,即脚本放在哪个UI GameObject上,就只对该UI有监听效果
是通过射线进行监听的
三、如何通过www下载图片
using UnityEngine;
using System.Collections;
public class WWWTest : MonoBehaviour {
private string url = "http://i7.download.fd.pchome.net/t_960x600/g1/M00/0B/10/ooYBAFQlOlqIHes-AAYQp3J3sHQAAB9HAJnaqQABhC_539.jpg";
IEnumerator Start() {
WWW www = new WWW(url);
yield return www; // 等待下载完成
Renderer renderer = GetComponent<Renderer>();
renderer.material.mainTexture = www.texture;
}
}
四、 Touches触摸事件
触摸事件为触屏提供Input方法
Debug.Log(Input.touchCount);
Debug.Log(Input.touches);
Debug.Log(Input.touches.Length);
if (Input.touches.Length > 0) {
Touch touch0 = Input.touches[0];
print(touch0.position); // touch所在的位置
TouchPhase phase = touch0.phase;
print(phase); // 判断触摸当前的状态
print(touch0.deltaPosition); // position的变化(pixes)
}
五:关于Camera组件的作用
Projection(投射):
Perspective(透视):以3D方式观察物体
Orthographic(正交):以2D方式观察物体
Culling Mask(剔除遮罩):
当前Camera可以看到什么层
Depth(深度):
Camera的渲染次序,值越大,越后渲染,所以当多个Camera存在于同一个Scene时,只能看到Depth值最大的那个Camera看到的东西
(但如果Depth值最大的那个Camera的Viewport Rect 不能覆盖整个屏幕,那么可以看到Depth值较小的那个Camera渲染出来的东西)
Clear Flags(清除标记):
当前Camera看不到的地方、屏幕空白的地方该怎么处理,或者说该怎么处理上一帧的画面。我们看到的画面都是一帧一帧渲染出来的,当前帧如果不清除上一帧的画面的话,两帧的画面就会出现叠加。
Camera类:
main –
ScreenPointToRay() --将屏幕坐标转换为一条射线。射线的origin为camera,射线指向屏幕上的点
void Update () {
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
// Debug.DrawRay(ray.origin, ray.direction); // 长度较短的射线
Debug.DrawLine(ray.origin, ray.origin + ray.direction * 100); // 100m的射线
// 鼠标射线与物体的碰撞检测
RaycastHit hitInfo;
bool isCollidered = Physics.Raycast(ray, out hitInfo);
Debug.Log(hitInfo.collider);
}
六、CharacterController 角色控制器
角色控制器让你在受制于碰撞的情况下很容易的进行运动,而不用处理刚体。
角色控制器不受力的影响,仅当你调用Move函数时才运动。它执行运动,但是受制于碰撞。
center – character的capsule的中点
height – character的capsule的高度
isGrounded – 在last move中,CharacterController是否接触了地面
Move() – 传入一个向量absolute movement deltas,按照向量(方向和大小)运动
SimpleMove() – 传入一个运动速度(方向和大小)即可.
OnControllerColliderHit(ControllerColliderHit hit) – Message
七、Mesh的设置
一个允许通过脚本创建或修改网格的类。
网格包含顶点数据(位置,法线,纹理坐标等)和面(面通常是三角形)数据。
八、Material材质类
Maerial:材质 贴到Mesh指定的物体上
在没有指定材质的时候,系统会默认赋值一个Default Material,为全白色
color – 修改主颜色
shader – 所使用的shader
mainTexture – 修改主材质
颜色渐变动画:
public Texture texture;
private Material material;
void Start () {
material = GetComponent<MeshRenderer>().material;
material.mainTexture = texture; // 修改主材质
}
void Update () {
material.color = Color.Lerp(material.color, Color.red, Time.deltaTime);
// 修改颜色
}
九、Animator简介
想要GameObject实现某种功能,就要在它上面附加相应的组件。所以为了让一个GameObject拥有动画效果,用来控制the Mecanim动画状态系统。
speed – 整个动画状态机的播放速度
十、Unity API方法变更
- Rigidbody
- 粒子系统变更
- 场景切换变更
- 2d/3d声音