记录Unity Endless Runner要点

news2024/11/23 19:18:39

 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

  • 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全局渲染的属性,比如环境光,雾的颜色,雾是否开启,天空盒等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

普通单目相机标定

前言 这里我们还是以普通相机为例(非鱼眼相机)来进行后续的相关标定操作,再回顾下相机的成像模型如下所示。 已知相机内参(fx,fy,u0,v0),畸变系数[k1,k2,k3,p1,p2],相机外参[R|T]。世界坐标系中点Pw(Xw,Yw,Zw),投影至像素坐标系点p(u,v)的计算过程如下。 1)由世…

操作系统———文件管理

目录 一、初识文件管理1.文件属性2.文件内部数据组织3.文件之间组织4.操作系统向上提供的功能5.文件如何存放在外存6.其他需要由操作系统实现的文件管理功能7.总结 二、文件的逻辑结构1.无结构文件与有结构文件2.有结构文件的逻辑结构2.1顺序文件2.2索引文件2.3索引顺序文件 3.…

ChatGPT 指令知识要点

ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视化图表制作 全面AI时代就在转角 道路已经铺好了 “局外人”or“先行者” 就在此刻 等你决定1、ChatGPT从入门到精通&#xff0c;一站式掌握办公自动化/爬虫/数据分析和可视( 点击观看完整版本 )https…

Linux下MySQL的安装

文章目录 下载1.选择合适的yum源2.将yum源上传到Linux服务器中 安装1.安装yum源2.使用yum源一键安装MySQL3.安装时常见的问题4.检查安装 启动MySQL登录MySQL方案一方案二 下载 1.选择合适的yum源 在Linux学习阶段我们已经得知&#xff0c;在Linux环境下要安装应用程序必须要通…

【吴恩达deeplearning.ai】基于LangChain开发大语言应用模型(上)

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 DLAI - Learning Platform Beta (deeplearning.ai) 一、什么是LangChain 1、LangChain介绍 LangChain是一个框架&#xff0c;用于开发由大语言模型驱动的应用程序。开发者相信&#xff0c;最强大的、差异…

面试大数据方向必问的问题:HDFS的读写流程

HDFS读写流程 这个问题是面试大数据分析师必不可少的问题&#xff0c;有不少面试者不能完整的说出 来&#xff0c;所以请务必记住。并且很多问题都是从 HDFS 读写流程中引申出来的。 一、HDFS读流程 Client 向 NameNode 发送 RPC 请求。请求文件 block 的位置&#xff1b;Na…

深入理解深度学习——BERT派生模型:扩大掩码范围SpanBERT

分类目录&#xff1a;《深入理解深度学习》总目录 MLM训练方法是BERT拥有自然语言理解能力的核心训练方法。然而&#xff0c;BERT在预训练过程中挑选掩码词的概率是独立计算的&#xff0c;即BERT掩码词的粒度是最小的&#xff0c;可能是单个词&#xff0c;也可能是一个词的部分…

【连载】经历了十多年的电子开发,回过头来跟大家一起,看穿单片机!

「经历了十多年的单片机开发&#xff0c;站在我现在的高度来回看单片机&#xff0c;可谓望眼欲穿。」 下面振南要介绍的是“单片机的体系架构模型”&#xff0c;是超脱于任何一种具体型号的单片机芯片之上的&#xff08;我感觉我要成仙&#xff09;&#xff0c;它具有很强的普适…

【Django】图形验证码显示及验证

图形验证码显示及验证 开发项目时&#xff0c;在登陆或者注册功能中为防止脚本恶意破坏系统&#xff0c;故而添加图形验证码。 文章目录 图形验证码显示及验证1 安装配置2 验证码显示及正确性验证3 效果显示 1 安装配置 安装第三方库 pip install django-simple-captcha配置s…

SpringBoot+Vue 的在线考试系统(附源码,数据库,教程)

文章目录 源码下载地址第一章第二章.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数据库表 第五章 系统功能实现5.1系统登录注册5.2管理员功能模块 源码下载地址 源码下载地址 源码下载地址https://download.csdn.net/download/u013749113…

[python][yolov8][深度学习]将yolov8实例分割成一个类几句代码完成实例分割任务

大家都知道,yolov8目前支持图像分类、目标检测、姿态估计、实例分割&#xff0c;而实例分割一般都是用命令行去预测图片&#xff0c;这个如果要引入pyqt5或着嵌入其他python模块有点麻烦&#xff0c;因此需要封装一个类去预测图像&#xff0c;这样我们可以轻松完成各种实例分割…

Redis实战案例4-缓存更新策略

1. 缓存更新策略 缓存中的数据一致性问题&#xff08;数据库更新数据&#xff0c;而Redis存的是旧数据&#xff09; 内存淘汰策略&#xff1a;当内存很充足时&#xff0c;很长时间无法淘汰数据&#xff0c;所以很难控制淘汰&#xff0c;一致性差&#xff1b; 超时剔除&#xff…

【教学类-36】Midjounery生成的四张图片切片成四张小图

作品展示&#xff1a; 把一张正方形图片的四个等大小图切割成四张图片 背景需求 最近在学习ChatGPT的绘画&#xff08;midjounery AI艺术&#xff09; 我想给中班孩子找卡通动物图片&#xff08;黑白边框&#xff09;&#xff0c;打印下来&#xff0c;孩子们练习描边、涂色…

C++11-右值引用与移动语义

右值引用与移动语义 一&#xff0c;右值引用概念右值引用简单例子左值引用与右值引用的比较 二&#xff0c;右值引用的使用场景函数对于其内部局部对象的传值返回insert&#xff0c;push等接口左值引用与右值引用总结 三&#xff0c;完美转发四&#xff0c;新的类功能默认成员函…

【数据分享】1929-2022年全球站点的逐月平均海平面压力数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…

机器学习小结之决策树

文章目录 前言一、介绍1.1 原理1.2 流程1.3 信息熵&#xff0c;信息增益和基尼不纯度 二、构建决策树2.1 特征选择2.2 决策树生成2.3 剪枝 三、经典算法3.1 ID33.2 C4.53.3 CART 四、案例4.1 Iris 数据集 鸢尾花 分类4.2 基于决策树的英雄联盟游戏胜负预测 参考 前言 决策树(D…

GDPU 模电(电工) 作业答案

&#x1f351; 配套资源 &#x1f4da; 电子技术基础&#xff1a;电路与模拟电子[第2版] 提取码: 345r 第2章 电阻电路分析 第4章 正弦稳态电路分析 第6章 半导体器件 第7章 放大电路分析 第8章 负反馈放大电路 第9章 集成运算放大器及其应用 第11章 直流稳压电源 &#x1f6…

深度学习(10)之Roboflow 使用详解:数据集标注、训练 及 下载

Roboflow 使用详解&#xff1a;数据集标注、训练 及 下载 本文在 用YOLOv8推荐的Roboflow工具来训练自己的数据集 的基础上进行了修改 介绍如何从网站下载开源数据集详细介绍如何借助 roboflow 标注数据集并自动转换为可直接训练的数据格式 获取开源数据集 跳转找到开源分页…

浅谈Spring Cloud Gateway

网关:用户和微服务的桥梁 网关的核心是一组过滤器&#xff0c;按照先后顺序执行过滤操作。 Spring Cloud Gateway是基于webFlux框架实现&#xff0c;而webFlux框架底层则使用了高性能的Reactor模式通信框架的Netty Spring Cloud Gateway是Spring Cloud生态系统中的一个API网…

leetcode62. 不同路径(动态规划-java)

不同路径 leetcode62. 不同路径题目描述暴力递归代码演示 递归加缓存代码演示 动态规划代码演示 动态规划专题 leetcode62. 不同路径 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/unique-paths 题目描述 一个机器人位…