Unity记录1.2-入门-移动、碰撞与菜单

汇总:Unity 记录

摘要:碰撞箱、移动、动画、碰撞影响与主菜单的学习。

参考课程:最新 Unity和C#2D游戏开发实战全流程教程 [中文字幕|超新实战课程]

角色部件分离

  • 拖入人物贴图,精灵(Sprite)模式改为多重,编辑精灵,将精灵对象的各部分分开,并移动转动中心。
  • 将处理中心从中心改为支点,以使用我们修改好的转动中心。
  • 分层结构中创建空对象,将分离的部件拖进去,保证控制时能同时移动。

角色移动

  • 为角色添加组件,2D刚体,并将重力设置为0。
  • 为角色创建脚本,并拖动至角色。
  • 使用如下脚本,按下方向键左右时,角色会移动。
    • 如果不移动,检查游戏运行时的speed,为0时不移动。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class player : MonoBehaviour{
    public float speed = 1;
    Rigidbody2D rb;

    // Start is called before the first frame update
    void Start(){
        rb = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void FixedUpdate(){
        // input
        float input = Input.GetAxis("Horizontal");

        // move
        rb.velocity = new Vector2(input * speed, rb.velocity.y);
    }
}

膨胀箱

  • 防止角色移动至非可移动区域。
  • 层次结构创建空对象,添加组件 Box Collider 2d,并编辑碰撞箱。
  • 创建两个碰撞箱,并拖动到世界两边。
  • 为角色创建碰撞箱。

动画创建

  • 打开动画窗口:Windows-Animation-Animation
  • 选中角色身体
    • 层级如下,点击 body 来创建动画,而不是 player,我简单试了下, player 坐标会用全局左边,而选择 body 的话是相对坐标。
    • 如果点击到head时,动画窗口变空了,可以通过删除 head 的 animation 来解决。
    • 正常肯定不是这样搞,不过现在这样可以达到我的目标。
  • 点击录制按钮以录制,拖动帧以制定动画时间
player
- body
  - head
  - hand
  - foot

单个目标多个动画

  • 在动画窗口,录制键的下方有一行带有当前动画名字的下拉窗口,点击,创建新动画。
    • 重新创建动画的话,我暂时不能添加到角色上,点击后会变成已有的。

掉落的物体撞击玩家

  • 创建脚本,内容如下
  • 将脚本拖动到某对象,对象设置膨胀箱,并将 Is Trigger 属性打钩,对象拖动至玩家上方。
  • 将玩家带有碰撞箱的对象设置标签为 Player。
  • 游戏开始后,物体掉落,撞击到玩家时,控制台出现 hit
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Falldown : MonoBehaviour{
    public float speed;

    // Start is called before the first frame update
    void Start(){

    }

    // Update is called once per frame
    void Update(){
        transform.Translate(Vector2.down * speed * Time.deltaTime);
    }

    void OnTriggerEnter2D(Collider2D hitObject){
        if (hitObject.tag == "Player"){
            print("hit");
        }
    }
}

预制件

  • 将层次结构的东西拖到资产中,形成预制件。
  • 预制件拖动到场景后,与其它来自同预制件的物体具有相同属性,更改其属性,可以选择应用至所有同预制件物体。
  • 物体更改后,在未应用到预制件前,拖动到资产,可以新成新的预制件,以此创造出属性相同,材质不同的预制件。

碰撞影响

// 敌人碰撞脚本
void Start(){
    playerScript = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();
}    

void OnTriggerEnter2D(Collider2D hitObject){
    // Hit affact
    if (hitObject.tag == "Player"){
        playerScript.TakeDamage();
    }
}
// 玩家受伤脚本
public void TakeDamage(){
    print("Damaged.");
}

碰撞的粒子效果

  • 层次结构中创建效果-粒子系统。
  • 在监视器里修改循环、材质、持续时间、大小、扩散方式使其符合游戏,并拖动至资产以形成预制件。
  • 声明对象 public GameObject hitParticle;,并在碰撞触发中使用 Instantiate(hitParticle, transform.position, Quaternion.identity); 生成效果。
  • 拖动预制件至敌人的 hitParticle 上。
    • 我比较希望在一个基础粒子上生成不同材质的粒子,这样方便不同对象使用不同粒子,不过教程没教,先这样。

主菜单

  • 资产创建场景并打开,层次结构中创建 UI 画布,并在其中添加 UI 图像。
  • 为 UI 图像添加按钮组件,并创建场景切换脚本,并将脚本作为组件添加给 UI 图像,之后,将作为组件的脚本拖动添加至按钮的点击事件中,并选择 PlayGame 作为运行函数,令该 UI 图像成为启动按钮。
    • 作为组件的脚本拖动过去后才会出现内部函数,资产拖过去没用。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour{
    public void PlayGame(){
        SceneManager.LoadScene("Game");
    }
}

版权声明:
作者:MWHLS
链接:https://panwj.top/4443.html
来源:无镣之涯
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
< <上一篇
下一篇>>