Unity3D 游戏开发构架篇 ——输入控制
临近毕业之初。进入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 游戏开发构架篇 ——输入控制相关推荐
- Unity3D游戏开发第三人称角色控制的模式
众所周知,在Unity3D游戏开发中,经常会用到角色控制,一般情况下角色控制有第一人称和第三人称两种,在 RPG 游戏中通常以第三人称的形式出现.而对于第三人称角色控制而言,通常有 2 种模式,我们今 ...
- Unity3D游戏开发之仿仙剑奇侠传角色控制效果
在上一篇文章中,我们从Unity3D为我们提供的相机原型实现了非编码式的小地图,如果结合GUI在这个小地图下面绘制一些背景贴图,相信整体的效果会更好一些.博主希望这个问题大家能够自己去做更深入的研究, ...
- Unity3D游戏开发之自由视角下的角色控制
秦元培的博客:http://blog.csdn.net/qinyuanpei/article/details/39125353 1,[Unity3D]Unity3D游戏开发之角色控制漫谈 2,[Uni ...
- Unity3D游戏开发-宣雨松读书摘要(2015-4-17 18:36)
本书基于Unity3.5编写,通过丰富的游戏实例,以JavaScript与C#两种语言介绍Unity开发. Unity3D游戏开发-宣雨松 序 它支持JavaScript.C#.Boo三种脚本语言 ...
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- android+Unity3D游戏开发之简单的物体运动
android+Unity3D游戏开发之简单的物体运动 其实这篇也是转载的,真的感觉对于我们初学者来说很不错的,不信你看看嘛;原创链接:http://bbs.9ria.com/thread-98192 ...
- [Unity3D]Unity3D游戏开发之鼠标旋转、缩放实现3D物品展示
各位朋友,大家好,我是秦元培,欢迎大家关注我的博主,我的博客地址是blog.csdn.net/qinyuanpei.最近博主重点研究了摄像机旋转.缩放等问题,那么今天为大家分享的是一个在3D展示中比较 ...
- Unity3D游戏开发之网络游戏服务器架构设计(如何做一名主程)
下面我们开始今天的Unity3D游戏开发技能. 初期学习目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天给大家讲一下如何做一个好 ...
- 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作
在Unity中,所有实体都属于游戏对象(GameObject),比如外部导入到场景中的模型,Unity自带的立方体等等,而要将这些GameOject进行管理,交互等操作,则需要用到脚本来实现,上一节我 ...
- 喵的Unity游戏开发之路 - 玩家控制下的球的滑动
很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发. 本文不 ...
最新文章
- 轻松上云系列之一:本地数据迁移上云
- PyTorch 0.4新版本 升级指南 no_grad
- 谈谈对 Spring 的理解
- 每天进步一点点《ML - 感知机》
- Elasticsearch教程-从入门到精通-ES索引迁移
- 关于jmeter 加载jar文件的疑问
- Android自定义样式
- Linux内核多线程(五)
- hive根据已有表创建新表_读取Hive中所有表的表结构,并在新Hive库中创建表,索引等...
- 经济数据预测 | Python实现ELM极限学习机股票价格时间序列预测
- android布局详解
- 移动端后台管理系统框架
- 微信好友保存在服务器,微信好友数据备份好,封号也不怕!
- 让电脑说话vbs程序
- css方位,CSS 世界中的方位与顺序
- Parallels Desktop启动后黑屏无法进入Windows系统
- 东华大学2020考研计算机OJ题目解答分享——进阶篇(34)
- (二)IJCAI 国际人工智能联合会议
- 初学SpringMVC注册前端控制器DispatcherServlet:org.springframework.web.servlet.DispatcherServlet报红
- UNIX环境高级编程(1)——UNIX系统总览