SIKI学习——UnityAPI常用方法和类详解0108

本文详细介绍了Unity中的Rigidbody组件,包括position和MovePosition的移动控制,刚体旋转方法,以及AddForce实现的动力控制。接着探讨了Camera类的重要方法,并展示了如何通过Application获取datapath及应用相关设置。此外,文章还涵盖了场景切换和SceneManager的扩展操作,为Unity开发者提供了实用的技术指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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里的场景
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值