39971人加入学习
(83人评价)
Unity中的C#编程 - 零基础(Unity 2017)

完成于2017-11-06

价格 免费

int up; 声明变量

hp=100;赋值

 

 

[展开全文]
蒲庙 · 2018-11-24 · 该任务已被删除 0

注释快捷键 Ctrl+k Ctrl+c

int hp =100;声明变量

int 数据类型 hp 变量名 100 值

变量用来存储数据

变量名必须以字母或下划线开头

赋值:右边的值给左边变量

 

 

 

 

[展开全文]
蒲庙 · 2018-11-28 · 该任务已被删除 0

Debug.Log 输出

Debug.LogWarning 输出警告

Debug.LogError 错误输出

 

 

 

[展开全文]
蒲庙 · 2018-11-28 · 该任务已被删除 0

// 注释

/*  */ 多行注释

 

[展开全文]
蒲庙 · 2018-11-25 · 该任务已被删除 0

1.禁用组件

刚体组件没办法禁用,因为刚体组件身上没有勾;

可以禁用碰撞器组件;

BoxCollider collider = GetComponent<BoxCollider>();

collider.enabled = false;   //禁用了组件;

组件被禁用后,组件中的方法依然可以被调用,

比如把前面说所的脚本player给禁用了。

先禁用player脚本,在调用里面的方法Start,

注意在其他组件中调用这个函数,必须在它本身的脚本把start这个方法公开;

Player.Start();    //调用player脚本中的方法 ,可以调用脚本中内置的方法,也可以调自定义的方法。注意的是调用的脚本中其他组件被经验了,而那个方法中涉及这个组件,在执行方法时,这个组件是无效的,比如说,在游戏物体的另一个物体中写了一个碰撞的方法,但碰撞器是禁用的,当执行这个碰撞的方法时,不会触发碰撞事件;

2.访问组件里面的属性

修改刚体的质量:

Rigidbody rgd = player .GetComponent<Rigidbody>();

rgd.mass = 100;

 

 

[展开全文]
瞴眳 · 2018-11-24 · 该任务已被删除 0

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>()  //获得其他物体身上的组件;

[展开全文]
瞴眳 · 2018-11-24 · 该任务已被删除 0

1.遍历

foreach (Transform t in children){

   print(t);

if(t!=transform)

         Destory(t.gameobject);

}   //其中t 代表数组元素序号  在里面输出一下

 

[展开全文]
瞴眳 · 2018-11-24 · 该任务已被删除 0

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类的一个方法,用来改变物体的位置。

 

 

 

 

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

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不能判断。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

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{

}

 

 

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

1.数学运算符

+ - * /  % 等

2.赋值运算符

3.逻辑运算符(bool)

&&  ——逻辑与    ||——逻辑或     !取反;

 

 

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

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,与程序语法相关的;

 

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

1.脚本的结构

在脚本的开头,是命名空间,Using 后面的文字内容是白色,如果命名空间没有使用(意思是没有使用里里面的方法)那么后面的文字呈现为灰色;

下面的MonoBehiviour类,就是UnityEngine中的类;

不同的命名空间有不同的类,要使用某个命名空间的类,那么就要使用某个命名空间;

创建的脚本,定义的类要和文件名保持一致性

2.声明一个类

定义一个命名空间,在命名空间中定义一个类,

namespece MyGame{

      class gameDate{

      }

}

要引用这个类,就必须使用这个命名空间;

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

1.创建脚本的几种方式

在project中的空白处,或者某个文件夹下右击可以创建脚本;

可以点击Hierarchy中的某个物体,在Inspector面板下,点击AddComponent,创建一个脚本。

2.附加脚本

第一种:将创建的脚本拖到Hierarchy面板下游戏物体身上。

第二种:点击游戏物体,将脚本拖入游戏物体的Inspector面板的AddCompoent下面;

第三种:可以在游戏物体的Inspector面板中的AddComponent下添加脚本名称的脚本;

第四种:可以点击游戏物体,在window下点击添加脚本;

 

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

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调用的;

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

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;

 

 

 

 

 

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

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();

}

 

 

 

 

 

[展开全文]
瞴眳 · 2018-11-23 · 该任务已被删除 0

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;   

}

这样会出现报错;

[展开全文]
瞴眳 · 2018-11-22 · 该任务已被删除 0

1.方法参数

创造敌人,但敌人的其他属性相同,但参数不同。

void CreateEnemy(Vector3 Pos);

调用:CreateEnemy(New Vector3(1,1,1);

 

[展开全文]
瞴眳 · 2018-11-22 · 该任务已被删除 0

1.枚举类型

敌人——魔法师  ,战士 、巫师、坦克、射手等

int roleType =0 //0代表什么、1代表什么等;

enum RoleType{

Mag,

Soldier,

Wizard

}

这时定义好的一个类型, RoleType rt =RoleType.Mag

rt=RoleType.Soldier; 等等

[展开全文]
瞴眳 · 2018-11-22 · 该任务已被删除 0

授课教师

加我的QQ问问题:804632564

课程特色

下载资料(2)
视频(37)