int !!! =//
print(!!!)
int !!! =//
print(!!!)
获取GameObject
1.先定义 拖拽 物体或者组件
2.transform.Find("子路径")
3.GameObject.Find("物体名称") 全局查找
4.GameObject.FindWithTag("标签名称") 标签查找
1. 通过GetComponentInChildren<组件类名>()可以获取子物体中第一个符合的组件
1. 禁用组件只是引擎不会再调用其生命周期相关方法了,用户还可以手动代码调用
获取游戏物体:
拖拽赋值,要求前后一致
获取游戏物体的子物体:
transform.Find("")
//(“”)内为查找对象的路径格式为:(“游戏物体1/游戏物体2”)
GameObject .Find("xxx");
//("")内为要查找到游戏物体的名称,若有多个重复名的游戏物体则会返回第一个
//根据全局搜索,较耗费性能
根据标签查找:
GameObject.FindWitchTag("xxx");
禁用组件:
BoxCollider collider = Player.GetComponent<BoxCollider>();
collider.enabled =false;
被禁用的组件方法依然可以使用
访问组件中的属性;
Rigidbody rgd = Player.GetComponent<Rigidbody>();
rgd.mass = 100;
访问自身组件:
GetComponent<Transform>();
//<>内为要访问的组件类型
GetComponents<collider>();
//<collider>获取所有碰撞器
获取子物体身上的组件:
游戏物体名字.GetCompnent<要获取的对象身上的子物体名字>();
foreach(transform xxx in 数组名)
{
}
//xxx代表数组里的每一个元素
//foreach循环体会执行多次,执行一次的时候xxx就代表其中一个元素
只是遍历某个数组可用foreach循环
foreach(Transform t in children)
{
if (t != transform)
{
Destroy(t.gameObject);
}
}
利用循环销毁物体和子物体:
for循环:
Transform[] xxxx = transform.GetComponentsInChildren<Transform>();
//定义一个内容为该游戏物体所有组件的数组
for(int i=0;i<children.length;i++)
{
if(children[i] !=transoferm)
{
GameObject.Destroy(children[i].gameobject);
}
}
//销毁游戏物体的子物体
利用while循环:
int i = 0;
while (i < children.Length)
{
if(children[i] != transform)
{
GameObject.Destroy(children[i].gameObject);
}
i++;
}
do while循环:
do
{
//循环体
}
while(//循环条件)
//先执行循环体在判断满足条件,若满足则再次执行循环体
int i = 0;
do
{
if (children[i] != transform)
{
GameObject.Destroy(children[i].gameObject);
}
i++;
}
while(i<children.Length);
switch case语法
switch(heroType)
{
case 1:
//在这里书写若()条件满足时执行的代码
break;
case 2:
//在这里书写若()条件满足时执行的代码
break;
case 3:
//在这里书写若()条件满足时执行的代码
break;
default:
//在这里书写若()条件不满足时执行的代码
break;
}
//default为默认情况,当上述情况不满足时则执行default语句
//default语句可不添加,case可有多个
变形:
switch(heroType)
{
case HeroType.soldier:
case HeroType.master:
print("战士发动技能");
print("法师发动技能");
break;
//若heroType等于HeroType.soldier或等于HeroType.master执行
print("战士发动技能");
和
print("法师发动技能");
if变形:处理多种情况(可添加多个else if)
只会执行其中一种分支,若满足其中一个则后续不再做判断
格式:
if()
{
}
else if()
{
}
逻辑或运算符||:||左右两边吧任意一个为true则返回true
类名定义时可使用下划线 _
运算符:
数学运算符:
+ - * / %
赋值:
= += -= /= %=
a+=b ==> a=a+b
比较运算符:
> >= < <= == !=
// !=为不等于
逻辑运算符:
&& || !
//&&逻辑与 ||逻辑或 !取反
//&&左右两边都为true时才输出true
//针对bool类型运算
//!用于取反
用法:!true或!false
也可以把变量取反
在类中声明变量:
public int hp;
//可在hp后添加=数字,修改默认值,默认值初始为0
inspector上的值以第一次初始化的值为准
脚本中的初始值和inspector中的初始值冲突时以inspectior中的初始值为准
public与private,private在inspectior面板上不显示,public则显示且可在inspectior面板上更改参数
GameObject类型的变量可以赋值游戏物体
c#中称为字段
为声明为public或private时默认为private
public或private是访问修饰符
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//命名空间,灰色的为未使用,不同命名空间里有不同类,若要使用则要先引用该命名空间
public class player : MonoBehaviour
{
//palyer为类的名字,要和文件名保持一致
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
定义命名空间;
namespace xxx
{
}
要使用命名空间的类需要引用,格式为
using 命名空间名字
注释
注释不会运行
注释可以写在代码后面
{}前面不能有//、
//后面代表单行注释及只对//后起作用
*/来表示。(这里面随便些什么都可以,只要不超过这个范围即可)
单行注释可以放在程序的任意地方,只要不
类中可包含方法(类可以进行的功能)
利用类声明的变量称之为对象
Enemy enemy = new Enemy();
//new Enemy()构造对象
未构造的对象无法使用
public class LearnCsharpClass : MonoBehaviour
{
private void Start()
{
Enemy enemy1 = new Enemy();
}
}
class Enemy
{
string name;
string hp;
}
若要访问对象的属性则要将string name;改为public string name;
public字段踩可以通过对象访问
string默认数值为null
int默认值为0
修改sting name;
enmey1.name = "叔叔"
print(enemy1.name);
输出结果为叔叔
字符组拼:使用+“-”+拼接
字符串+“-”+字符串
eg;
print(enemy1.name+"-"+enemy2.name)
类class:
类与类之间可以继承
eg:
public class LearnCsharpClass:MonoBehaviour
{
}
表示LearnCsharpClass继承自MonoBehaviour
定义:
class Enemy //Enemy为类名字,自己定义
{
string name; //字段,末尾需要加分号
}
类的声明:
Enemy enemy;
类的创建:
Enemy enemy = new Enemy();
if语句:
if(逻辑表达式)
{
}
若()内条件满足则运行{}内代码
eg;
hp = 0;
if(hp<=0)
{
print(“you die”)
}
输出结果为you die
if else语句:
if()
{
}
else
{
}
若满足if()内的条件则执行if语句中{}的代码,若不满足条件则执行else{}中的代码