1.学习一个物体单击事件
学习目的:双击到一个物品上,处理一个行为。这里当双击到地面上的时候,在地面上点击位置创建一个Cube实例。
下面是代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class doubleKick : MonoBehaviour
{
public Camera activeCamera;// 摄像机
public Transform Container;//所有Cube的父亲
public Transform CubePrefab;//预制体方块赋值(可以用拖的方式赋值)
public float Scale = .5f;
private Rigidbody rb;
private double lastKickTime; // 上一次鼠标抬起的时间(用来处理双击)
void Awark()
{
rb = GetComponent<Rigidbody>();
lastKickTime = Time.realtimeSinceStartup;
}
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonUp(0))
{
CheckCreateCube();
}
}
void OnMouseDown()
{
//Debug.Log("鼠标按下");
}
void OnMouseUp()
{
//Debug.Log("鼠标抬起");
}
void CheckCreateCube()
{
RaycastHit hit;
// 从鼠标所在的位置发射
Vector2 screenPosition = Input.mousePosition;
if (Physics.Raycast(activeCamera.ScreenPointToRay(screenPosition), out hit) && hit.transform == transform)
{
if (Time.realtimeSinceStartup - lastKickTime < 0.5)//检测上次点击的时间和当前时间差 在一定范围内认为是双击
{
//创建一个Cube实例
var cube = Instantiate(CubePrefab) as Transform;
cube.parent = Container;
cube.name = "Cube";
cube.localScale = Vector3.one * Scale * cube.localScale.x;
cube.position = hit.point + hit.normal * .5f;
}
lastKickTime = Time.realtimeSinceStartup;//重新设置上次点击的时间
}
}
}
通过射线检测是否点击到物体实例上,这里就不在说了,详情可以查看
点击打开链接
这里双击是通过检测两次点击在一个物体上的时间差实现的。
if (Time.realtimeSinceStartup - lastKickTime < 0.5)//检测上次点击的时间和当前时间差 在一定范围内认为是双击
{
}
下面了解一下时间有关的一些东西
Time.realtimeSinceStartup 从开始真实时间
realtimeSinceStartup返回从开始时间,不受Time.timeScale影响。即使玩家暂停游戏,realtimeSinceStartup也将保持增加(在后台)。当你想通过设置Time.timeScale为0暂停游戏时,但仍希望能够以某种方式来计算时间,使用realtimeSinceStartup是很有用的。
Time.deltaTime 增量时间
以秒计算,完成最后一帧的时间(只读)。
使用这个函数使你的游戏帧速率独立。
如果你加或减一个每帧改变的值,你应该与Time.deltaTime相乘。当你乘以Time.deltaTime实际表示:每秒移动物体10米,而不是每帧10米。
Time.smoothDeltaTime 平滑增量时间
经平滑的Time.deltaTime时间(只读)。Time.time 时间
以秒计算,从游戏开始的时间(只读)。也就是说,从游戏开始到到现在所用的时间。
如果在单帧调用多次,返回相同的值。当在MonoBehaviour的FixedUpdate里调用的时候,返回的是fixedTime属性。
Time.fixedTime 固定时间
最近的FixedUpdate已开始的时间(只读)。这是以秒计自游戏开始的时间。
固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。