First Acquaintanced Unity
1.导入资源到unity中
2.x轴:左右 y轴:上下 z轴:前后
3.ctrl+d复制
4.顶点吸附:选择物体+v,定位定点,再拖拽目标物体到某个定点上(先松V键)。
5.创建立方体:
(1)创建空物体:GameObject——Create Empty
(2)创建网格过滤器:Component——Mesh——Mesh Filter设置Mesh属性
(3)创建网格渲染器:Component——Mesh——MeshRendener
(4)设置材质Material属性
6.可利用unity创建物体出现的位置进行物体融合。
7.可将多个物体打总,后操作父物体进行总体操作。
12.物理着色器
15.Viewport Rect——设置摄像机的大小属性,从而设计小地图、后视镜类的视图
前提条件:depth要大于main camera,同时若两者相同则谁的最后修改谁在上面。
2D地图效果更好
16.ctrl+shift+F将选择物体移动到scene目前所在视角。
17.
1.C#
2.NET dotnet新一代多语言开发平台。
3.Mono支持在其他操作系统下开发.net程序的框架。
4.unity借助Mono实现跨平台。核心是.net framework框架。
console.WriteLine(); //写一行
console.ReadLine(); //读一行
console是类——工具
console.Title=“”; //设置控制台的名称
namespace *** //定义命名空间【类的地址】
变量:
声明:在内存开辟空间
赋值:在该空间中储存数据
string.Format(“枪的名称为:{0},容量为:{1}.”,gunName,ammoCapacity);
标准数字字符串格式化:格式字符
Console.WriteLine(“{0:d2}”,5); //05 不足2位用0填充
Console.WriteLine(“{0:f1}”,1.26); //根据指定精度显示 1.3
Console.WriteLine(“{0:p0}”,0.1) // 以百分数显示 10%
Console.WriteLine(“我爱"Unity!”"); //我爱“unity”
char c=‘\0’ //空字符
\r\n //换行符
\t 制表符
语言在电脑中的编译过程:源代码(.cs的文本文件)——CLS编译——通用中间语言(exe dll)——机器码 0-1
#region —— 折叠代码
将一个字符数字转化为数字:
char c=‘3’; string s1=c.ToString(); int n1=int.Parse(s1);
隐式类型转换:自动转换:由小范围到大范围
byte b3=100; int i3=b3;
**显示类型转换:强制转换:**由大范围到小范围
int i4=100; byte b4=(byte)i4;
转换类型与数值类型所含的字节数有关——byte(1个字节) int(4个字节)
选择、分支、循环语句
产生1-100内的随机数
Random random=new Random(); int number=random.Next(1,101);
与其他语言类似
对应API:
string str.Insert(num,“”); 在num索引处添加“ ”字符
int str.IndexOf(’ '); 返回值为‘ ’ 的索引
string str.Remove()
string str.Replace()
bool str.StartWith()
bool str.Contains()
方法的重载
递归
var定义变量,数据类型由数据自身格式决定:与js语法类似
foreach遍历数组 :for(var i in array)
数组API:
Array.IndexOf(arr,4):返回对应索引值
脚本:附加在物体上用于定义游戏对象行为的指令代码。
unity支持三种高级编程语言:C#、JavaScript、Boo Script
语法结构:
1.脚本语言中的Start()与Update()方法不用就删,因为这两个方法系统自动0.2秒调用一次,参生一个栈针。
2.改变默认脚本初始化代码
3.设置外部编辑器
1.
2…不能在子线程中访问主线程变量,不要在脚本中写构造函数
3.Unity是单线程执行,先做的放Awake,后做的放start
4.按帧移动、按时移动的方法
6.控制台需设置的功能:
7.调试:
120集:
物体向z轴移动10,this引用了transform调动了position属性。
改变物体颜色
this.GetComponent<MeshRenderer>().material.color=Color.red;
121集:Component类提供查找(在当前物体、后代、先辈)组件的功能
**122集:**位置旋转
private void OnGUI()
{
if(GUILayout.Button("按钮"))
{
this.transform.position=new Vector3(0,0,20);
this.GetComponent<MeshRenderer>().material.color=Color.red;
}
if(GUILayout.Button("pos/scale"))
{
//向自身坐标系 z轴移动、旋转1米
//this。transfrom.Translate(0,0,1);
this.transform.Rotate(0,0,1);
//向世界坐标系z轴移动\旋转1米
this.transform.Translate(0,0,1,Space.World);
this.transform.Rotate(0,0,1,Space.World);
//围绕旋转
this.transform.RotateAround(Vector3.zero,Vector3.up,1);
}
}
124集::
Transform类提供了查找(父、根、子)变换组件、改变位置、角度、大小功能
1.寻找子物体的组件
根据名称获取子物体:
Transform childTF=this.transform.Find("子物体的名称") 求多层子物体的格式:子物体的名称/子子物体的名称
根据索引获取子物体:
int count=this.transform.childCount;
for(int i=0;i<count;i++)
{
Transform childTF=this.transform.GetChild(i);
}
练习用递归找不知道层级的子物体:
public class TransformHelper
{///
/// 在层级未知的情况下查找子物体
///
/// 父物体变换组件
/// 子物体名称
public static Transform GetChild(Transform parentTF,string childName)
{
//在子物体中查找
Transform childTF = parentTF.Find(childName);
if (childTF == null) return childTF;
//将问题交给子物体
for (int i = 0; i < parentTF.childCount; i++)
{
childTF = GetChild(parentTF.GetChild(i), childName);
if (childTF != null) return childTF;
}
return null;
}
}
125集:gameObject类
例:添加光源:
if(GUILayout.Button("添加光源"))
{
GameObject lightGO=new GameObject();
Light light=lightGO.AddComponent<Light>();
light.color=Color.red;
light.type=LightType.Point;
}
Object类:
练习:查找血量最低的敌人:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class script : MonoBehaviour
{
private void OnGUI()
{
if (GUILayout.Button("查找血量最低的敌人"))
{
//1.通过标签获取敌人
//GameObject[] allEnemyGO = GameObject.FindGameObjectsWithTag("Enemy");
//Enemy[] allEnemy = new Enemy[allEnemyGO.Length];
//for (int i = 0; i < allEnemyGO.Length; i++)
//{
// allEnemy[i] = allEnemyGO[i].GetComponent();
//}
//2.通过类型获取敌人
Enemy[] allEnemy = FindObjectsOfType<Enemy>();
Enemy min = FindEnemyByMinHP(allEnemy);
min.GetComponent<MeshRenderer>().material.color = Color.red;
}
if (GUILayout.Button("查找距离最近的敌人"))
{
Enemy[] allEnemy = FindObjectsOfType<Enemy>();
Enemy minDistance = FindeEnemyByMinDistance(allEnemy, transform);
minDistance.GetComponent<MeshRenderer>().material.color = Color.red;
}
}
public Enemy FindEnemyByMinHP(Enemy[] enemys)
{
Enemy min = enemys[0];
for (int i = 1; i < enemys.Length; i++)
{
if (min.HP > enemys[i].HP)
min = enemys[i];
}
return min;
}
//练习2:获取最近的敌人
//float distance = Vector3.Distance(物体1.位置,物体2.位置);
public Enemy FindeEnemyByMinDistance(Enemy[] enemys, Transform targetTF)
{
Enemy min = enemys[0];
float minDistance = Vector3.Distance(min.transform.position, targetTF.position);
for (int i = 1; i < enemys.Length; i++)
{
float distance = Vector3.Distance(enemys[i].transform.position, targetTF.position);
if (minDistance > distance)
{
min = enemys[i];
minDistance = distance;
}
}
return min;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float HP;
}
126集:复习Component、Transfrom、gameObject、Object类
127集: