void update(){
Ray ray=new Ray(transform.position+transform.forward, transform.forward);
bool isCollider=Physics.Raycast(ray);
Bebug.Log(iscollider);
}
void update(){
Ray ray=new Ray(transform.position+transform.forward, transform.forward);
bool isCollider=Physics.Raycast(ray);
Bebug.Log(iscollider);
}
射线检测
UGUI 事件监听
1,拖拽
2,代码添加
3,通过实现接口
WWW
触摸事件 Easytouch
Camera
CharacterController
Mesh
Material
Animator
unity 4.x 5.x 2017
GetComponent<Rigidbody2D>() 代替 rigidbody2D
GetComponent<Rigidbody>() 代替 rigidbody
GetComponent<AudioSource>() 代替 audio
Unity 5.3:
ParticleSystem main = smokePuff.GetComponent<ParticleSystem>();
main.startColor
Unity 5.5+:
ParticleSystem.MainModule main = smokePuff.GetComponent<ParticleSystem>().main;
main.startColor
SceneManagement 代替 Application
OnLevelWasLoaded() 在 Unity 5中被弃用了。
2D/3D sound 如何设置2D/3D声音
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class wuo : MonoBehaviour {
private Material mat;
void Start () {
mat = GetComponent<MeshRenderer>().material;
}
void Update () {
mat.color = Color.Lerp(mat.color, Color.red, Time.deltaTime );
Time.timeScale = 0.01f;
}
}
siki学院:www.sikiedu.com
如何看Unity文档和API手册
Unity中的事件方法
Help->Unity Manual/Scripting Reference
Time.deltaTime 当前帧运行占用的时间
realtimeSinceStartup 从游戏开始到现在的总时间
smoothDeltaTime
fixedTime
timeScale
GameObject游戏物体
activeSelf 自身的属性(若某一游戏物体有一个子物体,如果该游戏物体被禁用了,则子物体的activeSelf可以为true)
activeInHierarchy 在Hierachy面板中的属性(如上例,该子物体的activeInHierarchy一定为false)
GameObject go.activeInHierarchy
GameObject go.SetActive(true/false);通过该语句设置游戏物体的activeInHierarchy属性
tag 标签 区分不同的游戏物体
GameObject go.tag
构造GameObject的方法
1,new 直接实例化
GameObject go = new GameObject("Cube");
2,Instantiate 可以根据一个prefab或者另外一个游戏物体克隆
GameObject.Instantiate(prefab);
3,CreatePrimitive 创建原始的集合体
GameObject.CreatePrimitive(PrimitiveType.Plane);
GameObject go = GameObject.CreatPrimitive(PrimitiveType.cube)
AddComponent 添加组件
GameObject go.AddComponent<Collider 2D>();
Tranform 任何游戏物体都会有的一个组件,该组件控制着该游戏物体最基本的属性(坐标,旋转角度,大小)
该组件不可被删除
Object Destroy 游戏物体销毁
Destroy/DestoryImmediate 推荐使用Destroy
Destory可以销毁游戏物体也可以销毁游戏物体的组件
Destroy(gameObject, 5); 销毁游戏物体
Destroy(GetComponent<Rigidbody>()); 销毁游戏物体组件
DontDestroyOnLoad 切换场景时,该游戏物体不会被销毁
GameObject和Component 相同点和区别
游戏物体或组件的查找
GameObject.Find
GameObject go = GameObject.Find("Main Camera");该方法的返回值是一个GameObject类型变量,注意括号内是一个字符串类型
FindObjectOfType(可以直接调用也可以用GameObject调用)往往返回的是一个游戏物体或某一组件类型的变量
FindObjectsOfType (同上)往往返回的是一个游戏物体或组件数组类型的变量
上述两个方法不会查找未激活的游戏物体
Light light = FindObjectOfType<Light>();(查找到之后就可以对查找到的物体或组件进行控制)
Camera cam = (Camera)FindObjectOfType(typeof(Camera));
Transform[] ts = FindObjectsOfType<Transform>();
FindWithTag
transform.Find
GetComponet(s)InChildren
Mathf
Deg2Rad
Infinity
Clamp
ClosestPowerOfTwo
Lerp
LerpAngle
MoveTowards
PingPong
Round
SmoothDamp
Input
GetKey..
GetAxis
OnMouse
Vector2
Vector3
Random 随机整数 随机小数的生成
什么是随机种子
Quaternion
什么是四元数
Quaternion.LookRotation
Euler
Lerp
Slerp
Rigibody
mass velocity
useGravity isKinematic
AddForque
AddForce
MovePosition
Camera
mainCamera
ScreenPointToRay
ScreenToWorldPoint
WorldToScreenPoint
Application.dataPath
streamingAssetsPath
persistentDataPath
temporaryCachePath
companyName
idenifier
installerName
isEditor
isFocused
isMobilePlatform
isPlaying
is
场景加载
SceneManager
LoadScene LoadSceneAsync
GetActiveScene
CaptureScreenshot
angle
normalize
Angle取得夹角
SceneManager
scenecount加载场景数量
sceneCountInBuildSettings Build里场景个数
isLoaded
name
path
rootcount
GetSceneAt
GetSceneByBuildIndex
SetActiveScene
切换加载场景
using UnityEngine.SceneManagement;
SceneManager.LoadScene(序列号/"名字")
LoadSceneMode single/additive
single是创建新的场景,additive是把场景加到当前场景上
Application.
identifier
companyName
ProductName
installMode
isEditor
isFocused
isMobilePlatform
isPlaying
isWebPlayer
platform
unityVersion
version
runInBackGround
Quit()
OpenURL()
CaptureScreenShot
Application.dataPath路径
StreamingAssets
camera
获取mainCamera组件可以通过Camera.main实现
Ray ray=mainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool isCollider=physics.raycast(ray,out hit)
playerRgd.AddForce(Vector3 force)
如果持续不断的旋转的话用Rigidbody.MoveRotation()
Rigidbody.position和Rigidbody.rotation
这两个虽然是transform里的,但是可以通过刚体组件修改。用rigidbody改完之后transform会自动更新,且性能比transform.position好
推荐使用Moveposition来进行物体的移动
Rigidbody.MovePosition(Vector3 position)
Quaternion.Lerp(Quaternion a,Quaternion b,t)
当a和b相差较大时效果看起来不太好
在做朝向的时候推荐使用Slerp
跟角度有关的插值都推荐用Slerp
Quaternion.Enler()可以把一个欧拉角变换成四元数
旋转:
cube.eulerAngles=new Vector3(45,45,45);
cube.rotation=Quaternion.Euler(new Vector3(45,45,45,));
Quaternion.LookRotation()
示例:
Vector3 dir=enemy.position-player.position;
(如果不希望有高度差的话要dir.y=0;)
player.rotation=Quaternion.LookRotation(dir);
四元数
Quaternion(x,y,z,w)
不需要了解太深入,知道怎么使就完事了
Transform里的rotation用的是四元数,不能直接用Vector3赋值解决,这时需要用欧拉角
Random.value可以随机得到一个0到1之间的值
Random.state当前随机数生成的状态
Random.rotation随机得到一个朝向
Random.insideUnitCircle随机得到某个单位圆内的坐标,是一个二维向量
Random.insideUnitSphere随机生成某个单位圆内的坐标。
随机数
Random.Range(a,b)生成从a到b的数,生成的数不包括最大值b
Random.InitState(int seed)计算机的随机数是伪随机数,是通过某种方式算出来的。如果括号内的seed不改,那么通过这种方式生成的随机数在每次运行的时候都是一样的。一般情况下括号内的变量使用时间(初始化时用System.DateTime.Now.Ticks)。不用关注这个,unity会自动帮忙初始化使每次生成的随机数都不一样
(())