一、Rigidbody刚体组件中position和MovePosition控制移动
public class API15RigidbodyPosition : MonoBehaviour
{
public Rigidbody playerRgd
void Start ()
{
}
void Update ()
{
//不推荐直接用position修改(一两次还好),用moveposition比较好,更平滑
//playerRgd.position = playerRgd.transform.position + Vector3.forward * Time.deltaTime;//向前移动
playerRgd.MovePosition(playerRgd.transform.position + Vector3.forward * Time.deltaTime);
}
}
二、通过刚体控制游戏物体旋转
有刚体的情况下推荐使用刚体,比较节约性能,如果持续不断的修改转向,使用moverotation
public class API15RigidbodyPosition : MonoBehaviour
{
public Rigidbody playerRgd;
public Transform enemy;
void Start ()
{
}
void Update ()
{
//不推荐直接用position修改(一两次还好),用moveposition比较好,更平滑
//playerRgd.position = playerRgd.transform.position + Vector3.forward * Time.deltaTime;//向前移动
//playerRgd.MovePosition(playerRgd.transform.position + Vector3.forward * Time.deltaTime);
if (Input.GetKey(KeyCode.Space))
{
Vector3 dir = enemy.position - playerRgd.position;
dir.y = 0;
Quaternion target = Quaternion.LookRotation(dir);
//使用MoveRotation比较节约性能,在持续不断改变方向的情况下
playerRgd.MoveRotation(Quaternion.Slerp(playerRgd.rotation, target, Time.deltaTime));
}
}
}
三、通过AddForce控制运动
public class API15RigidbodyPosition : MonoBehaviour
{
public Rigidbody playerRgd;
public Transform enemy;
public int force;
void Start ()
{
}
void Update ()
{
//不推荐直接用position修改(一两次还好),用moveposition比较好,更平滑
//playerRgd.position = playerRgd.transform.position + Vector3.forward * Time.deltaTime;//向前移动
//playerRgd.MovePosition(playerRgd.transform.position + Vector3.forward * Time.deltaTime);
//if (Input.GetKey(KeyCode.Space))
//{
// Vector3 dir = enemy.position - playerRgd.position;
// dir.y = 0;
// Quaternion target = Quaternion.LookRotation(dir);
// //使用MoveRotation比较节约性能,在持续不断改变方向的情况下
// playerRgd.MoveRotation(Quaternion.Slerp(playerRgd.rotation, target, Time.deltaTime));
//}
playerRgd.AddForce(Vector3.forward*force);//这里只有足够大的力才能运动,由慢到快
}
}
四、Camera类的学习和常用方法
public class API16Camera : MonoBehaviour
{
private Camera mainCamera;
void Start ()
{
//获取maincamera
//mainCamera = GameObject.Find("Main Camera").GetComponent<Camera>();
//通过标签获取maincamera
mainCamera = Camera.main;
}
void Update ()
{
//Ray ray= mainCamera.ScreenPointToRay(Input.mousePosition);//把屏幕上的点转换成一个射线,返回一个ray
//RaycastHit hit;//获取射线碰撞到的游戏物体
//bool isCollider= Physics.Raycast(ray,out hit);//返回的是个bool值,判断是否碰撞到
//if (isCollider)
//{
// Debug.Log(hit.collider);
//}
//射线是从摄像机前面的屏幕上发散出去的,并不是从摄像机上
Ray ray = mainCamera.ScreenPointToRay(new Vector3(200,200,0));//确定射线的位置
Debug.DrawRay(ray.origin,ray.direction*10,Color.yellow);//画了一个十米长的射线
}
}
五、通过Application获取datapath
Application跟应用相关的东西
StreamingAssets在Unity中,这个文件夹下的东西不会打包,这里的东西原先是什么东西,还是什么样子。音频文件,视频文件,assetsbundle都可以称为StreamingAssets文件
public class API17Application_xxxPath : MonoBehaviour
{
void Start ()
{
//存放数据,工程路径,工程所需要的一些数据
print(Application.dataPath);
//可以通过文件流获取的数据
print(Application.streamingAssetsPath);
//可以进行持久化的数据 下面这两个不是很重要 是在editor模式下
print(Application.persistentDataPath);
//临时数据
print(Application.temporaryCachePath);
}
}
六、Application中的常用静态变量和静态方法
在File——BuildSettings——PlayerSettings下
公司名CompanyName
产品名ProductName:安装后以这个名字显示
public class API18Application : MonoBehaviour
{
void Start ()
{
//表示标识
print(Application.identifier);
//公司名
print(Application.companyName);
//产品名
print(Application.productName);
//安装名
print(Application.installerName);
//安装模式
print(Application.installMode);
//是否编辑模式
print(Application.isEditor);
//是不是在Game视窗下
print(Application.isFocused);
//是否移动平台
print(Application.isMobilePlatform);
print(Application.isPlaying);
//print(Application.isWebPlayer);
//平台
print(Application.platform);
//unity版本
print(Application.unityVersion);
//当前游戏版本
print(Application.version);
//是否在游戏后台运行,一般在安卓不能设置
print(Application.runInBackground);
Application.Quit();
Application.OpenURL("www.baidu.com");
//是用来截图的 可以在电脑中找到
ScreenCapture.CaptureScreenshot("游戏截图 ");
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//从编辑器模式下退出游戏
UnityEditor.EditorApplication.isPlaying = false;
}
}
}
七、如何切换加载场景
public class API19SceneManager : MonoBehaviour
{
void Start ()
{
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//加载场景
//默认single将当前游戏物体销毁,加载新场景
SceneManager.LoadScene("02-MenuScene");
//SceneManager.LoadScene(1);
//选择异步加载的时候,可以获取加载场景的进度,添加加载页面
}
}
}
八、关于SceneManager的其他方法
public class API19SceneManager : MonoBehaviour
{
void Start ()
{
print(SceneManager.sceneCount);//已经加载场景的个数
print(SceneManager.sceneCountInBuildSettings);//bulidsetting里面的场景个数
print(SceneManager.GetActiveScene().name);//获取当前激活的场景的名字或其他信息
print(SceneManager.GetSceneAt(0).name);//已经加载的场景
SceneManager.activeSceneChanged += OnActiveSceneChanged;//(在原有的基础上注册新事件)当加载场景改变的时候
SceneManager.sceneLoaded += OnSceneLoaded;//场景加载完
}
void OnActiveSceneChanged(Scene a, Scene b)//这个先执行
{
print(a.name);
print(b.name);
}
void OnSceneLoaded(Scene a, LoadSceneMode mode)//场景加载完执行
{
print(a.name + "" + mode);
}
void Update ()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//加载场景
//默认single将当前游戏物体销毁,加载新场景
//SceneManager.LoadScene("02-MenuScene");
//SceneManager.LoadScene(1);
//选择异步加载的时候,可以获取加载场景的进度,添加加载页面
SceneManager.LoadScene(1);//获取build里的场景
}
}
}