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