《幻想禾穰物语》制作笔记-PART 1

一、创建项目

        模板:2D 核心模板

二、导入素材

        从Package manager导入素材:M Farm RPG Assets Pack

        素材设置:

                Sprite Mode:Multiple

                Pixels Per Unit:20

                Filter Mode:Point(no filter)

                Compression:None

        将图片设置作为一个预设:设置按钮 - Save current to... - 选择文件夹 - 创建。

        使用预设:设置按钮 - Select Preset - 选择预设

        素材切割:

                Sprite Editor - Slice - 选择类型 - 选择Method - Slice - Apply

三、创建Player

        创建父物体Player - 创建子物体Shadow、Body、Hair、Arm - 在Player中添加Sorting Group

设置为Y轴渲染:

        Edit - Project Settings - Graphic - 

如图设置

四、实现Player基本移动

        创建Player代码和变量

        创建Movement实现俯视角四方向移动

using UnityEngine;

public class Player : MonoBehaviour
{
    private Rigidbody2D rb;
    public float speed;
    private float inputX, inputY;
    private Vector2 movementInput;

    private void Awake()
    {
        rb = GetComponent<Rigidbody2D>();
    }
    private void Update()
    {
        PlayerInput();
    }
    private void FixedUpdate()
    {
        Movement();
    }
    private void PlayerInput()
    {
        //if(inputY == 0) 取消斜方方向移动
        inputX = Input.GetAxisRaw("Horizontal");
        //if(inputX == 0) 取消斜方方向移动
        inputY = Input.GetAxisRaw("Vertical");
        //斜方向速度
        if(inputX != 0 && inputY != 0)
        {
            inputX = inputX * 0.6f;
            inputY = inputY * 0.6f;
        }

        movementInput = new Vector2(inputX, inputY);
    }
    private void Movement()
    {
        rb.MovePosition(rb.position + movementInput * speed * Time.deltaTime);
    }
}

五、创建基本地图结构

        设置Tilemap

        制作Template Scene 用于在场景中加载不同地图

六、幻想乡地图考据

【东方project】幻想乡柱状地图阅读指南 - 哔哩哔哩 (bilibili.com)

幻想乡柱状地图 (thwiki.cc)

MineCraft幻想乡 - THBWiki · 专业性的东方Project维基百科 - TBSGroup (thwiki.cc)

七、摄像机设置

        添加Cinemachine - 设置2D Camera跟随 - 调整Cinemachine设置

        添加Pixel Perfect相机设置比例 320*180

        创建Sprite Atlas - 放入图片素材 - 避免缝隙

        添加Cinemachine Confiner扩展工具

        添加Bounds并设置Polygon Collider2D边界

        添加代码让 Cinemachine 或者跨场景的边界 Bounds

 private void SwitchConfinerShape()
    {
        PolygonCollider2D confinerShape = GameObject.FindGameObjectWithTag("BoundsConfiner").GetComponent<PolygonCollider2D>();

        CinemachineConfiner confiner = GetComponent<CinemachineConfiner>();

        confiner.m_BoundingShape2D = confinerShape;

        //Call this if the bounding shape's points change at runtime
        confiner.InvalidatePathCache();
    }

八、景观树制作

        创建父物体Tree - 创建子物体Top、Trunk - 在Trunk中添加Collider 2D - 在Top中添加Animator制作树叶晃动动画 - 在父物体Tree中添加Collider2D - 将物体保存成Prefab

九、实现景观物体遮挡半透明

        添加DOTween插件

        物体添加如下代码

using UnityEngine;
using DG.Tweening;

[RequireComponent(typeof(SpriteRenderer))]

public class ItemFader : MonoBehaviour
{
    private SpriteRenderer spriteRenderer;
    private void Awake()
    {
        spriteRenderer = GetComponent<SpriteRenderer>();
    }

    /// <summary>
    /// 逐渐恢复颜色
    /// </summary>
    public void FadeIn()
    {
        Color targetColor = new Color(1, 1, 1, 1);
        spriteRenderer.DOColor(targetColor, Settings.fadeDuration);
    }
    /// <summary>
    /// 逐渐半透明
    /// </summary>
    public void FadeOut()
    {
        Color targetColor = new Color(1, 1, 1, Settings .targetAlpha);
        spriteRenderer.DOColor(targetColor, Settings.fadeDuration);
    }
}

                Player添加如下代码

public class TriggerItemFader : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D other)
    {
        ItemFader[] faders = other.GetComponentsInChildren<ItemFader>();
        if(faders.Length > 0)
        {
            foreach(var item in faders)
            {
                item.FadeOut(); 
            }
        }
    }
    private void OnTriggerExit2D(Collider2D other)
    {
        ItemFader[] faders = other.GetComponentsInChildren<ItemFader>();
        if (faders.Length > 0)
        {
            foreach (var item in faders)
            {
                item.FadeIn();
            }
        }
    }
}

        Settings代码:

public class Settings
{
    public const float fadeDuration = 0.35f;
    public const float targetAlpha = 0.45f;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值