Unity学习1
- Unity代码控制
-
- CanvasGroup解决文本异色问题
- 创建新物体(预制体)
- Destroy和DestroyImmediate
- 对象池
- 点击屏幕控制移动的同时,增加暂停或返回等功能
- 代码更改控件属性
- 点击事件与鼠标键盘操控
- 更换图
- 刚体碰撞
- 改变图片大小与透明度
- 改变图片锚点
- 改变控件大小
- 脚本来添加对象或获得对象、子对象
- 脚本来改变button
- 开始游戏和loading
- 控制台输出
- MD5加密
- 判断当前场景
- 每次生成的随机数不同(防止伪随机数)
- 随机数
- SerializeField总结
- Time.timeScale = 0可以暂停游戏,Time.timeScale = 1恢复正常
- Time
- 退出游戏
- unity基础转载
- unity场景跳转
- unity自带的自动寻路
- 文字提示动画(文字出现上升渐隐)
- 协程隔几秒创造新物体
- 文字动画(一个一个打出来)
- 血条制作(利用mask遮罩)
- 移动与位置
- 在GUI新建窗口和button
- unity界面操作
- unity插件
- unity小问题
Unity代码控制
CanvasGroup解决文本异色问题
https://blog.csdn.net/shirln/article/details/103540726
创建新物体(预制体)
//barrieraPrefab为平台预制体
GameObject aPrefab = Instantiate(barrieraPrefab) as GameObject;
aPrefab.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(Var.platform[Var.mapsNum]);
aPrefab.transform.position = new Vector3(transform.position.x, y, aPrefab.transform.position.z);
//obj为金币
//objpos[]为金币将要放置的位置
GameObject obj = Resources.Load<GameObject>("Prefab/obj");
for (int i = 0; i < objpos.Length; i++)
{
GameObject temp = Instantiate(obj, objpos[i]);
temp.GetComponent<ObjItem>().Init();
}
public void Init()
{
sp = this.GetComponent<SpriteRenderer>();
sp.sprite = Resources.Load<Sprite>("关卡界面/图层-15");
Objisgold = true;
this.gameObject.name = "jinbi";
}
Destroy和DestroyImmediate
Destroy()有延迟
DestroyImmediate()立即销毁,但是消耗大
//销毁游戏物体
Destroy (gameObject);
//从游戏物体删除该脚本
Destroy (this);
//从游戏物体删除刚体
Destroy (rigidbody);
//加载物体5秒后销毁游戏物体
Destroy (gameObject, 5);
对象池
https://blog.csdn.net/shirln/article/details/87193673
点击屏幕控制移动的同时,增加暂停或返回等功能
https://blog.csdn.net/shirln/article/details/87272866
代码更改控件属性
更改精灵
image = GameObject.Find("Images").GetComponent<Image>();
image.sprite = Resources.Load<Sprite>("路径");
image.sprite = Resources.Load<Sprite>("images/1");
//等待几秒后跳转
public float countTime = 0f;
void Update(){
CountTime();
}
void CountTime()
{
countTime += Time.deltaTime;
if (countTime > 5.0f)
{
SceneManager.LoadScene("场景名");
}
}
点击事件与鼠标键盘操控
//按下事件,GetKeyDown
//抬起事件,Input.GetKeyUp
//长按事件,Input.GetKey
//任意键按下事件,Input.anyKeyDown
//鼠标按下事件,Input.GetMouseButtonDown ();//0为左边,1位右边,2位中间
//Input.mousePosition //得到鼠标当前三维坐标<br>
//鼠标抬起 Input.GetMouseButtonUp
Input.GetKey(KeyCode.W);//点击键盘W触发
Input.GetMouseButtonDown(0);//单击鼠标左键触发
//自定义按钮的点击事件
if(Input.GetButtonDown("gamestart")){
Debug.Log ("按钮被按下");
Debug.Log (Input.mousePosition.x);//获取鼠标在游戏世界位置的x坐标
Debug.Log (Screen.width);//获取屏幕的尺寸
}
Vector3 screenPosition;//将物体从世界坐标转换为屏幕坐标
Vector3 mousePositionOnScreen;//获取到点击屏幕的屏幕坐标
Vector3 mousePositionInWorld;//将点击屏幕的屏幕坐标转换为世界坐标
if(Input.GetMouseButtonDown(0)){
//获取鼠标在相机中(世界中)的位置,转换为屏幕坐标;
screenPosition = Camera.main.WorldToScreenPoint(transform.position);
//获取鼠标在场景中坐标
mousePositionOnScreen = Input.mousePosition;
//让场景中的Z=鼠标坐标的Z
mousePositionOnScreen.z = screenPosition.z;
//将相机中的坐标转化为世界坐标
mousePositionInWorld = Camera.main.ScreenToWorldPoint(mousePositionOnScreen);
//物体跟随鼠标移动
//transform.position = mousePositionInWorld;
//物体跟随鼠标X轴移动
transform.position = new Vector3(mousePositionInWorld.x,transform.position.y,transform.position.z);
}
更换图
//材质球贴图
this.GetComponent<MeshRenderer>().material.mainTexture = Resources.Load<Texture>("路径");
//UI控件
this.GetComponent<Image>().sprite = Resources.Load<Sprite>("路径");
//对象贴图
this.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("路径");
刚体碰撞
刚体碰撞后
OnTriggerEnter2D()/OnCollisionEnter2D()—>触碰即触发函数
OnTriggerStay2D()/OnCollisionStay2D()—>一直触碰触发函数
OnTriggerExit2D()/OnCollisionExit2D()—>分离才触发函数
//1.新建一个空对象,然后Add Component-->Box Collider 2D,勾选Is Trigger(这就会成为触发器,否则为碰撞),更改合适的尺寸
//2.新建一个脚本,代码如下,然后拖给对象
void OnTriggerEnter2D( Collider2D collidedObject )
{
if (collidedObject.gameObject.tag == "pickup")
{
collidedObject.gameObject.SetActive(false);
}
}
改变图片大小与透明度
sp.color = new Color(0.1f, 0.2f, 0.3f, 1);//这种形式中 Color中的RGB的取值是范围是[0,1],A的取值也是[0,1]
sp.color = new Color32(123, 100, 50, 1);//这种形式中 Color中的RGB的取值是范围是[0,255],A的取值是[0,1]
改变图片锚点
因为不知道咋改图片对象的锚点,然后学习的时候突然发现,原来图片可以改变中心点【冷笑】【冷笑】
可以直接更改Pivot,也可以打开Sprite Editor更改
改变控件大小
var rt = gameObject.GetComponent<RectTransform>();
rt.sizeDelta = new Vector2(100, 30);
var rt = gameObject.GetComponent<RectTransform>();
rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 100);
rt.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 30);
脚本来添加对象或获得对象、子对象
//在代码中创建新对象cude,是个立方体
//在代码中,获得了游戏中已存在的对象,此对象的Tag为feiji1
private GameObject feiji;
Image images;
void Start () {
//手动通过脚本创建一个对象
GameObject cude = GameObject.CreatePrimitive (PrimitiveType.Cube);
//变为刚体
cude.name = "cude1";
cude.transform.position = new Vector3(0.0f,10.0f,0.0f);
//获得一个游戏对象
//feiji = GameObject.FindWithTag("feji1");
//feiji = GameObject.FindGameObjectWithTag("feji1");
feiji = GameObject.FindGameObjectWithTag("feji1");//"feiji1"为标签Tag
images = GameObject.Find("Images").GetComponent<Image>();//"Images为控件名称"
// Debug.Log(GameObject.Find("Images").GetComponentInChildren<Image>());//得到子对象
// Debug.Log(GameObject.Find("Images").GetComponentInParents<Image>());//得到父对象
}
//得到子物体
this.gameObject.transform.GetChild(index)