unity3d学习笔记(一) 第一人称视角实现和倒计时实现
unity3d学习笔记(一) 第一人称视角实现和倒计时实现
1. 第一人称视角
(1)让mainCamera和player(视角对象)同步在一起
因为我们的player是生成的,所以不能把mainCamera直接放到预支对象里,所以我们实现的方法就是让player和camera的相对位置不变
创建脚本 CameraFlow.cs用于控制mainCamera移动,把此脚本挂到mainCamera中, 同时设置mainCamera为刚体,重力为零(不然mainCamera会掉), 而且把mainCamera和人物的头部放在一起(这里可以点击暂停,然后慢慢调整mainCamera位置)
下一步就是利用CameraFlow.cs使得mainCamera和人物相对位置不变
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraFlow : MonoBehaviour
{
public GameObject follow; //跟随的物体
public float smothing = 5f; //相机跟随的速度
Vector3 offset; //相机与物体相对偏移位置
void Start()
{
offset = new Vector3(0,1.9f,0.15f);
}
void FixedUpdate()
{
Vector3 target = follow.transform.position + offset;
//摄像机自身位置到目标位置平滑过渡
//transform.position = Vector3.Lerp(transform.position, target, smothing * Time.deltaTime);
this.transform.position = target;
}
}
(2)使鼠标控制方向
在mainCamera挂载mouseLook.cs脚本
using UnityEngine;
using System.Collections;
public class mouseLook : MonoBehaviour
{
private IUserAction action;
//方向灵敏度
public float sensitivityX = 0F;
public float sensitivityY =0F;
public float sensitive = 0.5f;
//上下最大视角(Y视角)
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
void Update()
{
//根据鼠标移动的快慢(增量), 获得相机左右旋转的角度(处理X)
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
//根据鼠标移动的快慢(增量), 获得相机上下旋转的角度(处理Y)
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
//角度限制. rotationY小于min,返回min. 大于max,返回max. 否则返回value
rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
//总体设置一下相机角度
transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
action.rotation(new Vector3(-rotationY, rotationX , 0) );
//旋转player
}
void Start()
{
action = SSDirector.GetInstance().CurrentScenceController as IUserAction;
// Make the rigid body not change rotation
//if (rigidbody)
// rigidbody.freezeRotation = true;
}
}
这样就实现了第一人称, 同时你可以加入移动脚本
2.倒计时系统实现
首先加入一个定时器类Timer.cs
“`
public class Timer
{
bool _isTicking;//是否在计时中
public float _currentTime;//当前时间
public float _endTime;//结束时间
public delegate void EventHander();
public Timer(float second)
{
_currentTime = 0;
_endTime = second;
}
/// <summary>
/// 开始计时
/// </summary>
public void StartTimer()
{
_isTicking = true;
}
/// <summary>
/// 更新中
/// </summary>
public void UpdateTimer(float deltaTime)
{
if (_isTicking)
{
_currentTime += deltaTime;
if (_currentTime > _endTime)
{
_isTicking = false;
}
}
}
/// <summary>
/// 停止计时
/// </summary>
public void StopTimer()
{
_isTicking = false;
}
/// <summary>
/// 持续计时
/// </summary>
public void ContinueTimer()
{
_isTicking = true;
}
/// <summary>
/// 重新计时
/// </summary>
public void ReStartTimer()
{
_isTicking = true;
_currentTime = 0;
}
/// <summary>
/// 重新设定计时器
/// </summary>
public void ResetEndTimer(float second)
{
_endTime = second;
}
}
“`
然后就可以调用类 来进行倒计时处理了
以下为测试代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UserGUI : MonoBehaviour {
private Timer time;
void Start ()
{
time = new Timer(60);
time.StartTimer();
}
void Update()
{
time.UpdateTimer(Time.deltaTime);
}
private void OnGUI()
{
GUI.Label(new Rect(10, Screen.height - 50, 200, 50), "倒计时:")
GUI.Label(new Rect(75, Screen.height - 50, 200, 50), (time._endTime - time._currentTime).ToString(), score_style);
}
}
unity3d学习笔记(一) 第一人称视角实现和倒计时实现的更多相关文章
- 如何使用threejs实现第一人称视角的移动
在数据可视化领域利用webgl来创建三维场景或VR已经越来越普遍,各种开发框架也应运而生.今天我们就通过最基本的threejs来完成第一人称视角的场景巡检功能.如果你是一位threejs的初学者或正打 ...
- Stealth视频教程学习笔记(第一章)
Stealth视频教程学习笔记(第一章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- Unity3D学习笔记3——Unity Shader的初步使用
目录 1. 概述 2. 详论 2.1. 创建材质 2.2. 着色器 2.2.1. 名称 2.2.2. 属性 2.2.3. SubShader 2.2.3.1. 标签(Tags) 2.2.3.2. 渲染 ...
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
- D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
说起第一人称射击游戏,不得不提第一人称视角啊,没有这个,那么这个第一就无从谈起啊,我作为一个观察者究竟如何在这个地图上顺利的移动和观察呢,那么,我们一起来研究下. 我们首先来看下CDXCamera类: ...
- Unity3D学习笔记——选择Enemy
一.步骤: 1.创建三个Cube,并将这三个Cube的Cube的Tag设为Enemy 2.导入第一人称视角的资源 3.创建名为Targeting的C#脚本 4.编写Targeting脚本,并将它附到第 ...
- ThingJS平台制作第一人称视角下的巡更效果
今天想要做一个类似巡更的过程,就像是在学校保安巡更,小区保安巡更一样.巡更需要用到相应的场景,比如说:园区.学校.超市以及工厂等等,然后需要规划好路线也就是巡更的路线,并且视角要跟随路线来变换,从而达 ...
- unity中自制模拟第一人称视角
public float sensitivityX = 5f; public float sensitivityY = 5f; public float sensitivetyKeyBoard = 0 ...
- Unity3D学习笔记(九):摄像机
3D数学复习 using System.Collections; using System.Collections.Generic; using UnityEngine; public class w ...
随机推荐
- Go Pentester - TCP Proxy
Building a TCP Proxy Using io.Reader and io.Writer Essentially all input/output(I/O). package main i ...
- 图灵学院笔记-java虚拟机底层原理
Table of Contents generated with DocToc 一.java虚拟机概述 二.栈内存解析 2.1 概述 2.2 栈帧内部结构 2.2.1 我们来解析一下compute() ...
- Element 季度选择器+导入
苦恼于element没有季度选择器,网上搜罗后整理实现,以便后期开发使用 同文件夹下新建一个vue界面,命名为Quarter.vue <template> <el-form> ...
- 使样式只在webkit内核生效
@media screen and (-webkit-min-device-pixel-ratio:0){ .do someting{ } } 使用媒体查询,制定样式
- 一个文本框的andriod教程
https://blog.csdn.net/androidmsky/article/details/49870823
- Python定义一个函数
Python函数:实现某种功能的代码段 定义一个函数需要遵循的规则: 1.使用 def 关键字 函数名和( ),括号内可以有形参 匿名函数使用 lambda 关键字定义 2.任何传入参数和自变量必须放 ...
- 4.24 省选模拟赛 欧珀瑞特 主席树 可持久化trie树
很容易的一道题目.大概.不过我空间计算失误MLE了 我草草的计算了一下没想到GG了. 关键的是 我学了一个dalao的空间回收的方法 但是弄巧成拙了. 题目没有明确指出 在任意时刻数组长度为有限制什么 ...
- Python实现微信读书辅助工具
[TOC] ##项目来源 这个有意思的项目是我从GitHub上找来的,起因是在不久前微信读书突然就设置了非会员书架数目上限,我总想做点什么来表达我的不满,想到可否用爬虫来获取某一本书的内容, 但是我技 ...
- Maven打包方式
转自:https://blog.csdn.net/qq_26597927/article/details/80170073 Maven打包三种方法(推荐第三种) 2018年05月02日 18:30:2 ...
- Springboot使用JdbcTemplate的使用
在spring-boot-starter-jdbc这个依赖包中一共分成四个部分. core,JdbcTemplate等相关核心接口和类 datasource,数据源相关的辅助类 object,将基本的 ...