记录Unity Endless Runner要点

 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);

​
  • center
  • Center of the box.给一个碰撞体的重心
  • halfExtents
  • Half of the size of the box in each dimension.碰撞体大小的一半
  • results
  • The buffer to store the results in.存储碰撞或者接触碰撞体大小的缓存区
  • orientation
  • Rotation of the box.该box的旋转
  • layerMask
  • A Layer mask that is used to selectively ignore colliders when casting a ray.不和哪一层的物体交互
  • queryTriggerInteraction
  • Specifies whether this query should hit Triggers.是否和触发器碰撞

 

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

  • Returns a random point inside a circle with radius 1 (Read Only).
  • Returns a random point inside a sphere with radius 1 (Read Only).
  • Returns a random point on the surface of a sphere with radius 1 (Read Only).
  • Returns a random rotation (Read Only).
  • Returns a random rotation with uniform distribution (Read Only).
  • Gets/Sets the full internal state of the random number generator.
  • Returns a random number between 0.0 [inclusive] and 1.0 [inclusive] (Read Only).

Static Methods

  • Generates a random color from HSV and alpha ranges.
  • Initializes the random number generator state with a seed.
  • Return a random float number between min [inclusive] and max [inclusive] (Read Only).

 

 11.

RenderSetting类,用来设置unity全局渲染的属性,比如环境光,雾的颜色,雾是否开启,天空盒等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TO_ZRG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值