int up; 声明变量
hp=100;赋值
int up; 声明变量
hp=100;赋值
注释快捷键 Ctrl+k Ctrl+c
int hp =100;声明变量
int 数据类型 hp 变量名 100 值
变量用来存储数据
变量名必须以字母或下划线开头
赋值:右边的值给左边变量
Debug.Log 输出
Debug.LogWarning 输出警告
Debug.LogError 错误输出
// 注释
/* */ 多行注释
1.禁用组件
刚体组件没办法禁用,因为刚体组件身上没有勾;
可以禁用碰撞器组件;
BoxCollider collider = GetComponent<BoxCollider>();
collider.enabled = false; //禁用了组件;
组件被禁用后,组件中的方法依然可以被调用,
比如把前面说所的脚本player给禁用了。
先禁用player脚本,在调用里面的方法Start,
注意在其他组件中调用这个函数,必须在它本身的脚本把start这个方法公开;
Player.Start(); //调用player脚本中的方法 ,可以调用脚本中内置的方法,也可以调自定义的方法。注意的是调用的脚本中其他组件被经验了,而那个方法中涉及这个组件,在执行方法时,这个组件是无效的,比如说,在游戏物体的另一个物体中写了一个碰撞的方法,但碰撞器是禁用的,当执行这个碰撞的方法时,不会触发碰撞事件;
2.访问组件里面的属性
修改刚体的质量:
Rigidbody rgd = player .GetComponent<Rigidbody>();
rgd.mass = 100;
1.Transfrom t = GetComponent<Transform>();
2.Collider [ ] = GetComponts(Collider)(); //得到所用的碰撞器;
3.GetComponent<BoxCollider>();
4.拖拽赋值
public player player_script ; //在inspector面板中可以拖拽赋值;
可以通过代码获取前面的禁用的脚本;
GetComponent<Player>();
注意:不管游戏物体里的所有组件都能获取,不管是否被禁用;
5.获取子物体身上的组件:
GetCompoentsInChildren<>();
GetCompoentInChildren<>();
6.获取另外一个物体身上的组件
先通过拖拽获得,或其他方法获取其他游戏物体;
首先获取一个游戏物体:
public GameObject player; //player是一个命名,不是其他物体的名字;其实这里的GameObject相当于ue4中的actor;
play.GetComponent<Rigidbody>() //获得其他物体身上的组件;
1.遍历
foreach (Transform t in children){
print(t);
if(t!=transform)
Destory(t.gameobject);
} //其中t 代表数组元素序号 在里面输出一下
1.销毁子物体
Transform【】children =transform.GetComponentsInChildren<>();
for(int i = 0; i < children.Length; i++){
GameObject.Destroy(childeren[i].gameobject);
}
发现父对象也消失,
添加以条件
if(children【i】!=transform){
GameObject.Destroy(childeren[i].gameobject);
}
2.while
int i=0;
while(i<children.Length){
if(children.Length!=transform)
{GameObject.Destroy(children[i].gameobject); }
i++;
}
do{
}while();
while 和dowhile 的区别在与while满足条件时,才会执行,dowhile 时先执行,如果满足条件,将会继续执行。
注意:Transform是一个类,用来描述物体的位置,大小,旋转等等信息。
transform是Transform类的对象,依附于每一个物体。
Translate是Transform类的一个方法,用来改变物体的位置。
1.if用于某个范围的,比较有规律性的条件
Switch方法:
int i =3;
switch(i){
case 1:
print("i=1");
break;
case 2:
print("i=2");
break;
case3;
print("i=3");
break;
default:
print("default");
break;
} //注意当case中的条件不满足的时候,会执行default,这个相当于else;
改为枚举类型变量
switch (heroType){
case HeroType.Soldier;
print("int =1");
break;
记住break一定要写上,break是用来跳出的;
3.有一种情况只能使用if,加血,条件是一个范围,
比如血量是小于20的时候,能够使用医疗箱,血量在20和40之间使用绷带,等等只能使用if判断,能使用switch的地方,可以使用if,当if用作范围判断时,switch不能判断。
1.if方法
int heroType=0; //1solder 2master 3 assassin 4tank 5shooter;
if(heroType==1){
}else if (heroType==2){
}else if(heroType==3){
}elseif(heroType==4){
}else{
}
但if语句没有更大括号的时候,默认后面的跟着的一条语句,只能是一条。
比如:if(heroType==1)
print("Hello");
等价于
if(heroType==2){
print("Hello");
}
2.枚举类型
先定义枚举类型: enum HeroType{
Solider,
Master,
Assassin,
Tank,
Shooter
}
HeroType heroType =HeroType.Soldier;
if(heroType==HeroType.Soldier){
}else if (heroType==HeroType.Master){
}else if(heroType==HeroType.Assassin){
}elseif(heroType==HeroType.Tank){
}else{
}
1.数学运算符
+ - * / % 等
2.赋值运算符
3.逻辑运算符(bool)
&& ——逻辑与 ||——逻辑或 !取反;
1.声明变量
在脚本中声明一个变量,并公开且初始化处理;
比如public int a = 10;
保存,点击脚本附加的游戏物体,在Inspector面板中的Script组件一栏,会多一个元素,a 并显示10,后面在脚本中更改a的参数,但在外面inspector中没有改变。保持第一次初始化的值;
如果第一次a没有赋值,那么在inspector面板中默认是0的值。
在第二次修改a的值,在inspector中不会更改,当脚本中的a的值与inspector中的值不同时,在
void start(){
print(a); //
}
运行游戏,发现在console的日志输出中显示的值与inspector中a的值是一样的,所以在后续中要更改a的值,可以不在脚本中更改。在脚本中更改没有什么效果,可以直接在inspector张进行更改。
Private int a =10;
Private 是私有的,能在inspector面板中显示,也不能在其中修改;
2.什么时候使用private ,什么时候使用Public;
如果你想通过inspector面板方便的修改参数的值的时候,可以设定为public,
你可以在别的地方去引用这个变量时设置为public;
public GameObject Object;//Game Object类型可以直接赋值一个游戏物体过来,比如摄像机、灯光、网格等;
通过拖拽赋值缺点:可能出现数据丢失,比如低版本在高版本中打开,拖拽赋值的数据可能会发生丢失现象,要重新拖拽赋值。
3.定义变量时,没有定义public和private,默认为private;
4.字段名不能跟关键字相同;
关键字:int float class,与程序语法相关的;
1.脚本的结构
在脚本的开头,是命名空间,Using 后面的文字内容是白色,如果命名空间没有使用(意思是没有使用里里面的方法)那么后面的文字呈现为灰色;
下面的MonoBehiviour类,就是UnityEngine中的类;
不同的命名空间有不同的类,要使用某个命名空间的类,那么就要使用某个命名空间;
创建的脚本,定义的类要和文件名保持一致性
2.声明一个类
定义一个命名空间,在命名空间中定义一个类,
namespece MyGame{
class gameDate{
}
}
要引用这个类,就必须使用这个命名空间;
1.创建脚本的几种方式
在project中的空白处,或者某个文件夹下右击可以创建脚本;
可以点击Hierarchy中的某个物体,在Inspector面板下,点击AddComponent,创建一个脚本。
2.附加脚本
第一种:将创建的脚本拖到Hierarchy面板下游戏物体身上。
第二种:点击游戏物体,将脚本拖入游戏物体的Inspector面板的AddCompoent下面;
第三种:可以在游戏物体的Inspector面板中的AddComponent下添加脚本名称的脚本;
第四种:可以点击游戏物体,在window下点击添加脚本;
1.在类中建立方法
public void Move(){
print(name +"移动");//在此print这个函数没有办法调用,在个方法是在MonoBehivious类中声明的,只能在这个类或继承它的子类中被调用;
Debug.Log(name+"移动");//这个类是系统内置的类,可以调用;
public void Attack(){
Debug。Log(“正在攻击”);
}
void Start() {
enemy1.Move(); //注意类在前面一章节已经声明和初始化;可以直接调用,程序在前一章节;
enemy2.Move();
}
要调用类中的方法,那么方法必须是public类型,不然调用不了,
脚本中的Start方法好像没有调用,而是直接使用,我觉的这其实是一种掉用的形式,只是它加以修饰了,它是unity调用的;
Enemy enemy1=null //声明类 null 是指这个类不从在,只有一个名字;
print(ememy);
enemy1.name; //如果要访问enemy1里面的成员,发现报错why,
Enemy enemy1 =new Enemy();
enemy1.name;//这样还不能访问,要在Enemy的类中,将字段公开,才能访问,
public:
int hp ;
string name; //公开即可;
print(enemy1.name); //
输出的是Null;当字符串name没有赋值是,系统默认值是Null;
print(enemy1.hp);//输出的是0;
2.可以修改类变量的参数,并赋值
enemy1.name="wd";
print (enemy1.name);//输出的是wd;
1.unity中创建一个脚本命名为player,编辑打开;
public class Player:MonoBehaviour{
class 类,创建一个新的脚本,就是创建一个类,创建一个命名为player的类,这个类是继承MonoBehaviour;
2.在脚本中建立其他的类
class Enemy{
包含字段和方法:
string name ;
int hp; //这就是字段相当于成员变量; 自己声明的
} 类不一定要继承
3.类的使用
可以声明变量
void Start(){
int hp 100; //内置的变量
Enemy enemy1;
Enemy enemy1 =new Enemy();
}
1.实现两个整型的相加
void Add(int a,int b){
int res = a + b;
}
Add(10,19); //调用这个函数可以完成函数的相加,但是不会出现结果,在定义的函数中,是定义一个变量来存储结果,所以在调用中会有返回值。在方法内部定义的变量是没办法在外面调用的,那怎么获得res的结果呢,使用返回值;
int Add (int a,int b){
int res=a+b;
return res;
}
int res = Add(10,15);
方法名不能重复,但是上面的变量名重复了,为什么可以,原因是变量、方法名不能在同一个方法函数中被重复,但上面的两个变量名在不同的方法函数中,所以可以重复;
2.如果有返回值,只能有一个返回值,一个方法最多只能有一个返回值,定义的方法前的类型,必须和返回值的类型一致。
string Add (int a,int b);{
int res = a+ b;
return res;
}
这样会出现报错;
1.方法参数
创造敌人,但敌人的其他属性相同,但参数不同。
void CreateEnemy(Vector3 Pos);
调用:CreateEnemy(New Vector3(1,1,1);
1.枚举类型
敌人——魔法师 ,战士 、巫师、坦克、射手等
int roleType =0 //0代表什么、1代表什么等;
enum RoleType{
Mag,
Soldier,
Wizard
}
这时定义好的一个类型, RoleType rt =RoleType.Mag
rt=RoleType.Soldier; 等等