自学Unity3D系列-第一天学习笔记
前言
最近也不知道为什么,突然有了做游戏的想法(可能是小游戏玩上头了...),于是,有了本文......
由于Unity3D很多需要界面拖曳操作,文章没有很好的办法来描述学习的过程。没有基础自学这个的话,还是推荐视频(我的视频是15年网上找的Unity5),而我用的是Unity2020.2的,界面虽然不同,但大体都能找得到对应功能。
本文只是第一天学习内容的笔记,并没有完整的学习过程。
安装问题
-
Unity安装基本没有什么问题点,按安装程序界面提示就行了。
-
安装Unity Hub,这是类似管理工具吧。可以管理Unity和项目,正常是安装Unity Hub,然后在Hub里面下载Unity。当然,自己手工安装Unity也没问题。
-
脚本的编辑的话,因为Unity3D调用VS2022,始终会提示hold on。网上查过基本都说是因为中文路径的问题,但我这边确定不是这问题,且VS2017没有问题。我另外装了个Rider,专门用于写Unity脚本。
知识点
-
C#脚本文件名必须与类名一致
-
GUI构建事件:OnGUI,需注意帧擦除可能导致的bug
-
脚本常用事件有:Start、Update、OnGUI、OnMouseDown、FixedUpdate
-
移动偏移量应*Time.deltaTime,防止帧数不同导致的偏移差异
-
uGUI按钮事件名:public void OnClick()
-
输出信息:Debug.Log(123);
-
主摄像机:Camera.mainCamera
-
检测按键:if(Input.GetKey(KeyCode.D))
-
检测Axias轴:Input.GetAxias("Mouse X")
-
移动对象:游戏对象.transform.Translate(Vector3.back*1f) //移动当前对象可不写游戏对象,坐标为当前对象的本地坐标系
-
移动对象:游戏对象.transform.posittion=Vector3.zero //直接设置位置
-
旋转对象:游戏对象.transform.Rotate(Vector3.back*1f) 旋转当前对象可不写游戏对象
-
绕对象旋转:旋转对象.transform.RotateAround (目标对象.transform.position,Vector3.up,5);
-
创建游戏对象(内置):GameObject.CreatePrimitive(PrimitiveType.Sphere);
-
获取对象组件:游戏对象.GetComponent
().material.color=Color.red; -
销毁对象/组件:Destroy(s1,延迟秒);
-
复制预置对象:Instantiate(Earth) as GameObject;
-
添加组件:游戏对象.AddComponent
(); -
切换场景:SceneManger.LoadScene(""); //using UnityEngine.SceneManagement;
Demo
今天的内容做个Demo,因为太简单了,代码都不打算保留了,录个动图留个念想吧...
用到的知识点
NGui界面制作、uGui界面制作、动态创建/删除预置对象、按键检测、移动/旋转对象、移动摄像机(模拟后坐力)、切换场景
代码
场景2代码
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ButtonClickObject : MonoBehaviour {
private GameObject _gameObject;
private float _speed;
private int _count;
private bool _enableHzl;
private void Start() {
_speed = 2f;
_count = 0;
}
//重置并创建对象
public void OnReset() {
//存在旧对象就销毁
if (_gameObject != null) {
Destroy(_gameObject);
_gameObject = null;
}
_gameObject = GameObject.CreatePrimitive(PrimitiveType.Cube);//创建预设对象
_gameObject.transform.position=Vector3.zero;//设置位置
_gameObject.GetComponent<MeshRenderer>().material.color=Color.cyan;//设置颜色
_gameObject.AddComponent<ButtonClickObject>();//注册脚本
}
public void OnHzl() {//模拟后坐力
_enableHzl = true;
}
public void OnNext() {//加载场景
SceneManager.LoadScene("Scene3");
}
void Update() {
if (_gameObject == null) return;
if (_enableHzl) {
_count += 1;
if (_count <=10) {
//镜头往后移 Camera.main.transform.Translate(Vector3.back*Time.deltaTime*5);
}else if (_count > 10 && _count<=20) {
//镜头往前移 Camera.main.transform.Translate(Vector3.forward*Time.deltaTime*5);
}else if (_count > 20) {
_enableHzl = false;
_count = 0;
}
}
if (Input.GetKey(KeyCode.UpArrow)) {
_gameObject.transform.Translate(Vector3.up*_speed*Time.deltaTime);
}else if (Input.GetKey(KeyCode.DownArrow)) {
_gameObject.transform.Translate(Vector3.down*_speed*Time.deltaTime);
}
if (Input.GetKey(KeyCode.LeftArrow)) {
_gameObject.transform.Translate(Vector3.left*_speed*Time.deltaTime);
}else if (Input.GetKey(KeyCode.RightArrow)) {
_gameObject.transform.Translate(Vector3.right*_speed*Time.deltaTime);
}
if (Input.GetKey(KeyCode.A)) {
_gameObject.transform.Rotate(Vector3.up*_speed*20*Time.deltaTime);
}else if (Input.GetKey(KeyCode.D)) {
_gameObject.transform.Rotate(Vector3.down*_speed*20*Time.deltaTime);
}
if (Input.GetKey(KeyCode.S)) {
_gameObject.transform.Rotate(Vector3.left*_speed*20*Time.deltaTime);
}else if (Input.GetKey(KeyCode.W)) {
_gameObject.transform.Rotate(Vector3.right*_speed*20*Time.deltaTime);
}
}
}