一.Awake和Start

using UnityEngine;
using System.Collections;public class AwakeAndStart : MonoBehaviour
{void Awake (){Debug.Log("Awake called.");}void Start (){Debug.Log("Start called.");}
}

在对象本身激活的情况下,如果脚本处于未激活状态,进入游戏时,依然会调用Awake,输出“Awake called.”语句。

在对象本身激活的情况下,只有在脚本激活的状态下,进入游戏时,才会调用Start,输出"Start called."语句。

若对象未激活,两者都不会调用。

二.矢量数学

Vector3.Magnitude用于计算向量长度

Vector3.Cross(Vector A,Vector B);用于计算两个向量的叉积,此方法可以用于寻找垂直于向量A,B的向量C,从而确定转轴。

三.启用和禁用组件

主要通过:组件.enabled = false(true)来禁用(启用)组件,在此之前要先通过GetComponent获取组件。

using UnityEngine;
using System.Collections;public class EnableComponents : MonoBehaviour
{private Light myLight;void Start (){myLight = GetComponent<Light>();}void Update (){if(Input.GetKeyUp(KeyCode.Space)){//此句代码可以实现类似开关功能//将组件设为非当前值myLight.enabled = !myLight.enabled;}}
}

四.激活游戏对象

using UnityEngine;
using System.Collections;public class ActiveObjects : MonoBehaviour
{void Start (){gameObject.SetActive(false);}
}

五.Transform 和Rotate

using UnityEngine;
using System.Collections;public class TransformFunctions : MonoBehaviour
{public float moveSpeed = 10f;public float turnSpeed = 50f;void Update (){//改变物体的z轴,使其向前移动if(Input.GetKey(KeyCode.UpArrow))transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);//改变物体的z轴,使其向后移动if(Input.GetKey(KeyCode.DownArrow))transform.Translate(-Vector3.forward * moveSpeed * Time.deltaTime);//改变物体的x轴,使其向左转动if(Input.GetKey(KeyCode.LeftArrow))transform.Rotate(Vector3.up, -turnSpeed * Time.deltaTime);//改变物体的x轴,使其向右转动if(Input.GetKey(KeyCode.RightArrow))transform.Rotate(Vector3.up, turnSpeed * Time.deltaTime);}
}

注:

Vector3.up=(0,1,0);

Vector3.forward=(0,0,1);

Vector3.right=(1,0,0);//这三个值始终不变,可以理解为常量

六.Look At

此方法可以使相机跟随目标物体移动

using UnityEngine;
using System.Collections;public class CameraLookAt : MonoBehaviour
{public Transform target;void Update (){transform.LookAt(target);}
}

七.线性插值

// 在此示例中,result = 4
float result = Mathf.Lerp (3f, 5f, 0.5f);

在制作游戏时,可能需要在两个值之间进行线性插值,这时可以通过Lerp函数来完成。线性插值会在给定的两个值之间找到某个百分比的值。

Math.Lerp函数接收三个float参数:Mathf.Lerp (float1,float2,float3);

float1表示要进行插值的起始值,float2表示插值的结束值。

float3表示要进行插值的距离,如果为0,则返回float1的值,如果为1,则返回float2的值。

在某些情况下,可使用Lerp函数使值随时间平滑:

经过几帧过后,光强度将会趋近于8,但随着接近目标,其变化速率将减慢

void Update ()
{light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f);
}

如果不希望光强每帧改变,而是按秒改变,则可使用以下代码:

void Update ()
{light.intensity = Mathf.Lerp(light.intensity, 8f, 0.5f * Time.deltaTime);
}

八.Destroy

Destroy函数可以用来摧毁物体本身,也可以用来摧毁物体上的组件:

using UnityEngine;
using System.Collections;public class DestroyBasic : MonoBehaviour
{void Update (){if(Input.GetKey(KeyCode.Space)){Destroy(gameObject);}}
}
using UnityEngine;
using System.Collections;public class DestroyOther : MonoBehaviour
{public GameObject other;void Update (){if(Input.GetKey(KeyCode.Space)){Destroy(other);}}
}
using UnityEngine;
using System.Collections;public class DestroyComponent : MonoBehaviour
{void Update (){if(Input.GetKey(KeyCode.Space)){Destroy(GetComponent<MeshRenderer>());}}
}

九.GetButton和GetKey

GetKey方法需要使用KeyCode.固定键位进行操作,而GetButton方法可以通过Input Manager自定义操作键位及键位引用名称,所以更推荐使用GetButton。

以下着重介绍GetButton方法:

GetButtonDown:只有按下Button的第一帧返回true,其他时间都返回false。

GetButton:只要Button处于按下的状态,就一直返回true,直至松开按钮。

GetButtonUp:只有松开Button的第一帧返回true,其他时间都返回false。

GetKey的情况与GetButton相同。

十.GetAxis

GetAxis("Horizontal");//对应键盘上的A键和D键 或←键和→键

GetAxis("Vertical"); //对应键盘上的W键和S键 或↑键和↓键

GetAxis("Mouse X"); //对应X方向上鼠标的移动

GetAxis("Mouse Y"); //对应Y方向上鼠标的移动

十一.OnMouseDown

检测碰撞体或GUI元素上的鼠标点击

using UnityEngine;
using System.Collections;public class MouseClick : MonoBehaviour
{void OnMouseDown (){rigidbody.AddForce(-transform.forward * 500f);rigidbody.useGravity = true;}
}

十二.DeltaTime

游戏中每一帧所花费的时间可能不同,当帧率改变时,游戏中物体的移动会变得忽快忽慢,此时可以将原来的移动数值用Time.DeltaTime修正,,这样即使帧率变化,物体速度也会保持恒定。

using UnityEngine;
using System.Collections;public class UsingDeltaTime : MonoBehaviour
{public float speed = 8f; void Update (){if(Input.GetKey(KeyCode.RightArrow))transform.position += new Vector3(speed * Time.deltaTime, 0.0f, 0.0f);}
}

十三.数据类型

(1)数值类型(Value)

包括:int, float, double, bool, char, Structs(Vector3, Quaternion).

(2)引用类型(Reference)

包括:Classes(Transform, GameObject).

using UnityEngine;
using System.Collections;public class DatatypeScript : MonoBehaviour
{void Start () {//值类型变量,transform.position不会改变Vector3 pos = transform.position;pos = new Vector3(0, 2, 0);//引用类型变量,transform会改变Transform tran = transform;tran.position = new Vector3(0, 2, 0);}
}

十四.类

脚本的名称与类名是一致的,若要更改脚本名称,则类名也需一起更改。

使用类将不同功能的代码模块区分开,提高代码的可读性

using UnityEngine;
using System.Collections;public class SingleCharacterScript : MonoBehaviour
{public class Stuff{public int bullets;public int grenades;public int rockets;//构造函数public Stuff(int bul, int gre, int roc){bullets = bul;grenades = gre;rockets = roc;}}public Stuff myStuff = new Stuff(10, 7, 25);public float speed;public float turnSpeed;public Rigidbody bulletPrefab;public Transform firePosition;public float bulletSpeed;void Update (){Movement();Shoot();}void Movement (){float forwardMovement = Input.GetAxis("Vertical") * speed * Time.deltaTime;float turnMovement = Input.GetAxis("Horizontal") * turnSpeed * Time.deltaTime;transform.Translate(Vector3.forward * forwardMovement);transform.Rotate(Vector3.up * turnMovement);}void Shoot (){if(Input.GetButtonDown("Fire1") && myStuff.bullets > 0){Rigidbody bulletInstance = Instantiate(bulletPrefab, firePosition.position, firePosition.rotation) as Rigidbody;bulletInstance.AddForce(firePosition.forward * bulletSpeed);myStuff.bullets--;}}
}
using UnityEngine;
using System.Collections;public class Inventory : MonoBehaviour
{public class Stuff{public int bullets;public int grenades;public int rockets;public float fuel;public Stuff(int bul, int gre, int roc){bullets = bul;grenades = gre;rockets = roc;}public Stuff(int bul, float fu){bullets = bul;fuel = fu;}// 构造函数public Stuff (){bullets = 1;grenades = 1;rockets = 1;}}// 创建 Stuff 类的实例(对象)public Stuff myStuff = new Stuff(50, 5, 5);public Stuff myOtherStuff = new Stuff(50, 1.5f);void Start(){Debug.Log(myStuff.bullets); }
}

十五.Instantiate

using UnityEngine;
using System.Collections;public class UsingInstantiate : MonoBehaviour
{public Rigidbody rocketPrefab;public Transform barrelEnd;void Update (){if(Input.GetButtonDown("Fire1")){Rigidbody rocketInstance;//克隆预制体后,将类型强行转换为Rigidbody,以便实现后续操作。rocketInstance = Instantiate(rocketPrefab, barrelEnd.position, barrelEnd.rotation) as Rigidbody;rocketInstance.AddForce(barrelEnd.forward * 5000);}}
}

使用Instantiate来创建预制体的克隆体,但是产生的克隆体并不会消失,需要一个额外的脚本来处理产生后的克隆体,在一定的时间内,销毁克隆体。

using UnityEngine;
using System.Collections;public class RocketDestruction : MonoBehaviour
{void Start(){Destroy (gameObject, 1.5f);}
}

十六·.Invoke

使用Invoke函数在规定的时间过后调用指定函数

using UnityEngine;
using System.Collections;public class InvokeScript : MonoBehaviour
{public GameObject target;void Start(){Invoke ("SpawnObject", 2);}void SpawnObject(){Instantiate(target, new Vector3(0, 2, 0), Quaternion.identity);}
}

使用InvokeRepeating函数,规定函数调用的时间间隔

using UnityEngine;
using System.Collections;public class InvokeRepeating : MonoBehaviour
{public GameObject target;void Start(){InvokeRepeating("SpawnObject", 2, 1);}void SpawnObject(){float x = Random.Range(-2.0f, 2.0f);float z = Random.Range(-2.0f, 2.0f);Instantiate(target, new Vector3(x, 2, z), Quaternion.identity);}
}

若要暂停InvokeRepeating方法,可以使用CancelInvoke("函数名")。

Unity编程-初级篇相关推荐

  1. 《Unity Shader入门精要》笔记:初级篇(2)

    本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载. 本篇博客会补充一些扩展内容(例如其他博客链接). 本篇博客还会提供一些边读边做的效果截图.文章内所有数学 ...

  2. 《Unity Shader入门精要》笔记:初级篇(1)

    本篇博客主要为个人学习所编写读书笔记,不用于任何商业用途,以及不允许任何人以任何形式进行转载. 本篇博客会补充一些扩展内容(例如其他博客链接). 本篇博客还会提供一些边读边做的效果截图.文章内所有数学 ...

  3. 在Eclipse中使用JUnit4进行单元测试(初级篇)

    转载自   在Eclipse中使用JUnit4进行单元测试(初级篇) 本文绝大部分内容引自这篇文章: http://www.devx.com/Java/Article/31983/0/page/1 我 ...

  4. AIDE手机编程初级教程(零基础向) 1.2 初识界面编程

    第一章 第一个应用 系列教程导航 1.2 初识界面编程 文章目录 为什么 讲解 后记 为什么 对于一个Android应用来说,一个好看的界面是非常重要的.在上一篇文章,你已经学会了自定义我们的第一个应 ...

  5. 【Unity编程】四元数(Quaternion)与欧拉角

    欧拉旋转.四元数.矩阵旋转之间的差异 除了欧拉旋转以外,还有两种表示旋转的方式:矩阵旋转和四元数旋转.接下来我们比较它们的优缺点. 欧拉角 优点:三个角度组成,直观,容易理解. 优点:可以进行从一个方 ...

  6. cytoscape.js初级篇

    cytoscape.js初级篇 系列文章 前言 cytoscape依赖引用 cytoscape扩展依赖引用 创建Cytoscape组件 创建Cytoscape模板容器 创建Cytoscape实例对象 ...

  7. GNU Radio系列教程(三):初级篇之GNU Radio GRC流图

    本文的目标: (1)使用GNU Radio的标准模块来创建流图GRC程序 (2)学习如何在GRC的模块之间调试.解决问题 (3)理解GRC中的采样模块和限流模块的作用 (4)学习如何使用GNU Rad ...

  8. 视频教程-微信小程序开发【初级篇 / 附案例】-微信开发

    微信小程序开发[初级篇 / 附案例] 北风网讲师!瓢城Web俱乐部创始人,教学总监! 李炎恢 ¥129.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程, ...

  9. unity怪物攻击玩家减血_像素地牢开发(unity) 第一篇(并不是第一天)

    像素地牢开发(unity) 第一篇(并不是第一天) 大二的时候就特别想制作独立游戏,每次逛b站刷到独立游戏制作的视频就十分羡慕,然鹅我却一直鸽着(别问,问就是刷视频,打王者),但我还是利用了一些空闲时 ...

  10. Java工程师学习指南(初级篇)

    Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

最新文章

  1. ffmpeg 压缩视频
  2. 野生前端的数据结构练习(12)贪心算法
  3. PAT甲级1130 Infix Expression:[C++题解]中缀表达式、二叉树中序遍历、dfs
  4. 在Tableau中去除选择高亮效果
  5. tensorflow随笔-保存与读取使用模型
  6. 三角函数常用公式一篇汇
  7. Hive group by后面不能用列别名
  8. 读书笔记之语法语料库和语义知识库
  9. std::vector 初始化的问题 reserve resize
  10. 中国企业考勤软件市场趋势报告、技术动态创新及市场预测
  11. WIN10_用户获取最高的管理员权限(关闭UAC控制)
  12. 城市与城乡规划用地分类和色块标准|CSV|C#程序|Excel
  13. SICP 练习1.8
  14. 【一生一芯】Chap.0 IC常用网站论坛门户 如何提出一个技术问题 并尝试解决 | 提问的智慧
  15. 面试系列-1 大厂面试幂等性
  16. 李群SE(3)即欧式变换Euclidean transformation(刚性变换Rigid Transformation)
  17. 【数据集】Kinetics-600 dataset介绍
  18. 损失函数-负对数似然和交叉熵(Pytorch中的应用)
  19. vue拿到某个节点的属性_vue实现将某个dom元素或组件挂载到根节点
  20. 让字体变的更清晰CSS 中 -webkit-font-smoothing

热门文章

  1. 我的msn的博客 欢迎大家点击
  2. Flutter(十七) 实现国际化
  3. android 手机内存分配,【扫盲贴』关于android手机中RAM(也就是 运行内存)的分配...
  4. 控制台版单机双人五子棋游戏(Java版)---新人小白
  5. Sulfo CY5-MAL|磺基-CY5 马来酰亚胺
  6. 阿里云ace考试内容是什么?
  7. CTF之Bugku网站被黑
  8. 摄影测量后方交会算法C#实现
  9. 一个外国程序员中的中国程序员
  10. 第22节项目6-定期存款利息计算器