临近毕业之初。进入Unity3D这个行业,是一家小工作室。老板人非常不错,公司氛围也非常单纯。近期公司开发一款小游戏,初次上手,颇多周折,记录下自己的开发心得。主要涉及一些设计理念,互相交流。

先说下项目背景。主要是一款闯关游戏,山寨了敲冰块与雷霆战机。

一、人物控制

// This script moves the character controller forward
// and sideways based on the arrow keys.
//这个脚本用箭头键向前移动和側移角色控制器。

// It also jumps when pressing space. //当按下空格键时。它跳起。 // Make sure to attach a character controller to the same game object. //确保把一个character controller组件附加到同一个游戏物体上。 //It is recommended that you make only one call to Move or SimpleMove per frame. //建议你每帧仅仅调用一次Move或者SimpleMove。

var speed : float = 6.0; var jumpSpeed : float = 8.0; var gravity : float = 20.0; private var moveDirection : Vector3 = Vector3.zero; function Update() { var controller : CharacterController = GetComponent(CharacterController); if (controller.isGrounded) { // We are grounded, so recalculate // move direction directly from axes //我们着地了,所以直接通过轴又一次计算move direction。 moveDirection = Vector3(Input.GetAxis("Horizontal"), 0,Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection *= speed; if (Input.GetButton ("Jump")) { moveDirection.y = jumpSpeed; } } // Apply gravity //应用重力。 moveDirection.y -= gravity * Time.deltaTime; // Move the controller //移动控制器。 controller.Move(moveDirection * Time.deltaTime); }

上面的一段代码是圣典中的一段角色控制代码。也是我项目最原始的人物控制代码版本号。

可是考虑到输入设备的不同。我们就要考虑到代码的重用性,比方Android移动平台和PC平台等等。

二、设计思想

能够把输入设备做一个输入模块,发出信号,其内部的逻辑实现都运动控制模块实现。这样就分离了开来。耦合性减少。

大致思想例如以下图所看到的

三、代码实现

这个设计严格说起来可能还有点复杂,可是我本身非常赞赏这个做法——逻辑和表现的分离。

以下附上核心代码

类图例如以下

PCInput.CS

public class PCInput : MonoBehaviour {private PlayControl mycontrol;void Awake(){mycontrol = GetComponent<PlayControl>();DebugUtils.Assert(mycontrol != null );}// Update is called once per framevoid Update () {mycontrol.ChangePosition(Input.GetAxis("Horizontal"));if (Input.GetButton("Jump")){//call jump mycontrol.Set_Jump();}    }
}

PlayControl.CS

    public void ChangePosition(float x){if (isGrounded()) {//print("isgrond");moveDirection = new Vector3(x, 0.0f, 0.0f);if (Startjump) {moveDirection.y = jumpSpeed;}//仅仅有在地面才干控制速度moveDirection *= speed;}moveDirection.y -= gravity * Time.deltaTime;controller.Move(moveDirection * Time.deltaTime);}public bool Startjump = false;void Recover(){Startjump = false;}public void Set_Jump() {Startjump = true;Invoke ("Recover", 0.1f);}

Android就不发了。 本身都是一个思路。

四、延伸

事实上这个模块也能够用来控制动画。比方行走和精巧的动画能够由虚拟轴控制等等。

欢迎大家对博客的留言讨论。CSDN的博客公布越来越慢,还须要验证码,烦死了,后期转到博客园去了。

Unity3D 游戏开发构架篇 ——输入控制相关推荐

  1. Unity3D游戏开发第三人称角色控制的模式

    众所周知,在Unity3D游戏开发中,经常会用到角色控制,一般情况下角色控制有第一人称和第三人称两种,在 RPG 游戏中通常以第三人称的形式出现.而对于第三人称角色控制而言,通常有 2 种模式,我们今 ...

  2. Unity3D游戏开发之仿仙剑奇侠传角色控制效果

    在上一篇文章中,我们从Unity3D为我们提供的相机原型实现了非编码式的小地图,如果结合GUI在这个小地图下面绘制一些背景贴图,相信整体的效果会更好一些.博主希望这个问题大家能够自己去做更深入的研究, ...

  3. Unity3D游戏开发之自由视角下的角色控制

    秦元培的博客:http://blog.csdn.net/qinyuanpei/article/details/39125353 1,[Unity3D]Unity3D游戏开发之角色控制漫谈 2,[Uni ...

  4. Unity3D游戏开发-宣雨松读书摘要(2015-4-17 18:36)

    本书基于Unity3.5编写,通过丰富的游戏实例,以JavaScript与C#两种语言介绍Unity开发. Unity3D游戏开发-宣雨松 序 它支持JavaScript.C#.Boo三种脚本语言 ...

  5. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

  6. android+Unity3D游戏开发之简单的物体运动

    android+Unity3D游戏开发之简单的物体运动 其实这篇也是转载的,真的感觉对于我们初学者来说很不错的,不信你看看嘛;原创链接:http://bbs.9ria.com/thread-98192 ...

  7. [Unity3D]Unity3D游戏开发之鼠标旋转、缩放实现3D物品展示

    各位朋友,大家好,我是秦元培,欢迎大家关注我的博主,我的博客地址是blog.csdn.net/qinyuanpei.最近博主重点研究了摄像机旋转.缩放等问题,那么今天为大家分享的是一个在3D展示中比较 ...

  8. Unity3D游戏开发之网络游戏服务器架构设计(如何做一名主程)

    下面我们开始今天的Unity3D游戏开发技能. 初期学习目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天给大家讲一下如何做一个好 ...

  9. 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作

    在Unity中,所有实体都属于游戏对象(GameObject),比如外部导入到场景中的模型,Unity自带的立方体等等,而要将这些GameOject进行管理,交互等操作,则需要用到脚本来实现,上一节我 ...

  10. 喵的Unity游戏开发之路 - 玩家控制下的球的滑动

    很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...

最新文章

  1. 轻松上云系列之一:本地数据迁移上云
  2. PyTorch 0.4新版本 升级指南 no_grad
  3. 谈谈对 Spring 的理解
  4. 每天进步一点点《ML - 感知机》
  5. Elasticsearch教程-从入门到精通-ES索引迁移
  6. 关于jmeter 加载jar文件的疑问
  7. Android自定义样式
  8. Linux内核多线程(五)
  9. hive根据已有表创建新表_读取Hive中所有表的表结构,并在新Hive库中创建表,索引等...
  10. 经济数据预测 | Python实现ELM极限学习机股票价格时间序列预测
  11. android布局详解
  12. 移动端后台管理系统框架
  13. 微信好友保存在服务器,微信好友数据备份好,封号也不怕!
  14. 让电脑说话vbs程序
  15. css方位,CSS 世界中的方位与顺序
  16. Parallels Desktop启动后黑屏无法进入Windows系统
  17. 东华大学2020考研计算机OJ题目解答分享——进阶篇(34)
  18. (二)IJCAI 国际人工智能联合会议
  19. 初学SpringMVC注册前端控制器DispatcherServlet:org.springframework.web.servlet.DispatcherServlet报红
  20. UNIX环境高级编程(1)——UNIX系统总览

热门文章

  1. input 标签左对齐
  2. 结对项目---万年历
  3. Guitar Pro如何更改五线谱的符杆方向
  4. 关于es6中新增的一些方法----数组篇
  5. mybatis 中collection中需要 open close separator
  6. 关于java第八章的想法
  7. yii2.0 读取user表新增字段问题
  8. jbpm的流程变量与任务变量的存取与更新
  9. 用标准C编写COM dll
  10. R语言中文社区2018年终文章整理(类型篇)