0
点赞
收藏
分享

微信扫一扫

unity 3D 改颜色 和高度这些渲染

MaxWen 2022-01-24 阅读 81

renderer 渲染器

vector3 三维向量(x,y,z)

经过前三章的介绍,我们终于搞定了游戏界面,从本章开始,我将带大家创造游戏世界!作为一个游戏爱好者,最熟悉的莫过于WASD键,它控制着人物行走,带我们认识游戏世界,那么在Unity3D中我们如何控制人物行走移动呢?

        本章目标:使用Transform控制物体行走。W、S控制物体向前向后行走,A、D控制物体转视角,

        本章要点:

                        1、Transform类

                        2、Input类 

一、Transform类

        Transform类包含了所有物体的位置、旋转和缩放信息   ,作为GameObject(Unity场景里面所有实体的基类)的属性之一,同时控制着物体的位移,旋转和缩放

        常用的属性包括

                position物体在世界坐标轴下的位置

                right、up、forword物体自身坐标轴下的X轴Y轴Z轴

                rotation物体自身的旋转角度

         常用的方法有

                  1、Translate控制物体的平移

[csharp] view plain copy

  1. void Update() {  
  2.         transform.Translate(Vector3.forward * Time.deltaTime);  
  3.         transform.Translate(Vector3.up * Time.deltaTime, Space.World);  
  4.     }  
 
  1. void Update() {

  2. transform.Translate(Vector3.forward * Time.deltaTime);

  3. transform.Translate(Vector3.up * Time.deltaTime, Space.World);

  4. }

                      小写的transform是因为它作为GameObject的属性之一存在,Vector3.forword即向量(0,0,1)的简写,Space.Word指世界坐标轴,乘上Time.deltaTime可以

                      理解为每秒运动的距离

                  2、Rotae控制物体的旋转

[csharp] view plain copy

  1. void Update() {  
  2.         transform.Rotate(Vector3.right * Time.deltaTime);  
  3.         transform.Rotate(Vector3.up * Time.deltaTime, Space.World);  
  4.     }  
 
  1. void Update() {

  2. transform.Rotate(Vector3.right * Time.deltaTime);

  3. transform.Rotate(Vector3.up * Time.deltaTime, Space.World);

  4. }

                  注意,这里我只列举了最简单的方法,Translate和Rotae方法还有许多重载的方法,大家想了解的话可以去查文档或者留言问我

二、Input类

        使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据。 在这里我只介绍本节所需的几个重要函数

         1、GetKeyDown、GetKey、GetKeyUp分别在按键按下,按住和抬起时触发

[csharp] view plain copy

  1. void Update()  
  2.         {  
  3.             if (Input.GetKeyDown(KeyCode.A))  
  4.                 print("A key was pressed");  
  5.   
  6.             if (Input.GetKey(KeyCode.A))  
  7.                 print("A is held down");  
  8.             if (Input.GetKeyUp(KeyCode.A))  
  9.                 print("A key was released");  
  10.         }  
 
  1. void Update()

  2. {

  3. if (Input.GetKeyDown(KeyCode.A))

  4. print("A key was pressed");

  5. if (Input.GetKey(KeyCode.A))

  6. print("A is held down");

  7. if (Input.GetKeyUp(KeyCode.A))

  8. print("A key was released");

  9. }

         2、GetAxis如果你使用Input制作某种运动行为可以使用Input.GetAxis方法,它能够控制物体运动的方向。"Horizontal" 和"Vertical" 映射于控制杆、A、W、S、D和箭头键

             (方向键)。 "Mouse X" 和"Mouse Y" 映射于鼠标,"Fire1", "Fire2" "Fire3"映射于键盘的Ctrl、Alt、Cmd键和鼠标中键或控制器的按钮。新的输入设置可以使用输入管理 

               器来添加。

              注意:每次输入在"Update()"之前不会再更新,所以建议你将所有的输入调用都写在Update方法中。


介绍完本节的知识点,下面我们就来完成本章的目标:使用Transform控制物体行走。W、S控制物体向前向后行走,A、D控制物体转视角

一、创建地形,在地形上新建一个Cube

导入Scripts包,选中主摄像机,在Component菜单下选择Camera-Control——>Smooth Follow,将Cube拖到target上,如下图所示

二、新建脚本,绑定到Cube上

[csharp] view plain copy

  1. public class InputCtrol : MonoBehaviour {  
  2.     public int speed = 2;  
  3.     // Use this for initialization   
  4.     void Start () {  
  5.       
  6.     }  
  7.       
  8.     // Update is called once per frame   
  9.     void Update () {  
  10.         if (Input.GetKey(KeyCode.W))  
  11.         {  
  12.             //transform.Translate(transform.forward* speed * Time.deltaTime,Space.World);   
  13.             transform.Translate(Vector3.forward * speed * Time.deltaTime);  
  14.         }  
  15.         if (Input.GetKey(KeyCode.S))  
  16.         {  
  17.             //transform.Translate(-Vector3.forward * speed * Time.deltaTime, Space.World);   
  18.             transform.Translate(-Vector3.forward * speed * Time.deltaTime);  
  19.         }  
  20.         if (Input.GetKey(KeyCode.A))  
  21.         {  
  22.             transform.Rotate(-Vector3.up);  
  23.         }  
  24.         if (Input.GetKey(KeyCode.D))  
  25.         {  
  26.             transform.Rotate(Vector3.up);  
  27.         }  
  28.     }  
  29. }  
 
  1. public class InputCtrol : MonoBehaviour {

  2. public int speed = 2;

  3. // Use this for initialization

  4. void Start () {

  5. }

  6. // Update is called once per frame

  7. void Update () {

  8. if (Input.GetKey(KeyCode.W))

  9. {

  10. //transform.Translate(transform.forward* speed * Time.deltaTime,Space.World);

  11. transform.Translate(Vector3.forward * speed * Time.deltaTime);

  12. }

  13. if (Input.GetKey(KeyCode.S))

  14. {

  15. //transform.Translate(-Vector3.forward * speed * Time.deltaTime, Space.World);

  16. transform.Translate(-Vector3.forward * speed * Time.deltaTime);

  17. }

  18. if (Input.GetKey(KeyCode.A))

  19. {

  20. transform.Rotate(-Vector3.up);

  21. }

  22. if (Input.GetKey(KeyCode.D))

  23. {

  24. transform.Rotate(Vector3.up);

  25. }

  26. }

  27. }


或者一种更简单的方法

[csharp] view plain copy

  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class CubeControl : MonoBehaviour {  
  5.     public int speed=10;  
  6.     // Use this for initialization   
  7.     void Start () {  
  8.       
  9.     }  
  10.       
  11.     // Update is called once per frame   
  12.     void Update () {  
  13.   
  14.         transform.Translate(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"))*speed*Time.deltaTime);  
  15.     }  
  16. }  
 
  1. using UnityEngine;

  2. using System.Collections;

  3. public class CubeControl : MonoBehaviour {

  4. public int speed=10;

  5. // Use this for initialization

  6. void Start () {

  7. }

  8. // Update is called once per frame

  9. void Update () {

  10. transform.Translate(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"))*speed*Time.deltaTime);

  11. }

  12. }


 

完整项目,包含三个点之间移动的脚本,希望对大家有帮助.unity角色移动_unity角色移动,unity移动代码-游戏开发代码类资源-CSDN下载

 

举报

相关推荐

0 条评论