当前位置: 首页 > news >正文

竞价单页 网站简单的网站源码

竞价单页 网站,简单的网站源码,xampp 查看wordpress模板,网站开发技术代码1、参考链接 01.游戏引擎是啥玩意#xff1f;_哔哩哔哩_bilibili 2、unity概念 它是一套具有完善体系与编辑器的跨平台游戏开发工具#xff0c;也称之为游戏引擎。游戏引擎是指一些编写好的可重复利用的代码与开发游戏所用的各功能编辑器。 3、unity界面 右上边可以切换布局…1、参考链接 01.游戏引擎是啥玩意_哔哩哔哩_bilibili 2、unity概念 它是一套具有完善体系与编辑器的跨平台游戏开发工具也称之为游戏引擎。游戏引擎是指一些编写好的可重复利用的代码与开发游戏所用的各功能编辑器。 3、unity界面 右上边可以切换布局。 左边选择Shaded wireframe可以看到3D物体的都是由三角形组成的。 4、坐标系 Unity使用左手坐标系。 空间中统一的坐标系叫世界坐标系每个物体有自己的本地坐标系该坐标系为相对于父级物体的位置而不是世界坐标系的位置。 5、物体显示 网格三角形构成 材质 6、资源商店 Windows - Asset Store 挑出喜欢的资源之后点击”添加至我的资源”。 然后在Unity的Window - Package Manager中找到刚才的资源。 点击下载之后再导入到untiy中。 7、旋转XYZ坐标系 选中“手形”按钮然后按住Alt键此时拖动鼠标即可旋转xyz坐标系。 8、创建地形 1创建地形 2地形的设置 3创建相邻地形 4绘制地形 一般先通过“Set Height”功能设置全局的高度然后再通过“Raise or Lower Terrain”来抬高或者降低地形就可以绘制高山和峡谷了。 5绘制纹理 首先下载unity的资源包 然后绘制纹理 创建地形层 Edit Terrain Layers - Create Layer选择一个素材后地形如下 可再添加一个地形层用于绘制道路如下 接着绘制树 按住鼠标右键然后通过A、W、S、D按键可以切换观察的视角。 9、组件 在Unity中功能基本上都是由组件来实现的。如果想要一个物体移动那么为它添加一个有移动功能的组件就可以了。 每个游戏的物体都是一个空物体它之所以表现为不同的形式都是由它的组件表现出来的。由于组件cube组件、light组件不同所以表现出来的形态也不同。 1添加系统提供的组件 选择物体后通过右下角的“Add Component”功能选择Rigidbody组件然后选择执行那么该物体就会垂直下落。 2自定义组件 创建C#脚本然后放到物体下面就可以了。 10、脚本的生命周期 创建一个脚本之后会看到默认的两个方法Start()和Update()方法。 全部的生命周期方法为 Awake最早调用一般可以在此实现单例模式 OnEnable组件激活后调用在Awake后会调用一次 Start在Update之前调用一次在OnEnable之后调用可以在此设置一些初始值 FixedUpdate固定频率调用方法每次调用与上次调用的时间间隔相同 Update帧率调用方法每帧调用一次每次调用与上次调用的时间间隔不相同 LateUpdate在Update每调用完一次后紧跟着调用一次。 OnDisable与OnEnable相反组件未激活时调用 OnDestory被销毁后调用一次 在方法中打印日志使用Debug.Log(“”); 然后在Window - General - Console 看到日志输出 11、脚本的执行顺序 如果针对一个物体创建了两个脚本在默认情况下脚本的执行顺序是不定的。 有两种方法可以指定方法的执行顺序。 方法一 在每个脚本不同的生命周期函数中编写功能比如脚本1的Awake函数中执行功能1脚本2的Start函数中执行功能2这样可以保证先执行功能1再执行功能2。 所有的脚本都是按照生命周期先执行完所有的Awake函数再执行所有的OnEnable函数依此类推。 方法二 直接指定各个脚本的优先级。 12、标签和图层 标签的作用一般是自己用的可以用来区分每个的角色比如是敌人还是玩家。 图层的作用一类内容通过图层可以判断哪一类显示哪一类不显示。比如某个图层的物体需要检测碰撞而另一个图层的内容 比如地面不需要检测碰撞。 13、向量的概念 标量只有大小的量1 85 888 999 向量既有大小也有方向 向量的模向量的大小 单位向量大小为1 的向量 单位化、归一化把向量转为单位向量的过程。 向量的点乘A向量 点乘 B向量 数值n |A||B|cos得到两个向量之间的夹角。 14、预制体与变体 现在做了如下的物体总共由4个部分组成 假如现在需要4个这种物体 如果在SampleScene界面直接再复制3个出来那么假如这个物体需要改动那么需要改动4个物体怎么才能只修改一个物体其他的同步生效 这就需要用到预制体。 把物体从SampleScene复制到Assets中然后再复制3个Enemy到SampleScene中如下图所示 此时如果修改Assets中的Enemy则直接双击进行修改修改完成后所有的都会生效。 所有都生效如下图所示 现在有新的任务需要新增一个物体新物体比之前4个物体只增加一顶帽子其他的部分需要与之前4个保持一致。即除了帽子外4个物体做了改动当前新物体也需要同步做改动。此时需要用到变体的功能。 当在SampleScene中创建了新物体然后拖动到Assets时提示如下选择Prefab Variant预制体变体。 此时在Assets的Enemy中做修改5个会同时生效比如把红色嘴巴变小了之后 此时预制体修改会影响变体但是变体修改不会影响预制体。 15、脚本中Vector3的作用 第一Vector3可以表示 1向量坐标 Vector3 v new Vector3(1, 1, 1); 2旋转 Vector3 v new Vector3(45, 90, 0); 3缩放 Vector3 v new Vector3(1, 1, 0.5f); 第二系统提供的静态初始化方法 v Vector3.zero; 第三计算两个向量之间的关系 // 向量坐标旋转缩放 Vector3 v new Vector3(1, 1, 0.5f); v Vector3.left; Vector3 v2 Vector3.forward; // 计算两个向量的夹角 Debug.Log(Vector3.Angle(v, v2)); // 计算两个向量的举例 Debug.Log(Vector3.Distance(v, v2)); // 点乘 Debug.Log(Vector3.Dot(v, v2)); 得到的结果 16、方向的描述欧拉角与四元数 欧拉角从0到360度 四元数比欧拉角要强大很多效率更高也不会造成万向节死锁 代码示例 // 欧拉角Vector3 rotate new Vector3(0, 30, 0);// 四元数Quaternion quaternion Quaternion.identity; // 创建了一个四元数但是无旋转quaternion Quaternion.Euler(rotate); // 通过欧拉角创建四元数// 看向一个物体quaternion Quaternion.LookRotation(new Vector3(0, 0, 0)); // 看向一个物体肯定要做旋转// 四元数转欧拉角rotate quaternion.eulerAngles 17、Unity3D中的调试 1打印日志的方式 Debug.Log(test1); Debug.LogWarning(test2); Debug.LogError(test3); 2绘制线条的方式 // 绘制一条线起点终点 Debug.DrawLine(Vector3.zero, Vector3.one, Color.blue); // 绘制一条射线起点射线 Debug.DrawRay(Vector3.zero, Vector3.up, Color.red); 18、游戏物体的使用 一个游戏物体上面包含很多组件每个组件不同的功能这样一个物体就有不同的功能。每一个游戏物体都是GameObject类。 1拿到当前脚本所挂载的游戏物体 GameObject go this.gameObject; Debug.Log(go.name); 2在当前脚本中操作子物体另一个物体 首先是在脚本中定义一个子物体。 然后当前物体就增加了一个属性 接着在SamplesScene中创建子物体Cube并拖到Script的Cube中即实现了物体和属性的关联此时脚本中的Cube有值了。 3获取游戏物体并进行操作 // 获取Transform组件Debug.Log(transform.position);// 获取其他组件BoxCollider bc GetComponentBoxCollider();// 添加一个组件Cube.AddComponentAudioSource();// 通过游戏物体的名称来获取游戏物体GameObject test GameObject.Find(Test);Debug.Log(test.name);// 通过游戏标签获取游戏物体test GameObject.FindWithTag(Enemy);Debug.Log(test.name);test.SetActive(false); // 设置激活状态 4创建物体 通过预设体类创建物体实例。 首先声明一个物体 然后把一个预设体关联上该变量操作同《在当前脚本中操作子物体另一个物体》 接着脚本中创建物体 Instantiate(Prefab); 或者实例化一个物体并指定位置信息Instantiate(Prefab, Vector3.zero, Quaternion.identity); 5销毁物体 // 通过预设体来实例化一个游戏物体 GameObject go Instantiate(Prefab, Vector3.zero, Quaternion.identity); // 销毁 Destroy(go); 19、时间类的使用 时间统计方法 // 游戏开始到现在所花的时间Debug.Log(Time.time);// 时间缩放值Debug.Log(Time.timeScale);// 固定时间间隔Debug.Log(Time.fixedDeltaTime);// 上一帧到这一帧所用的游戏时间Debug.Log(Time.deltaTime); 20、Application类 1常用的路径信息 // 游戏数据文件夹路径当前Assets所处的路径只读且加密压缩 Debug.Log(Application.dataPath); 比如D:/workspace/unity/FirstProject/Assets // 持久化文件夹路径系统给应用程序分配的存放数据的空间可写 Debug.Log(Application.persistentDataPath); 比如C:/Users/hugh/AppData/LocalLow/DefaultCompany/FirstProject // StreamingAssets文件夹路径只读不压缩可放配置文件等不需要压缩的文件 Debug.Log(Application.streamingAssetsPath); 比如D:/workspace/unity/FirstProject/Assets/StreamingAssets // 临时文件夹 Debug.Log(Application.temporaryCachePath); 比如C:/Users/hugh/AppData/Local/Temp/DefaultCompany/FirstProject 2控制类接口 // 控制是否在后台运行 Debug.Log(Application.runInBackground); // 打开url Application.OpenURL(http://www.baidu.com); // 退出游戏 Application.Quit(); 21、场景 1游戏-场景-物体-组件的关系 2项目中默认的一个场景SampleScene 3创建新的场景MyScene Scenes目录右击 - Create - Scene 4场景间的跳转 从SampleScene场景跳转到MyScene场景。 第1步生成场景的索引号 File - Build Settings 拖动场景到”Scenes In Build”中。 此时就生成了场景的索引号信息。 第2步在脚本中实现跳转 场景涉及到Scene、SceneManager两个类。 同一时间可以存在多个场景场景是可以叠加在一起的。 示例代码如下 //场景跳转//SceneManager.LoadScene(0); // 通过索引方式跳转//SceneManager.LoadScene(MyScene); // 通过名称方式跳转// 获取当前场景Scene scene SceneManager.GetActiveScene();// 场景名称Debug.Log(scene.name);// 场景是否已经加载Debug.Log(scene.isLoaded);// 场景路径Debug.Log(scene.path);// 场景索引Debug.Log(scene.buildIndex);GameObject[] gos scene.GetRootGameObjects();Debug.Log(gos.Length);// 场景管理类// 创建新场景Scene newScene SceneManager.CreateScene(newScene);Debug.Log(SceneManager.sceneCount); // 当前激活的场景个数// 卸载场景SceneManager.UnloadSceneAsync(newScene);// 加载场景的两种方式//SceneManager.LoadScene(MyScene, LoadSceneMode.Single); // 替换方式的加载SceneManager.LoadScene(MyScene, LoadSceneMode.Additive); // 叠加方式的加载 22、异步加载场景并获取进度 打印的日志测试场景资源太少所以立马就加载完毕了显示0.9 23、Transform的作用 它有两个作用 1控制物体的位置、旋转、缩放 2控制父子级的从属关系 演示Transform的使用 首先创建父子孙物体Parent\Sphere\Child并将脚本TransformTest挂在Sphere物体上。 1获取位置等属性信息 // 获取位置Debug.Log(transform.position); // 世界坐标Debug.Log(transform.localPosition); // 相对父级的位置// 获取旋转Debug.Log(transform.rotation);Debug.Log(transform.localRotation);Debug.Log(transform.eulerAngles);Debug.Log(transform.localEulerAngles);// 获取缩放Debug.Log(transform.localScale);// 向量Debug.Log(transform.forward);Debug.Log(transform.right);Debug.Log(transform.up); 2物体运动操作 // 时时刻刻看向000点transform.LookAt(Vector3.zero);// 旋转(自转)transform.Rotate(Vector3.up, 1);// 旋转公转transform.RotateAround(Vector3.zero, Vector3.up, 1);// 移动transform.Translate(Vector3.forward * 0.1f); 3父子关系 // 获取父物体GameObject go transform.parent.gameObject;// 子物体个数Debug.Log(transform.childCount);// 解除与子物体的父子关系transform.DetachChildren();// 获取子物体Transform trans transform.Find(Child); // 根据名称获取trans trans.GetChild(0); // 根据索引获取// 判断一个物体是不是另外一个物体的子物体bool res trans.IsChildOf(transform);// 设置为父物体trans.SetParent(transform); 24、监听键盘和鼠标 对于这两个设备的监听需要每一帧都监听所以逻辑要写在Update()方法中。 // 鼠标的点击 // 按下鼠标 0左键 1右键 2滚轮 if (Input.GetMouseButtonDown(0)) {Debug.Log(按下了鼠标左键); } // 持续按下鼠标 if (Input.GetMouseButton(0)) {Debug.Log(持续按下鼠标左键); } // 抬起鼠标 if (Input.GetMouseButtonUp(0)) {Debug.Log(抬起了鼠标左键); }// 按下键盘按钮 if (Input.GetKeyDown(KeyCode.A)) {Debug.Log(按下了A); } if (Input.GetKey(KeyCode.A)) {Debug.Log(持续按下了A); } if (Input.GetKeyUp(KeyCode.A)) {Debug.Log(松开了A); }25、虚拟轴 适配各个平台通过虚拟轴来控制上下左右、跳跃等操作。否则电脑上使用WSAD控制上下左右而在游戏手柄中使用摇杆。 1查看虚拟轴 打开Edit - Project Settings 在Input Manager中只有Horizontal和Vertical是虚拟轴有多个值其他的是虚拟按钮。 2使用虚拟轴和虚拟按键 // 获取水平/垂直轴 float horizontal Input.GetAxis(Horizontal); float vertical Input.GetAxis(Vertical); Debug.Log(horizontal vertical);// 虚拟按键 if (Input.GetButtonDown(Jump)) {Debug.Log(空格); }26、触摸方法使用 27、灯光 创建灯光Light - Point Light 四种光源类型 方向光Directional Light 用于模拟太阳光方向光任何地方都能照射到点光源Point Light 用于模拟电灯泡的照射效果聚光灯Spot Light 用于模拟聚光灯照射效果区域光Area Light 区域光在“实时光照”模式下是无效的只用于“烘培光照”模式。 1方向光 此时移动光源阴影的角度不会发生改变 当旋转光源时阴影的方向是会变化的。 2点光源 随着光源的移动照射的位置会发生变化 3聚光灯 类似摄影棚的聚光灯效果 4硬阴影/软阴影 硬阴影阴影有锯齿状系统性能开销较低 软阴影边缘有羽化模糊效果系统性能开销大一些 5实时/烘培灯光 实时实时计算出来的比如赛车时车灯照射到的地方非常耗性能 烘培提前保存灯光照射数据然后把灯光去掉灯光效果仍然保留 28、灯泡、摄像头图标不见了怎么办 点击如下按钮 该按钮的意思toggle visibility of all Gizmos in the Scene view 即在“场景”视图中切换所有Gizmo的可见性 29、摄像机 两种摄像机类型透视摄像机、正交摄像机 1透视摄像机 该摄像机有着近大远小的特点与我们现实中看到的相同。 2正交摄像机 没有近大远小的效果当两个同样大小的物体到摄像机的距离不同时其显示出的大小仍然是相同的。 透视和正交的选项如下 3D的一般是透视2D的一般是正交。多个摄像机可以融合在一起深度的处理。 30、音乐和音效 音乐比较长的背景音乐在场景中往往是循环播放 音效比较短的声音比如射击的声音 一个场景中只能同时存在一个音乐但是可以同时存在很多的音效。 1听声音 如果希望游戏中可以听到声音必须要有一个组件在场景中存在即”Audio Listener”该组件用于接收声音。位于摄像机的物体中同时该组件在一个场景中只能存在一次。 2播放声音 方法一直接在Inspector中进行配置 选中一个物体然后添加“Audio Source”的组件。 AudioClip音频剪辑所有的声音都属于音频剪辑。 方法二在脚本中控制播放 代码如下 public class AudioTest : MonoBehaviour {// Start is called before the first frame update// AudioClippublic AudioClip music;public AudioClip se;// 播放器组件private AudioSource player;void Start(){player GetComponentAudioSource();// 设定播放的音频片段player.clip music;// 循环player.loop true;// 音量player.volume 0.5f;// 播放player.Play();}// Update is called once per framevoid Update(){// 按空格切换声音的播放和暂停if (Input.GetKeyDown(KeyCode.Space)) {// 如果当前正在播放声音if (player.isPlaying){// 暂停播放player.Pause();}else {player.UnPause();}}// 按鼠标左键播放声音if (Input.GetMouseButtonDown(0)){player.PlayOneShot(se);}} }31、视频播放 第一步创建渲染器纹理Assets - Create - Render Texture 第二步创建平面后面我们希望在平面上显示视频SampleScene - 3D Object - Plane 第三步在平面上增加组件“Video Player”执行Video Clip为我们准备的视频文件然后在Render Mode中选择Render Texture然后把第一步创建的纹理拖过来。 第四步把纹理应用到平面上拖过去即可。 最后点击运行即可。 32、角色控制器 角色控制的三种解决方案 应用商品中有很多成熟的解决方案要求不高的话使用unity3d提供的角色控制器通过物理系统进行角色控制 本次使用第二种即角色控制器。 首先创建画板和胶囊 然后添加角色控制组件Character Controller。 接着创建脚本。 public class PlayerController : MonoBehaviour {// Start is called before the first frame updateprivate CharacterController player;void Start(){player GetComponentCharacterController();}// Update is called once per framevoid Update(){// 水平轴float horizontal Input.GetAxis(Horizontal);// 垂直轴float vertical Input.GetAxis(Vertical);// 创建成一个方向向量Vector3 dir new Vector3(horizontal, 0, vertical);// 朝向该方向移动player.SimpleMove(dir * 2);} }33、物理系统做游戏碰撞 在物体的Mesh Collider中进行设置。 在组件中存在很多的碰撞器比如Mesh Collider(网格碰撞器)、Terrain Collider地形碰撞器等。 两个物体如果要碰撞的前提条件 1两个物体都有碰撞器。 2至少一个物体有RigidBody刚体即受重力影响 碰撞示例 34、触发 触发的条件同碰撞一样即都有碰撞器、至少一个有刚体。 触发和碰撞的区别 触发时有一个的碰撞器的“Is Trigger”设置为true程序运行时当物体为触发器属性时可以被另一个物体穿透而非触发器属性则不能。如下图所示 示例 一个胶囊物体2个触发器的Cube。 胶囊物体模拟玩家的代码如下 左下角隐藏物体的代码 private void OnTriggerEnter(Collider other){GameObject wall GameObject.Find(Wall);if (wall ! null){wall.SetActive(false);}} 35、铰链、弹簧 它们都属于物理关节。 铰链类似于门的关节通过这个关节实现门的旋转 弹簧将两个物体连接在一起两个的运动有弹簧的效果。 铰链的示例 蓝色的Cube设置铰链的效果。 首先设置rigidBody刚体属性。 然后增加Hinge Joint铰链设置Anchor和Axis属性分别控制铰链的位置和方向。 36、用鼠标控制移动射线检测 在平面上鼠标按一个位置鼠标无法在3d上指定一个具体位置物体就会移动到这个位置上这个怎么实现的 点击一个位置后从摄像机发射一个射线到指定的方向该射线与平面接触后即得到了具体位置然后就可以让物体移动到该位置。 代码示例 void Update(){if (Input.GetMouseButtonDown(0)){// 按下鼠标左键发射射线Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);// 声明一个碰撞信息类RaycastHit hitInfo;// 碰撞检测bool res Physics.Raycast(ray, out hitInfo);// 如果碰撞到的情况下hitInfo就有内容了if (res){transform.position hitInfo.point; }} }37、粒子系统 特效相关的功能 使用右击 - Effects - Particle System 38、动画 动画有老版Animation和新版Animator两个组件。 1Animation组件 目前动画组件中缺失动画。 制作动画一个cube左右移动的动画Window - Animation - Animation打开制作面板。 首先创建动画剪辑。 然后添加属性比如Transform的Position 点击播放可以进行预览。 然后将该动画放到Animation组件的Animation Clip中。 2Animator组件 使用示例 首先创建Animator组件该组件需要输入Animator Controller信息。 然后在Assets中Create - Animator Controller该控制器如下图所示同时将该控制器拖入Animator组件的Controller选项中。 接着创建Animation。选中物体后Window - Animation创建right 接着继续创建动画脚本left。 接着再点击Animator的Controller选项中的Animator Controller会出现如下画面。 Right高亮这表明程序进入后直接执行right动画。 最终通过代码演示点击鼠标后切换为left动画。 public class AnimatorTest : MonoBehaviour {private Animator animator;// Start is called before the first frame updatevoid Start(){animator GetComponentAnimator();}// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)) {animator.Play(left);}} }39、让角色动起来 首先下载资源Character Pack: Free Sample 然后创建Plane然后把上一步的角色放进去。角色位于Prefabs - High Quality - MaleFree1. 接着创建动画控制器并将该控制器拖到角色的Animator的Controller里面。 双击Controller之后将FBX的动画文件拖到Animator中即可执行。 如果想要一个角色执行两个动作就拖入两个动画脚本然后通过“Make Transition”关联起来。如下所示 此时角色会循环执行第1、2个动作。如何实现通过按键在第1、2个动作之间进行过度此时需要在第1、2个动作之间增加条件。 在Animator面板的Parameters- “” - Trigger 点击idle和pickup之间的transition增加一个trigger为pickup在检查器面板的conditions中增加pickup去掉Has exist time使idle到pickup的触发能立即生效 此时点击左上角的pickup就会立马触发第2个动作。 怎么在代码中实现触发 补充说明Trigger只是触发一下没有持续性。 40、使用按键控制角色运动 1让角色在静止和运动之间切换 参数类型选择bool会永久性进行切换 2过度Transition的设置 3实现运动的代码 public class PlayerController4 : MonoBehaviour {// Start is called before the first frame updateprivate Animator animator;void Start(){animator GetComponentAnimator();}// Update is called once per framevoid Update(){// 水平轴float horizontal Input.GetAxis(Horizontal);// 垂直轴float vertical Input.GetAxis(Vertical);// 向量Vector3 dir new Vector3(horizontal, 0, vertical);// 当用户按下方向键if(dir ! Vector3.zero){// 面向向量transform.rotation Quaternion.LookRotation(dir);// 播放跑步动画animator.SetBool(isRun, true);// 朝向前方移动transform.Translate(Vector3.forward * 2 * Time.deltaTime);}else{animator.SetBool(isRun, false);}} }41、动画FBX属性说明 Model模型相关的信息 Rig动画类型无当前文件不包含动画旧版只能使用Animation组件其他的泛型和人形都是Animator才有的。泛型支持所有类型。人形官网提供的各种人形动画可以套在人形的物体中这样对于人形比较通用。 Animation动画可以生成新的动画剪辑。 Curves曲线该曲线对动画不产生影响该曲线是为了外部能感受到动画的细节以便做出相应的指令。比如角色挥拳产生火焰可以根据曲线决定火焰的大小。 Events事件。当运动到某一动作时指定一个触发事件回调函数。 然后在脚本中编写leftFoot的功能。 void leftFoot() { Debug.Log(左脚); } 42、制作混合动画 在Animator面板的Base Layer中右击 - Create State - From New Blend Tree 双击Blend Tree可以进入子目录。 在右侧的List中增加2个motion如下 通过blend的值控制融合的权重。 43、动画的图层 默认情况下是一个Base的图层如下所示 它有3个状态 Entry入口的指定状态Any State任一状态假如场景中有100个动画如果Any State和run相连则100个动画都可以过度到runExit结束状态 还可以创建子状态集如下 子状态集进去后如下 后续可以针对一个人物创建多个子状态集比如拿刀的是一个子状态拿枪的是一个子状态然后人物可以在状态之间相互切换。 44、反向动力学 功能我们希望这个人物走到哪里都可以看向这个球并且手也指向这个球。 何为反向动力学 在正向动力学中一个人抬起手的顺序是1、2、3即先抬起胳膊、然后抬起手臂、再抬起手。而反向动力学是反过来即3、2、1。 IK动画脚本控制模型骨骼动画。 代码示例在第40节中增加如下代码 public Transform target; // 人物指向的物体// IK写到这个方法内 private void OnAnimatorIK(int layerIndex) {// 设置头部IKanimator.SetLookAtWeight(1);animator.SetLookAtPosition(target.position);// 设置右手IK权重animator.SetIKPositionWeight(AvatarIKGoal.RightHand, 1); // 除了头部其他都采用枚举值// 设置右手IK权重// 旋转举起手旋转animator.SetIKRotationWeight(AvatarIKGoal.RightHand, 1);// 设置右手IKanimator.SetIKPosition(AvatarIKGoal.RightHand, target.position);animator.SetIKRotation(AvatarIKGoal.RightHand, target.rotation); }效果如下 45、导航网格 导航组件是用来智能寻路的。 1导航系统可走的区域 哪些区域可以走哪些区域不可以走是对当前的场景生成网格来实现的网格内的可以走网格外的不可以走。 首先选中需要制作网格的物体后点击Navigation-ObjectNavigation Static打勾。 然后点击Base选项设置参数完毕后点击最下面的bake 就生成了网格区域。 Agent Radius代理半径就是模拟人的宽度 Agent Height代理高度就是模拟人的高度 Max Slope允许行走的倾斜度 Step Height允许人走的每一步的高度 2让物体在网格区域行走 首先给胶囊模拟人添加导航代理组件。 Agent Type选择”Open Agent Settings”可以设置多个代理比如人有高有矮就可以设置不同参数的代理。 然后通过脚本控制胶囊移动 3动态障碍物 当前场景上下两部分被中间的墙隔断了。 有时我们希望一个城墙移动后两边就打通了做成动态障碍物而不是现在的静态障碍物。 做法 第1步把Door的navigation static反勾选 第2步给Door添加组件Nav Mesh Obstacle在该组件中勾选Carve此时就会进行动态切割也就是动态烘焙。 此时把中间的door打开物体就可以两边自由行走。而把door关闭就只能单边行走了。 4网格链接 任务一从一个区域直接跳到另一个区域比如直接从台上跳到地面上。 首先选择需要跳的台面点击该台面的Navigation勾选Generate OffMeshLinks就创建了网络链接。 然后选择胶囊点击Navigation在Generated Off Mesh Links填写Drop Height的值允许跳落得高度就会在Scene上看到可挑落点。 任务二从一个地方跳到另一个指定得位置 比如从白点1的位置希望可以瞬间转移到白点2的位置。 做法 创建两个cube随机选择一个cube添加组件Off Mesh Link然后把两个物体分别拖入Off Mesh Link组件的Start和End的位置 46、UI画布 首先准备素材 搜索资源“Fantasy Free GUI” 然后创建画布 创建完毕后如下图所示 当创建完画布Canvas后系统检测到没有事件系统会自动创建EventSystem。后续在画布上增加按钮就可以响应按钮的点击事件了。 画布在3D世界中就是如上图的白色线框默认线框的比例和下方游戏窗口的比例是一致的。 Canvas组件的RenderMode参数 右击Canvas选择UI - Image然后在Source Image中选择一张图片 1Screen Space-Overlay 屏幕空间-覆盖模式 覆盖模式跟摄像机无关画布上的图像优先级最高总能出现在屏幕的最前方覆盖所有其他的物体。 2Screen Space-Camera 屏幕空间-摄像机 就是根据摄像机拍摄的角度显示内容。需要在Render Camera中拖入一个摄像机如下图所示可以看到cube挡住了画布上的图像。 3World Space 世界空间 与Camera相似但是可以旋转画布此时就可以操作Rect Transform的参数。 Canvas Scaler组件的UI Scale Mode参数 Constant Pixel Size固定的像素大小按照屏幕的大小进行显示Scale With Screen Size屏幕大小缩放比较多人使用的方式 此时无论游戏屏幕怎么变化最终游戏都会根据1920*1080进行适配显示。 47、UI的图片的锚点、轴心点 下图中左边红框的为画布的瞄点而图片的PointX、PointY的坐标即为图片的轴心相对瞄点的坐标。 假如将画布的瞄点拆分为矩形的四个顶点那么随着设备的分辨率变化图片会进行相应的伸缩。否则图片大小固定在不同分辨率下的设备呈现不同的显示。 48、UI按钮 有两个地方可创建文本和按钮。 旧版UI-Legacy两者的区别是组件不同。 更改按钮的图标 Button设置中的Transition可以设置为Sprite Swap精灵类型可包含图片。 按钮触发事件可把脚本挂在到Canvas上。 然后点击Button选择对象上的函数进行关联。此时选择Canvas对象的对应的ButtonTest的ButtonClick1函数其他几个button可依次这样进行操作。 49、UI输入框 位于UI - Legacy - Input Field 输入框有3个事件使用方法和Button的事件相似。 新旧版输入框脚本上的差异 50、UI之选项 位于UI - Toggle 怎么保证只能2选1呢 选择Canvas后添加组件Toggle Group 然后分别选择Toggle1和Toggle2Group参数选择刚才Canvas中创建的组件 51、UI之下拉列表 位于UI - Legacy - Dropdown 动态添加选项的方法 52、UI之面板Panel 在界面中我们作图完成后如下图所示 在不同的分辨率下会呈现不同的结果如下图所示 此时需要通过Panel来固定位置 选择UI - Panel然后选择左上角对齐锚点反选Image。 此时改变显示屏的分辨率显示的图像位置都不会发生变化。
http://www.zqtcl.cn/news/2619/

相关文章:

  • 宁波品牌网站设计价格电子商城网站源码
  • 建设网站需要花多少钱商城服务是什么软件
  • 51自学网网站开发自助网站建设哪家好
  • 推荐十个网站免费行情软件app网站大全入口
  • 施工员证怎么查询网站有源码如何搭建网站
  • 博客网站需求分析手写字体在线生成器
  • 南通手机建站模板东莞建站网站模板
  • 网站建设答辩ppt模板腾讯云学生机做网站
  • 什么网站做旅行计划尚海整装官网门店电话
  • 湖南网站营销推广设计网站建设无锡海之睿
  • 响应式网站建设北京建设集团网站
  • 凡科手机建站教程中国建筑材料集团有限公司
  • 新网站建设哪里有免费网站空间
  • 免费自助网站建站电商设计师需要掌握什么技能
  • 寿光网站建设优化wordpress和hexo
  • 周浦做网站WordPress换域名更新
  • 网站配色的原理和方法自己做网站好还是购买网站好
  • 施工企业管理协会嘉兴seo外包公司
  • 龙海网站制作公司logo设计欣赏
  • 如何用ps做网站导航网站建设与管理需要什么软件
  • 网站建设教程软件深圳好点的网站建设公司
  • 临沂免费自助建站模板怎么搭建一个自己的网站
  • 网站建设效果图app应用开发
  • 网站开发文档有哪些网站交易
  • 產品定制网站开发公司名字大全20000个三个字
  • 沈阳中小企业网站建设免费无货源代理
  • 北京网站建设制作wordpress用户名的要求
  • 门户网站建设企业怎样免费做网站推广
  • 供灯放生网站开发装潢设计师
  • 常州规划网站做网站上时需要3d预览功能