1. Array.IndexOf()查找数组中指定项的索引,如果没找到,就返回-1
2. 如果粒子不是循环播放的,则在粒子播放完毕之后销毁它
if (!m_ParticleSpawned.main.loop)
Destroy(m_ParticleSpawned.gameObject, m_ParticleSpawned.main.duration);
3. 检测是往左滑还是往右滑,还是往上滑,往下滑,为了方便不同机型的屏幕比,用滑动距离与屏幕的比来统一标准
if (Input.touchCount == 1)
{
//表示滑动
if(m_IsSwiping)
{
//当前手指的位置-开始触碰的位置,得到一个当前滑动的距离
Vector2 diff = Input.GetTouch(0).position - m_StartingTouch;
//为了防止每个机型的分辨率不同,所以我们用到的是滑动距离与屏幕距离的宽高比例
//这个效果非常好,大多数都能用到
diff = new Vector2(diff.x/Screen.width, diff.y/Screen.width);
if(diff.magnitude > 0.01f)
{
//如果y>x说明是竖直滑动
if(Mathf.Abs(diff.y) > Mathf.Abs(diff.x))
{
//屏幕坐标是左下角为(0,0),<0说明是往下滑
if(diff.y < 0)
{
Slide();
}
else//否则是往上跳
{
Jump();
}
}
else
{
//说明往左滑,切换跑道
if(diff.x < 0)
{
ChangeLane(-1);
}
else
{
ChangeLane(1);
}
}
m_IsSwiping = false;
}
}
if (Input.GetTouch(0).phase == TouchPhase.Began)
{
m_StartingTouch = Input.GetTouch(0).position;
m_IsSwiping = true;
}
else if(Input.GetTouch(0).phase == TouchPhase.Ended)
{
m_IsSwiping = false;
}
}
4. 给角色添加一个阴影,如果是跳跃或者滑动的时候,采用的是从角色位置往下发射射线,如果有 碰撞物,就把阴影生成到碰撞物上
RaycastHit hit;
if(Physics.Raycast(characterCollider.transform.position + Vector3.up, Vector3.down, out hit, k_ShadowRaycastDistance, m_ObstacleLayer))
{
blobShadow.transform.position = hit.point + Vector3.up * k_ShadowGroundOffset;
}
else
{
Vector3 shadowPosition = characterCollider.transform.position;
shadowPosition.y = k_ShadowGroundOffset;
blobShadow.transform.position = shadowPosition;
}
5.用自定义参数的方式,来代表动画播放的速度
6.
以后如果写比如position赋予一个新值,但是只改变其x值,y,z值都不变,可以用position=position+Vector3.left*0.5,这样不用new了,代码更简洁
7. 找到所有触碰或者包含在给定box里面的collider,并把它们存储在results缓存里面,返回其数量
public static int OverlapBoxNonAlloc(Vector3 center, Vector3 halfExtents, Collider[] results, Quaternion orientation = Quaternion.identity, int mask = AllLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
|
|
|
|
|
|
|
|
|
|
|
|
8.
数组在unity中也可以增加,删除,就像list一样,但要比list耗时, ArrayUtility.Add(ref m_Segment.obstaclePositions, 0.0f);
ArrayUtility类就可以对数组进行增加,删除,查找
9. 二分查找,list.BinarySearch(T item),在有序的list中查找item,如果找到就返回该位置的索引,如果没找到,就返回一个负数
public int GetScorePlace(int score)
{
HighscoreEntry entry = new HighscoreEntry();
entry.score = score;
entry.name = "";
int index = highscores.BinarySearch(entry);
return index < 0 ? (~index) : index;
}
10.
Random.InitState(int seed)初始化随机数的状态,我们随机取一个数字,每一次取,可以看作是一种排列组合的方式,每取一次,就换一种排列组合的方式,所以,因为排列组合的方式有很多,所以,每次随机取的数大概率不相同
Random.InitState(int seed)就是把一种排列组合的方式存储到相对应的seed中,比如你随机取3个数,分别是132,这是一种取的方式,也就是说这种方式对应的是seed,只要排列方式是seed,那么取出来的数就是132,你也可以每次都换不同的seed,这意味着每次取的排列组合都不一样,随机出来的的数也不一样
它可以用来初始化随机数,比如有很多个场景,不同的玩家进入的都是同一个场景,但是场景里面的一些小物体是不同的,不同的物体,就可以每次变换seed来实现
一般用system.DataTime.Now.Ticks来表示seed
Random.range(float a,float b)可以包括a 和 b
Random.range(int a,int b)包括a,不包括b
- insideUnitCircle
- Returns a random point inside a circle with radius 1 (Read Only).
- insideUnitSphere
- Returns a random point inside a sphere with radius 1 (Read Only).
- onUnitSphere
- Returns a random point on the surface of a sphere with radius 1 (Read Only).
- rotation
- Returns a random rotation (Read Only).
- rotationUniform
- Returns a random rotation with uniform distribution (Read Only).
- state
- Gets/Sets the full internal state of the random number generator.
- value
- Returns a random number between 0.0 [inclusive] and 1.0 [inclusive] (Read Only).
Static Methods
- ColorHSV
- Generates a random color from HSV and alpha ranges.
- InitState
- Initializes the random number generator state with a seed.
- Range
- Return a random float number between min [inclusive] and max [inclusive] (Read Only).
11.
RenderSetting类,用来设置unity全局渲染的属性,比如环境光,雾的颜色,雾是否开启,天空盒等