【4.UI和调度器】3.让小车移动

【4.UI和调度器】3.让小车移动

首页休闲益智拖曳汽车更新时间:2024-05-09
3.让小车移动3.1编写让小车移动的脚本

要让小车移动,需要编写小车的控制器脚本,我们要实现的功能是通过滑屏来让小车移动,并且滑屏的距离决定小车的移动距离,这时,可能大家觉得比较无从下手,那么,我们先实现单击画面使小车移动,然后逐步减速停下来。

要向让小车移动,需要使用 transform 的 Translate 方法,该方法与 Rotate 方法相似,参数为坐标值。表示沿 x、y、z 轴移动的相对量,如:Translate(0,3,0),不是将物体移动到 (0,3,0) 位置处,而是从现在的位置开始沿 y 轴正反向移动 3 个单位。

创建控制器脚本并双击打开编写代码,实现小车移动的代码如下:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class CarController : MonoBehaviour { float speed = 0.0f; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { speed = 0.2f; } transform.Translate(speed, 0, 0); speed *= 0.98f; } }

将脚本拖拽到小车对象上挂载,运行游戏,观察效果。

3.2根据滑屏长度控制小车的移动距离

当按下时,可以获取到按下时的鼠标坐标,当放开时,可以获取到放开鼠标时的坐标,通过这两个坐标可以计算出坐标之间的距离,通过该距离转换为速度值即可实现。

鼠标位置可以通过 Input 的 mousePosition 成员变量的值来获取,其返回值为 Vector2 类型。修改代码如下:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class CarController : MonoBehaviour { float speed = 0.0f; Vector2 StartPos; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { // 鼠标按下获取鼠标位置 if (Input.GetMouseButtonDown(0)) { this.StartPos = Input.mousePosition; } // 鼠标松开获取鼠标位置 if (Input.GetMouseButtonUp(0)) { Vector2 EndPos = Input.mousePosition; // 计算 x 坐标的差值 float s = EndPos.x - StartPos.x; // 转换为速度 speed = Mathf.Abs(s) / 500.0f; } transform.Translate(speed, 0, 0); speed *= 0.98f; // Debug.Log(Mathf.Abs(0.0001f-speed).ToString("f3")); if (Mathf.Abs(0.0001f-speed) <= 0.0002f) transform.position = new Vector3(-7.0f,-3.6f,0.0f); // 复位,回到初始位置 } }3.3坐标系

Translate 方法移动方向采用的是本地坐标系而不是世界坐标系。所以当对象旋转后再移动时,Translate 方法将使用旋转后的坐标系计算方向。所以,当对象同时进行旋转和移动时需要格外注意这一点。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved