Unity游戏开发的数学与物理 2 ( 通过键盘控制物体的运动 )
2015-04-21 23:15
591 查看
通过键盘控制物体的运动
实现需注意:
获取键盘相应的方法
边界检测
合力方向的速度处理
勾股定理
实现需注意:
获取键盘相应的方法
边界检测
合力方向的速度处理
勾股定理
using UnityEngine; using System.Collections; //通过键盘控制物体的运动 public class KeyControlMotionTest : MonoBehaviour { //物体的X位置 float posX = 0; //物体的Y位置 float posY = 0; //物体在x方向上的速度 float speedX = 1; //物体在y方向上的速度 float speedY = 1; //屏幕的右上像素在世界空间的坐标 Vector3 ScreenRightTopPos; //屏幕的左下像素在世界空间的坐标 Vector3 ScreenLeftBottomPos; //box的半宽度 float boxHalfWidth; readonly float Sqrt2; public KeyControlMotionTest() { //2的开方 Sqrt2 = Mathf.Sqrt(2); } void Start() { //将屏幕右上的像素转换为世界空间的坐标 ScreenRightTopPos = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, 0)); //将屏幕右下的像素转换为世界空间的坐标 ScreenLeftBottomPos = Camera.main.ScreenToWorldPoint(new Vector3(0, 0, 0)); //box的半宽度,因为box是正方形 boxHalfWidth = transform.localScale.x * 0.5f; //初始位置 transform.localPosition = new Vector3(posX, posY, 0); } void Update() { //按住左键 if (IsLeftKey()) { //按住左键且按住上键 if (IsUpKey()) { posX -= speedX / Sqrt2 * Time.deltaTime; posY += speedY / Sqrt2 * Time.deltaTime; } //按住左键且按住下键 else if (IsDownKey()) { posX -= speedX / Sqrt2 * Time.deltaTime; posY -= speedY / Sqrt2 * Time.deltaTime; } else { posX -= speedX * Time.deltaTime; } } //按住右键 else if (IsRightKey()) { //按住右键且按住上键 if (IsUpKey()) { posX += speedX / Sqrt2 * Time.deltaTime; posY += speedY / Sqrt2 * Time.deltaTime; } //按住右键且按住下键 else if (IsDownKey()) { posX += speedX / Sqrt2 * Time.deltaTime; posY -= speedY / Sqrt2 * Time.deltaTime; } else { posX += speedX * Time.deltaTime; } } //按住上键 else if (IsUpKey()) { posY += speedY * Time.deltaTime; } //按住下键 else if (IsDownKey()) { posY -= speedY * Time.deltaTime; } //边界检测 右 if (posX + boxHalfWidth >= ScreenRightTopPos.x) { posX = ScreenRightTopPos.x - boxHalfWidth; } //边界检测 左 if (posX - boxHalfWidth <= ScreenLeftBottomPos.x) { posX = ScreenLeftBottomPos.x + boxHalfWidth; } //边界检测 上 if (posY + boxHalfWidth >= ScreenRightTopPos.y) { posY = ScreenRightTopPos.y - boxHalfWidth; } //边界检测 下 if (posY - boxHalfWidth <= ScreenLeftBottomPos.y) { posY = ScreenLeftBottomPos.y + boxHalfWidth; } //设置当前物体的位置 transform.localPosition = new Vector3(posX, posY, 0); } bool IsLeftKey() { //按住左键或者a键,都是向左 if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) { return true; } else { return false; } } bool IsUpKey() { //按住上键或者w键,都是向上 if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.W)) { return true; } else { return false; } } bool IsDownKey() { //按住下键或者s键,都是向下 if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) { return true; } else { return false; } } bool IsRightKey() { //按住右键或者d键,都是向右 if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) { return true; } else { return false; } } }
相关文章推荐
- Unity游戏开发的数学与物理 4 ( 在物体运动中加入重力 )
- Unity游戏开发的数学与物理 1 ( 物体延水平方向运动 )
- Java通过数学函数(抛物线、正弦曲线、椭圆等)控制游戏中物体的运动
- Unity游戏开发的数学与物理 3 ( 让物体延任意方向移动 )
- Unity 通过键盘控制物体运动
- 1.2 通过键盘控制物体运动【键盘输入、斜方向移动、勾股定理】
- 物体运动--通过改变transform--键盘控制
- 《游戏脚本的设计与开发》-(RPG部分)3.8 通过脚本来自由控制游戏(一)
- 控制物体的运动-第九作坊物理运动引擎介绍
- 游戏开发中的数学和物理算法(3):点之间的距离
- 游戏开发中的数学和物理算法(2)
- 游戏开发中的数学和物理算法(9):三角代数
- 通过Unity引擎可实现小规模的人员开发游戏
- 游戏开发中的数学和物理算法(3):点之间的距离
- flash游戏开发-单键记忆模式的键盘控制
- 游戏开发中的数学和物理算法(4):抛物线
- unity开发(一个按钮控制不同的物体)
- 【Unity&文章&数学】游戏开发的数学运用
- 游戏开发中的数学和物理算法(1):定义点
- 游戏开发中的数学和物理算法(14):矩阵的相等和转置