盯着看:盯住一个点
transform.LookAt(Vector3 worldPosition);
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LookGirl : MonoBehaviour {
GameObject girl;
// Use this for initialization
void Start () {
girl = GameObject.Find("Girl");
} // Update is called once per frame
void Update () {
//盯着看:盯住一个点
transform.LookAt(girl.transform.position);
//环绕旋转:point点,axis轴,angle每帧旋转角度
transform.RotateAround(girl.transform.position,Vector3.up,);
}
}
 
环绕旋转:point点,axis轴,angle每帧旋转角度
transform.RotateAround(Vector3 point, Vector3 axis, float angle);
显示在检视面板的任何属性,可以直接修改。即使脚本变量也可以改变,而无需修改脚本本身。你可以在检视面板运行时修改变量,进行试验调试你的游戏。在脚本中,如果你定义了一个公共变量的对象类型(如游戏物体或变换),你可以拖动一个游戏物体或预制到检视面板对应的槽。
公转
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//可以在检视面板暴露枚举
public enum Sex
{
Man,
Woman
}
public class TurnPublic : MonoBehaviour {
//在检视面板暴露一个对象变量,让游戏物体可以拖拽赋值
public GameObject target;
//在检视面板暴露Transform组件
public Transform trans;
//检视面板可以暴露以下
public int level;
public float health;
public string path;
public bool canMove;
public Sex sex;
public int[] array;
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
transform.RotateAround(target.transform.position, target.transform.up, );
}
}

自转

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TurnSelf : MonoBehaviour {
// Use this for initialization
void Start () { } // Update is called once per frame
void Update () {
transform.Rotate(transform.up);
}
}
监听鼠标和键盘的按下事件
bool:Input.GetKey(KeyCode KeyCode)
bool:Input.GetMouseButtonDown(int index)
轴值
Size:添加元素
Horizontal:水平轴
Vertical:垂直轴
Mouse X:鼠标水平位移的轴值映射
Mouse Y:鼠标垂直位移的轴值映射
Mouse ScrollWheel:鼠标滚轮的轴值映射
Time时间类,
Time.deltaTime:代表每一帧所消耗的时间,平移的过程中让速度和此量相乘,就从每帧多少米变成每秒多少米。(两帧之间的间隔)
Time.time:代表着从游戏一开始运行到当前时间点所经过的总时长,是从Time.deltaTime累加上来的。
Time.fixedDeltaTime:每一物理帧所消耗的时间。
Time.timeScale:时间缩放,可以影响Time.deltaTime,FixedUpdate,fixedTime。如果写在Update里的代码想要和时间缩放挂钩,就和Time.timeScale发生关系。(可以用作游戏暂停)
Time.fixedTime:累加Time.deltaTime并乘以时间缩放,时间缩放为0,则值为0。
 
Mathf是数学的结构体,其方法均为静态
Deg2Rad:角度转弧度(2是to的意思)* PI /
Rad2Deg:弧度转角度
Abs:绝对值
sin:正弦,Sin(/)=30度
cos:余弦
tan:正切
Asin:反正弦,Sin(/)=60度
Acos:反余弦
Atan:反正切
Ceil:向上取整数
Floor:向下取整数
Clamp:限值,Clamp(,),输入5.,返回5,(可以把坐标限值在一定范围内,防止越界)
Clamp01:
Lerp:线性插值
log:取对数
Movetowards:是插值的一种
Pow(float f , float p):f的p次方
Sqrt:开平方
PI:3.1415926
Max:最大值
Min:最小值
三角函数曲线
三角函数分镜
:9等比缩放
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InputTest : MonoBehaviour
{
//拖拽资源文件夹里的
public Texture image;
int sum;
int curNum;
float h;
float v;
float mouse_h;
float mouse_v;
public float m_JumpSpeed = 400f;
private bool m_jumping = false;
private Rigidbody m_Rigidbody;
private Animator m_Anim;
private void Awake()
{
m_Anim = GetComponent<Animator>();
m_Rigidbody = GetComponent<Rigidbody>();
}
private bool jumped = true;
// Use this for initialization
void Start()
{ }
// Update is called once per frame
void Update()
{
//实时监听
//GetKey按住,GetKey.Down按下,GetKey.Up抬起,KeyCode键盘按键的枚举项
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back);
}
if (Input.GetKey(KeyCode.A))
{
transform.Rotate(Vector3.down);
}
if (Input.GetKey(KeyCode.D))
{
transform.Rotate(Vector3.up);
}
if (Input.GetMouseButtonDown())
{
Debug.Log("FUCK");
}
//轴值映射
//GetAxis获取轴值,显示轴值的变化(-1~1)
//水平:Horizontal
//垂直:Vertical
h = Input.GetAxis("Horizontal");
v = Input.GetAxis("Vertical");
//按帧移动,和电脑性能有关,帧速快的电脑,移动速快
transform.Translate(Vector3.forward * 0.1f * v);
transform.Rotate(Vector3.down * 1.0f * h);
if (transform.position.z <- || transform.position.z > )
{
transform.position += new Vector3(, , Mathf.Clamp(transform.position.z, -, ));
}
else
{
transform.Translate(Vector3.forward * 0.1f * v);
}
//鼠标有灵活度,根据快慢分等级,显示轴值的变化不是固定的
mouse_h = Input.GetAxis("Mouse X");
mouse_v = Input.GetAxis("Mouse Y");
//按秒移动,和电脑性能无关,把每帧多少米变成每秒多少米
//Time.deltaTime每帧刷新所需要的时间
//Time.time是Time.deltaTime的累加(从游戏开始到现在,大致经过的时间),
//Time.fixedDeltaTime是每一物理帧的时间间隔,固定值0.02s
transform.Translate(Vector3.forward * 0.1f * v);
transform.Rotate(Vector3.down * 1.0f * h);
//每秒走的路程 = 每帧走1米(速度) * 每帧消耗的时间1/60秒(时间)
transform.Translate(Vector3.forward * Time.deltaTime);
//用Mathf.Clamp函数限值坐标的取值范围
Clamp(float value, float min, float max);
Mathf.Clamp(transform.position.x, -, );
Mathf.Clamp(transform.position.z, -, );
#region 限值物体移动范围
#endregion
}
} //OnGUI商业已不用,现主要用于调试
void OnGUI()
{
//两种方式:自定义布局方式,自动排版方式
//自动排版方式
if (curNum <= )
{
sum += curNum;
curNum++;
}
GUILayout.Label("当前和:" + sum);
GUILayout.Button("FUCK");
GUILayout.Box(image);
GUILayout.Label("Horizontal:" + h);
GUILayout.Label("Vertical:" + v);
//GUILayout.Label("Mouse X:" + mouse_h);
//GUILayout.Label("Mouse Y:" + mouse_v);
GUILayout.Label("Time.deltaTime:" + Time.deltaTime);
GUILayout.Label("Time.time:" + Time.time);
GUILayout.Label("Time.fixedDeltaTime:" + Time.fixedDeltaTime);
if (GUILayout.Button("FUCK"))
{
//timeScale是时间缩放,时间变慢了1倍(变成原来的0.5倍),只能缩放Time.deltaTime
Time.timeScale = 0.5f;
}
}

复习

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// MonoBehaviour -> Behaviour -> Component -> Object
public class W05d4 : MonoBehaviour
{
public GameObject obj; // Cube
// Use this for initialization
void Start()
{
// 如何获取组件
// Component -> GetComponent
Camera cam = GetComponent<Camera>();
if (cam != null)
{
cam.depth = ;
}
// 如何添加组件
GameObject->AddComponent
// 先寻找Cube
Move cubeMove = obj.AddComponent<Move>(); // 返回值:添加的那个组件的对象引用
cubeMove.moveSpeed = 0.1f;
// 删除组件
// UnityEngine.Object -> Destroy
GameObject findObj = GameObject.Find("Player");
if (findObj != null)
{
// 把移动速度变成0.5
// 1 获取Move组件
Move cubeMove = findObj.GetComponent<Move>();
if (cubeMove != null)
{
// 2 改Move组件的变量
cubeMove.moveSpeed = 0.5f;
}
}
GameObject findObj = GameObject.Find("Player/Capsule/FirePos");
if (findObj) // findObj != null
{
Light light = findObj.AddComponent<Light>();
light.type = LightType.Spot;
}
}
// Update is called once per frame
void Update()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerControl : MonoBehaviour
{
public Texture texture;
float h;
float v;
float hRaw;
float vRaw;
float mouseH;
float mouseV;
float mouseScrollWheel;
public float moveSpeed = 0.1f;
public float rotSpeed = 1f;
// Use this for initialization
void Start()
{
}
void Update()
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime * Input.GetAxisRaw("Vertical"));
transform.Rotate(Vector3.up * rotSpeed * Time.deltaTime * Input.GetAxisRaw("Horizontal"));
}
// Update is called once per frame
void Update1()
{
// 按键输入
// 1、键盘的 键值
if (Input.GetKey(KeyCode.A)) // 按着A的时候 每帧都会检测到
{
}
if (Input.GetKeyDown(KeyCode.A)) // 按下A的那一帧 会检测到
{
}
if (Input.GetKeyUp(KeyCode.A)) // 抬起A的那一帧 会检测到
{
}
// 2、 轴值
// 按A、D 或者 方向键左、方向键右的时候会返回一个float值, 如果不按会返回0
// 会有一个渐变的过程 假设我按了A 这时返回值会从 0 逐渐变化到 -1
// D 0 1
// 受时间缩放影响的
h = Input.GetAxis("Horizontal");
v = Input.GetAxis("Vertical");
//不受时间缩放的影响
mouseH = Input.GetAxis("Mouse X");
mouseV = Input.GetAxis("Mouse Y");
mouseScrollWheel = Input.GetAxis("Mouse ScrollWheel");
//没有渐变的过程 按下A hRaw 变成了-1 按下D hRaw 变成了 1
hRaw = Input.GetAxisRaw("Horizontal");
vRaw = Input.GetAxisRaw("Vertical");
// 3、 功能键
if (Input.GetButtonDown("Jump"))
{
Debug.Log("功能键 Jump 被按下");
}
// 鼠标输入
// 0 左键 1 右键 2 中键
if (Input.GetMouseButtonDown())
{
Debug.Log("鼠标左键 被按下");
}
}
private void OnGUI()
{
GUI.Label(new Rect(, , , ), "Hello World");
if (GUI.Button(new Rect(, , , ), "Button"))
{
GameObject target = GameObject.Find("Target1");
if(target)
{
transform.LookAt(target.transform);
}
GameObject target2 = GameObject.Find("Target2");
if(target2)
{
target2.transform.LookAt(transform);
}
}
if(GUI.Button(new Rect(, , , ), texture))
{
}
GUI.Label(new Rect(, , , ), "Width :" + Screen.width);
GUI.Label(new Rect(, , , ), "Height :" + Screen.height);
//GUI.DrawTexture(new Rect(10, 10, 80, 80), texture);
//GUILayout.Label("H : " + h);
//GUILayout.Label("mouseH : " + mouseH);
//GUILayout.Label("mouseV : " + mouseV);
//GUILayout.Label("mouseScrollWheel : " + mouseScrollWheel);
//GUILayout.Label("hRaw : " + hRaw);
//GUILayout.Label("vRaw : " + vRaw);
//if (GUILayout.Button("TimeScale" + Time.timeScale))
//{
// Time.timeScale = 1 - Time.timeScale;
//}
}
}

练习题

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Question : MonoBehaviour
{
public GameObject objA;
public GameObject objB;
public const float TimeInterval = 0.5f; // 冷却时间
public float timeCount = ;
public float currentTime = ; // 记录当前的Time.time
#region Q1_如何注视
// 1、游戏物体A 注视 游戏物体B
// 2、当前脚本挂载的游戏物体 注视 游戏物体A
#endregion
#region Q2_如何围绕旋转
// 1、游戏物体A 围绕 游戏物体B 绕世界坐标系的 Y轴 旋转 --每秒旋转60度
// 2、游戏物体A 围绕 游戏物体B 的 Y轴 旋转
#endregion
#region Q3_响应键盘按键事件
// 操控 当前挂载脚本的 游戏物体
// 1、按下 数字键0 发射子弹(伪代码替代)
// 2、按下 空格键 跳跃(伪代码替代)
// 3、按下 W、S键 前后移动
// 4、使用轴值的方式控制物体 绕世界的Y轴 旋转
// 5、使用轴值的方式控制物体 绕自身的Y轴 旋转
// 6、使用鼠标的XY轴值控制物体的 俯仰角(绕X轴旋转的角度)、偏航角(绕Y轴旋转的角度) //注: 俯仰角、偏航角、滚转角 --欧拉角/姿态角
// 7、按下鼠标左键 发射子弹(伪代码替代)
// 8、通过鼠标滚轮 实现物体 前后移动(自身坐标系)
#endregion
#region Q4_Time类 OnGUI
// 1、按下鼠标右键可以发射子弹,子弹的发射间隔为 0.5秒
// 2、使用自动布局的方式绘制按钮,按钮被按下以后,可以暂停游戏
#endregion
#region Q5_Mathf类
// 1、求绝对值
// 2、开方
// 3、如何限制一个变量的取值范围
// 4、向上、向下取整
// 5、正弦、余弦函数
#endregion
void Start()
{
currentTime = Time.time;
}
void Update()
{
#region Q1_如何注视_Answer
// 1、游戏物体A 注视 游戏物体B
objA.transform.LookAt(objB.transform);
// 2、当前脚本挂载的游戏物体 注视 游戏物体A
transform.LookAt(objA.transform);
#endregion
#region Q2_如何围绕旋转_Answer
// 1、游戏物体A 围绕 游戏物体B 绕世界坐标系的 Y轴 旋转 每秒旋转60度
objA.transform.RotateAround(objB.transform.position, Vector3.up, * Time.deltaTime);
// 2、游戏物体A 围绕 游戏物体B 的 Y轴 旋转
// objB.transform.up 物体自身的Y轴 在世界坐标系中的 向量
objA.transform.RotateAround(objB.transform.position, objB.transform.up, * Time.deltaTime);
#endregion
#region Q3_响应键盘按键事件_Answer
// 1、按下 数字键0 发射子弹(伪代码替代)
if (Input.GetKeyDown(KeyCode.Alpha0))
{
// 发射子弹
}
// 2、按下 空格键 跳跃(伪代码替代)
if (Input.GetKeyDown(KeyCode.Space))
{
// 跳跃
}
// 3、按下 W、S键 前后移动
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * * Time.deltaTime, Space.Self); // 往自身的前方
transform.Translate(transform.forward * * Time.deltaTime, Space.World); // 往自身的前方
transform.Translate(Vector3.forward * * Time.deltaTime, Space.World); // 往世界的前方
}
else if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back * * Time.deltaTime);
}
// 4、使用轴值的方式控制物体 绕世界的Y轴 旋转
float h = Input.GetAxis("Horizontal");
transform.Rotate(Vector3.up * * Time.deltaTime * h, Space.World); // 世界
// 5、使用轴值的方式控制物体 绕自身的Y轴 旋转
transform.Rotate(Vector3.up * * Time.deltaTime * h, Space.Self); // 自身 第2个参数不指定,默认 Space.Self
// 6、使用鼠标的XY轴值控制物体的 俯仰角(绕X轴旋转的角度)、偏航角(绕Y轴旋转的角度) //注: 俯仰角、偏航角、滚转角 --欧拉角/姿态角
float mouseX = Input.GetAxis("Mouse X"); // 偏航角
float mouseY = Input.GetAxis("Mouse Y");
Vector3 eu = transform.eulerAngles;
eu.y += mouseX;
eu.x += mouseY;
transform.eulerAngles = eu;
// 7、按下鼠标左键 发射子弹(伪代码替代)
if (Input.GetMouseButtonDown())
{
// 发射子弹
}
// 8、通过鼠标滚轮 实现物体 前后移动(自身坐标系)
float msw = Input.GetAxis("Mouse ScrollWheel");
transform.Translate(Vector3.forward * * Time.deltaTime * msw);
#endregion
#region Q4_Time类 OnGUI_Answer
// 1、按下鼠标右键可以发射子弹(伪代码),子弹的发射间隔为 0.5秒
timeCount += Time.deltaTime;
if (timeCount >= TimeInterval)
{
if (Input.GetMouseButtonDown())
{
// 发射子弹
// 重置时间
timeCount = ;
}
}
if (Time.time - currentTime >= TimeInterval)
{
// 发射子弹
if (Input.GetMouseButtonDown())
{
// 发射子弹
// 重置时间
currentTime = Time.time;
}
}
// 2、使用自动布局的方式绘制按钮,按钮被按下以后,可以暂停游戏
#endregion
#region Q5_Mathf类_Answer
// 1、求绝对值
float num1 = -10.2f;
//num1 = Mathf.Abs(num1);
// 2、开方
//num1 = Mathf.Sqrt(num1);
// 3、如何限制一个变量的取值范围
num1 = Mathf.Clamp(num1, , );
// 4、向上、向下取整
num1 = Mathf.Ceil(num1); // 向上取整 -10
num1 = Mathf.Floor(num1); // 向下取整 -11
// 5、正弦、余弦函数
num1 = Mathf.Sin(num1);
num1 = Mathf.Cos(num1);
#endregion
}
private void OnGUI()
{
// 2、使用自动布局的方式绘制按钮,按钮被按下以后,可以暂停游戏
if (GUILayout.Button("暂停游戏"))
{
Time.timeScale = ;
}
}
}

Unity3D学习笔记(三):V3、运动、帧率、OnGUI的更多相关文章

  1. unity3d学习笔记(一) 第一人称视角实现和倒计时实现

    unity3d学习笔记(一) 第一人称视角实现和倒计时实现 1. 第一人称视角 (1)让mainCamera和player(视角对象)同步在一起 因为我们的player是生成的,所以不能把mainCa ...

  2. Unity3D学习笔记2——绘制一个带纹理的面

    目录 1. 概述 2. 详论 2.1. 网格(Mesh) 2.1.1. 顶点 2.1.2. 顶点索引 2.2. 材质(Material) 2.2.1. 创建材质 2.2.2. 使用材质 2.3. 光照 ...

  3. 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. 渲染 ...

  4. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  5. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  6. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  7. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  8. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  9. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  10. NumPy学习笔记 三 股票价格

    NumPy学习笔记 三 股票价格 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.&l ...

随机推荐

  1. javaScript高级教程(十) iframe

    1.iframe的基础,深入理解frame是何物,属性该如何设置. iframe即内联框架.不同于frame,frame与frameset综合使用,成为帧,框架集.frame已经不大使用了.说白了,f ...

  2. hashcode()和equals()的作用、区别、联系

        介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode() ...

  3. 实习培训——Servlet(5)

    实习培训——Servlet(5) 1  Servlet 简介 Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HT ...

  4. PAT 1070 Mooncake[一般]

    1070 Mooncake (25)(25 分) Mooncake is a Chinese bakery product traditionally eaten during the Mid-Aut ...

  5. 深入理解python之二——python列表和元组

    从一开始学习python的时候,很多人就听到的是元组和列表差不多,区别就是元组不可以改变,列表可以改变. 从数据结构来说,这两者都应当属于数组,元组属于静态的数组,而列表属于动态数组.稍后再内存的分配 ...

  6. sklearn_SVM

    一.用SVM实现二分类: 支持向量机分类器,是在数据空间中找出一个超平面作为决策边界,利用这个决策边界来对数据进行分类,并使分类误差尽量小的模型                             ...

  7. 关闭WPS启动时显示的在线模板

    关闭WPS启动时显示的在线模板 以WPS2016为例,如下图: 操作步骤如下: ①点击在线模板页面右下方的"设置"选项 ②"设置"界面打开后,选择启动WPS默认 ...

  8. 使用JDBC+POI把Excel中的数据导出到MySQL

    POI是Apache的一套读MS文档的API,用它还是可以比较方便的读取Office文档的.目前支持Word,Excel,PowerPoint生成的文档,还有Visio和Publisher的. htt ...

  9. 课堂练习Complex类

    Complex类 #include<iostream> #include<cmath> using namespace std; class Complex { public: ...

  10. js数组之可变函数

    在js的数组中有两个方法为数组添加元素:1.push();2.unshift(),push函数是将元素添加到数组的末尾,现在不用说大家估计也能猜出来,unshift这个函数就是把元素添加到数组的开头的 ...