




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
My First RPG Game 总结一 一进游戏把鼠标指针切换成想要的形状: FileBuild settings,最下面有个 player setting,在右侧属性中有个 Default Cursor,拖动图 片到那里即可 镜头很远观看物体时有雾的效果: editrender setting,勾选 fog,调整浓度 场景切换白色渐变效果做法: 在 NGUI 中创建一个 simple texture,Texture 选择纯白色,选中它,右键 tween- alpha,from 为 1,to 为 0 由于进入游戏需要一段时间,Start Delay 设为 1 秒 过一会要显示游戏名字,我们把标题的 alpha 先设为 0,添加 alpha 的 tween,让它一会显 示出来,ping pong 播放 给按任意键开始游戏这个按钮添加脚本 html view plain copy 在 CODE 上查看代码片派生到我的代码片 public class PressAnyKey : MonoBehaviour /按任意键开始是否按下 private bool start = false; private GameObject button; private void Start() button = transform.parent.Find(“ButtonContainer“).gameObject; void Update () if (start=false) if (Input.anyKey) showButton(); /显示新游戏和载入游戏 private void showButton() button.SetActive(true); this.gameObject.SetActive(false); start = true; 这里注意的是 html view plain copy 在 CODE 上查看代码片派生到我的代码片 transform.parent.Find(“ButtonContainer“).gameObject; 拿到按钮的 Gameobject 要注意层级关系 transform.parent.find 犯的错误; public GameObject characterPrefabs;将 prefab 中的 Gameobject 拖动到里面,那 么请问还需要在代码中添加这段代码吗 characterPrefabs=new GameObjectcharacterPrefabs.length; 答:不能再添加这句话,否则报空指针 如果在最上面 private GameObject characterObjects;那么还需要 new 来初始化吗? 答,需要 按钮按下调用脚本注意要把调用的方法设成 public 才能调用 在写脚步时候遇到的问题 csharp view plain copy 在 CODE 上查看代码片派生到我的代码片 public GameObject characterPrefabs; private int nowIndex = 0; private GameObject characterObjects; private void Start() int length = characterPrefabs.Length; characterObjects = new GameObjectlength; for (int i= 0; iProjectSetting-time 找到 Fixedtimestep。就可以修改了。 Update 和 LateUpdate 的区别 在圣典里 LateUpdate 被解释成一句话: LateUpdate 是在所有 Update 函数调用后被调用。 LateUpdate 是晚于所有 Update 执行的。例如:游戏中有 2 个脚步,脚步 1 含有 Update 和 LateUpdate,脚步 2 含有 Update,那么当游戏执行时,每一帧都是把 2 个脚步中的 Update 执行完后才执行 LateUpdate 。虽然是在同一帧中执行的,但是 Update 会先执行, LateUpdate 会晚执行。 现在假设有 2 个不同的脚本同时在 Update 中控制一个物体,那么当其中一个脚本改变物 体方位、旋转或者其他参数时,另一个脚步也在改变这些东西,那么这个物体的方位、旋 转就会出现一定的反复。如果还有个物体在 Update 中跟随这个物体移动、旋转的话,那跟 随的物体就会出现抖动。 如果是在 LateUpdate 中跟随的话就会只跟随所有 Update 执行完 后的最后位置、旋转,这样就防止了抖动。 做一个相机跟随主角的功能时,相机的位置调整写在 LateUpdate() 对于人物的动画播放我们可以通过动画机,当然也可以直接用代码来实现动画播放,把动 画拖动到 player 的 animation 中 在人物行走的代码如下: csharp view plain copy 在 CODE 上查看代码片派生到我的代码片 public enum AnimState run, idle public class PlayerDir : MonoBehaviour /鼠标左键单击的特效 public GameObject effect_click_prefab; /是否面向鼠标点击的位置 private bool isLookAt=false; /这个目标坐标是在另一个 PlayerMove 调用的坐标 public Vector3 TargetPos; private CharacterController cc; public float speed = 4; /设置人物的动画状态 public AnimState playerAnimationState = AnimState.idle; private void Start() cc = GetComponent(); /让角色一进游戏的目标位置为当前位置不发生移动 TargetPos = transform.position; void Update () if (Input.GetMouseButtonDown(0) Ray ray= Camera.main.ScreenPointToRay(Input.mousePosition); /用一个 bool 来看有没有射线碰撞,如果有,而且碰撞到地面的话就显示鼠 标左键的特效 RaycastHit hitInfo; bool isCollider = Physics.Raycast(ray,out hitInfo); if(isCollider isLookAt = true; else if (Input.GetMouseButtonUp(0) isLookAt = false; if (isLookAt) CharacterLookAtClick(); else Move(); /猪脚面向鼠标 void CharacterLookAtClick() /这里有个非常值得注意的地方,为什么不直接把上面的 hitInfo 传过来拿到目标 点而是还要在函数里再做射线, /因为 GetMouseButtonDown 只要按下只返回一次,如果按住鼠标需要通过 Input.GetMouseButton 来实时返回结果 /所以鼠标一直按住 isLookAt 还是 true,那么在这个函数再做一次射线检测才行 RaycastHit hitInfo; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); bool isCollider = P.Raycast(ray, out hitInfo); if (isCollider TargetPos = hitInfo.point; /如果鼠标点了一下,就实例化一个单击的特效 void ShowClickEffect(Vector3 hitPoint) Instantiate(effect_click_prefab,hitPoint,Quaternion.identity); /角色移动 void Move() /这里注意的是如果我直接 if (Vector3.Distance(TargetPos,transform.position)0.1) 那么鼠标点击的 y 轴坐标和 /人物的 y 轴坐标是有距离的即使走到了该点距离仍然 0.1 所以要让 TargetPos 的 y 取人物的 y 坐标 Vector3 v = new Vector3(TargetPos.x,transform.position.y,TargetPos.z); if (Vector3.Distance(v,transform.position)0.1) csharp view plain copy 在 CODE 上查看代码片派生到我的代码片 transform.LookAt(v);/这句话必须得加上,因为如果不加意思是鼠标抬起,朝着目标点行走, 按理说没有错,但是如果遇到高地或 者石头让人物行走的角度 csharp view plain copy 在 CODE 上查看代码片派生到我的代码片 偏了一点那么会出现走到目标点仍然 会行走的 bug,所以要实时更新 lookAt 角度 csharp view plain copy 在 CODE 上查看代码片派生到我的代码片 cc.SimpleMove(speed*transform.forward); playerAnimationState = AnimState.run; else playerAnimationState = AnimState.idle; 动画的代码如下: csharp view plain copy 在 CODE 上查看代码片派生到我的代码片 public class PlayerAnim : MonoBehaviour private Animation anim; private PlayerDir dir; private void Start() anim = GetComponent(); /这里注意的是必须要拿到该脚本的组件,如果只是声明 private PlayerDir dir,直 接调用 dir.playerAnimationState /那么会报空指针 dir = GetComponent(); private void LateUpdate() /这里注意的是 public enum AnimState 要放到 public class PlayerDir : MonoBehaviour 的上面 /这样在这个脚本中调用上个脚本就直接拿到 AnimState /还要注意在 public enum AnimState 命名的时候会突然报错,可能是 AnimState 会 与插件的类名重合了 if (dir.playerAnimationState= AnimState.idle) anim.CrossFade(“Idle“); else if(AnimState.run = dir.playerAnimationState) anim.CrossFade(“Run“); 下面添加相机跟随人物行走脚本 csharp view plain copy 在 CODE 上查看代码片派生到我的代码片 private Transform player; private Vector3 offsetPostion; void Start () player = GameObject.FindGameObjectWithTag(Tags.player).transform; offsetPostion = transform.position - player.position; /这里注意要让相机的位置等于人物 Position+offsetPosition,那么相机的更新位置要放 到 LateUpdate 中防止抖动 /如果放到 update 中,那么会感觉一卡一卡的 private void LateUpdate() transform.position = player.position + offsetPostion; void Update () 对于鼠标滚轮的修改,EditProject settings-input 鼠标向前滑动 input.GetAxis(“Mouse ScrollWheel“)为正值所以这样来在相机的脚本中这样做 csharp view plain copy 在 CODE 上查看代码片派生到我的代码片 /调整鼠标滚轮的视野拉近 void ScollView() /视野的拉近改变的是相机镜头的距离角色的距离,而且这个距离是相机对角色的 角度不变也即单位向量不变,改变长度 d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年幼儿园班务个人工作方案
- 配电线路知识培训课件
- 酒店服务质量提升
- 用友管理信息化课堂薪资管理
- 2025年吉林长春市普通高中高三五月月考历史试题试卷含解析
- 上海市闵行区2025年第二学期初三英语试题期末教学质量(一模)监测卷含答案
- 河南省安阳市安阳县一中2025年高三3月联考英语试题含解析
- 广州涉外经济职业技术学院《艺术实践(3)》2023-2024学年第二学期期末试卷
- 泉州纺织服装职业学院《园艺学通论》2023-2024学年第二学期期末试卷
- 清远市2025届四下数学期末教学质量检测试题含解析
- 高中数学 66个常考特殊函数图像
- 第八版口腔肿瘤TNM分期更新解读
- 小学生卫生知识健康教育精课件
- DL∕T 1100.1-2018 电力系统的时间同步系统 第1部分:技术规范
- 管理原理与实务
- 2024年广东省初中学业水平考试中考历史试卷(真题+答案解析)
- 煤矿防治水细则释义详解版(一)
- DZ-T+0155-1995钻孔灌注桩施工规程
- 2024山东能源集团中级人才库选拔易考易错模拟试题(共500题)试卷后附参考答案
- 2024年重庆市中考语文试卷真题B卷(含答案逐题解析)
- 12清贫 公开课一等奖创新教学设计
评论
0/150
提交评论