Unity-GUI-实现角色移动与跳跃

–整理0404

1.安装环境:

Visual Studio2013
Unity5.6.1f1

实现角色移动与跳跃

**

一、准备工作:

**
(1)创建一个场景S003:在Hierarchy面板中写入LocalManager文件,写入ResourcesManager与CanvasManager.分别挂上LoadRes脚本与CanvasManagerEX脚本。(此步之前笔记讲过,用来管理资源与Canvas)
(2)加入所用资源:Image->Resources->图片003
(3)创建人物Player:在Canvas下创建,UI->Image。将图片资源拖入后,创建预制体Player。(将Canvas下的Player拖入PreFab的Resources中)
在这里插入图片描述
在这里插入图片描述

二、.编写控制人物移动的脚本:MoveControl.C#

通过调整Transform组件的属性实现游戏对象的移动。以下是需要了解的几个函数与结构体。
(1)Translate函数
Translate函数用于处理游戏对象移动。
this.Translate(移动方向 * 速度 * 前进/后退方向 * Time.deltaTime, 基准坐标系);
1)Time.deltaTime表示前一帧到当前帧或非的时间,
2)使用Transform组件 ,游戏对象移动的逻辑必须乘以deltaTime,使游戏对象的移动速度不受帧率的影响,而根据某个固定的速度移动。
3)乘以Time.deltaTime,游戏对象将以每秒1各单位的速度前进)
4)将向量单位乘以速度(speed),表示按照speed变量指定的速度移动。

(2)Vector3(x, y, z)是unity提供的用于保存三维坐标值和向量数据的结构体。
(3)键盘的输入:GetKey(用户长按按键有效),GetKeyDown(用户按下按键时有效),GetKeyUp(用户抬起按键时有效)三个方法分别获取用户键盘按键的输入

以下是控制移动的代码。

if (Input.GetKeyDown(KeyCode.Space))
        {
            frameTime = 0;
            isJump = true;

        }
        else if (Input.GetKey(KeyCode.S))
        {
            print("move s");
            this.transform.Translate(Vector3.back * Time.deltaTime * speed);
        }
        else if (Input.GetKey(KeyCode.A))
        {
            print("move a");
            this.transform.Translate(Vector3.left * Time.deltaTime * speed);
        }
        else if (Input.GetKey(KeyCode.D))
        {
            print("move d");
            this.transform.Translate(Vector3.right * Time.deltaTime * speed);
        }

其中,控制角色跳跃,需要利用弹道/抛物线s=ut+1/2at²。当按下空格键时,角色跳跃呈开口向下的抛物线,至最高点后下落,返回至地面。在跳跃过程中,设生命线为frameTime。设抛物线的两个零点是0与0.6,也就是跳跃过程的生命线应小于0.6。在跳跃过程中,角色y值发生改变。由函数getY()得到y的变化值与返回布尔类型的isEnd。

   float a = 18.5f;
   float h = 6.66f;
   bool isJump = false;
   public float getY(float t, out bool isEnd)
   {
       if (t < 0.6)
       {
           isEnd = false;
       }
       else
       {
           isEnd = true;
       }


       if (t > 0.6)
       {
           return 0;
       }

       //带入两个零点解方程,计算出a,h的值
       float y = 0.45f - 5 * (t - 0.3f) * (t - 0.3f);

       return y;

   }

在Start()中定义isJump 判断是否跳跃,并存贮初始y值。

        isJump = false;
        initposy = this.transform.position.y;
        //将初始y值存储起来

在定义跳跃的代码中,初始frameTime = 0; isJump = true;
当 isJump = true;开始跳跃过程,实时时间frameTime+= Time.deltaTime;当frameTime>0.6,生命线结束,isEnd=true;
当getY()返回isEnd为true时,表示frameTime>0.6,跳跃过程结束。

        if (isJump == true)
        {
            frameTime += Time.deltaTime;
            //生命线frameTime
            if (frameTime > 0.6f)
            {
                isEnd = true;

            }
            float y = getY(frameTime, out isEnd);
            this.transform.position = (new Vector3(this.transform.position.x, y * 100 + initposy, this.transform.position.z));

            if (isEnd == true)
            {

                isJump = false;
            }

            Debug.Log(y);
        }

定义子弹发射,当按下k键时,发射子弹。其实就是按下k键,生成一个GameObject子弹对象。并定义生成后的位置。
此处,通过字典查找资源boom。

  if (Input.GetKeyDown(KeyCode.K))
        {
            Debug.Log("按下了K");

            GameObject g = GameObject.Instantiate(LoadRes.getPrefab(ResName.boom
                 ), CanvasManagerEX.canvas1.transform);
            //生成后重新定义位置
            g.GetComponent<RectTransform>().localPosition = this.GetComponent<RectTransform>().localPosition;


        }

定义预制体字典prefabDic:
1.生成字典prefabDic

 //****1.生成字典prefabDic****

    static Dictionary<string, GameObject> prefabDic = new Dictionary<string, GameObject
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity实现角色跳跃,你可以按照以下步骤进行操作: 1. 添加一个刚体组件到角色对象上。可以通过在Unity编辑器中选中角色对象,然后点击“Add Component”按钮,在搜索栏中输入“Rigidbody”,选择添加刚体组件。 2. 在角色对象上添加一个碰撞体组件。同样,在Unity编辑器中选中角色对象,点击“Add Component”按钮,在搜索栏中输入“Capsule Collider”(或者其他适合的碰撞体类型),选择添加碰撞体组件。 3. 创建一个脚本来控制角色跳跃行为。右键点击Hierarchy面板中的角色对象,选择“Create Empty”来创建一个空对象,将其命名为“JumpController”。然后,将该脚本附加到JumpController对象上。 4. 在JumpController脚本中,添加以下代码来实现跳跃行为: ```csharp using UnityEngine; public class JumpController : MonoBehaviour { public float jumpForce = 5f; private Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) // 监听空格键按下事件 { rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse); // 施加向上的力来实现跳跃 } } } ``` 5. 将JumpController对象拖拽到角色对象上,作为其子对象,并在Inspector面板中将其Position属性调整为合适的位置。 现在,当你按下空格键时,角色对象将受到向上的力,并实现跳跃效果。你可以根据需要调整跳跃力的大小(jumpForce变量)来控制角色跳跃高度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值