三、Unity2D游戏制作——角色制作
1.導(dǎo)入角色圖片并切片
新建文件夾player-將角色圖片拖動(dòng)至該文件夾內(nèi)-選中圖片文件后點(diǎn)擊檢查器內(nèi)sprite editor按鈕打開(kāi)編輯器-點(diǎn)擊切片按鈕-切片方式選擇自動(dòng)-點(diǎn)擊應(yīng)用。
2.創(chuàng)建行走動(dòng)畫(huà)
分別選中所有面向前方后方等四個(gè)方向切片拖動(dòng)至層級(jí)對(duì)話框內(nèi),保存文件至player子文件夾walk中,命名為Walk_U等四個(gè)文件,完成后刪除層級(jí)框內(nèi)剛新建的四個(gè)動(dòng)畫(huà)對(duì)象文件及walk文件夾內(nèi)四個(gè)動(dòng)畫(huà)器文件。
這里我的窗口布局改為了默認(rèn)布局
3.創(chuàng)建靜止動(dòng)畫(huà)
打開(kāi)walk文件夾-復(fù)制并粘貼Walk_D.admin等四個(gè)文件-于unity項(xiàng)目對(duì)話框內(nèi)一次將其重命名為Idle_U等。
雙擊Walk_D打開(kāi)動(dòng)畫(huà)編輯器-選中第一張動(dòng)畫(huà)復(fù)制-點(diǎn)擊Idle_D切換到Idle_D動(dòng)畫(huà)粘貼,將另外三個(gè)也做同樣處理。
4.建立角色靜止動(dòng)畫(huà)規(guī)則
選中層級(jí)內(nèi)Player對(duì)象-拖動(dòng)項(xiàng)目對(duì)話框內(nèi)Walk_D文件至檢查器對(duì)話框內(nèi)添加組件處以創(chuàng)建player動(dòng)畫(huà)器。
雙擊player打開(kāi)動(dòng)畫(huà)器-刪除動(dòng)畫(huà)器內(nèi)已存在的Walk_D-右擊動(dòng)畫(huà)器窗口空白處選擇創(chuàng)建狀態(tài)-新混合樹(shù)并重命名為Idle,添加兩個(gè)float類型參數(shù)Input_x、Input_y,一個(gè)bool類型參數(shù)iswalking。
雙擊打開(kāi)Idle,檢查器內(nèi)混合類型修改為2D Freeform Cartesian,添加四個(gè)運(yùn)動(dòng)域-將參數(shù)改為Input_x、Input_y-將空運(yùn)動(dòng)換為Idle_D、Idle_U等,參數(shù)如圖。
對(duì)此我的理解為:
假設(shè)player所在位置設(shè)為原點(diǎn),當(dāng)player面向Pos點(diǎn)方向時(shí)調(diào)用前面的motion,例如player往上時(shí),也就是往Y軸正方向,那么pos即為(0,+)可以為(0,1)(0,0.1)(0,2)等,需要調(diào)用的動(dòng)畫(huà)為Idle_U。
5.建立角色移動(dòng)動(dòng)畫(huà)規(guī)則
復(fù)制粘貼一份Idle更名為walking,將motion改為對(duì)應(yīng)的walking動(dòng)畫(huà)。
6.建立過(guò)度條件
右鍵動(dòng)畫(huà)器內(nèi)Idle創(chuàng)建過(guò)渡-取消退出時(shí)間-添加條件iswalking-值設(shè)為true,同理建立iswalking到idle過(guò)渡,設(shè)置iswalking為false。
7.創(chuàng)建移動(dòng)控制腳本
選中層級(jí)內(nèi)player對(duì)象,點(diǎn)擊添加組件,選擇New script
打開(kāi)新建的腳本文件,編輯代碼。
using System.Collections; using System.Collections.Generic; using UnityEngine;public class BehaviourScript : MonoBehaviour {Rigidbody2D rbody; //定義變量Animator anim;// Start is called before the first frame updatevoid Start(){rbody = GetComponent<Rigidbody2D>(); //初始化anim = GetComponent<Animator>();}// Update is called once per framevoid Update(){Vector2 vector = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")); //定義向量,獲取水平豎直方向值 使用GetAxisRaw可以兼容方向鍵游戲手柄等。if (vector!=Vector2.zero) //判斷是否在移動(dòng){anim.SetBool("iswalking", true); anim.SetFloat("Input_x", vector.x);anim.SetFloat("Input_y", vector.y);}elseanim.SetBool("iswalking", false);rbody.MovePosition(rbody.position + vector * Time.deltaTime * 100); //移動(dòng)player} }注意:
當(dāng)腳本文件報(bào)無(wú)法加載關(guān)聯(lián)的腳本時(shí)有兩種情況,判斷方法新建腳本文件不修改文件名若仍然報(bào)錯(cuò)則為第二種:1.類名與文件名不一致,解決方案修改類名或文件名。2.環(huán)境問(wèn)題,解決方案刪除項(xiàng)目窗口內(nèi)SuperTiled2Unity文件夾并重新安裝,若仍未解決則重裝unity。
8.綁定攝像機(jī)
新建c#腳本文件,綁定到Main Camera,代碼如下:
using System.Collections; using System.Collections.Generic; using UnityEngine;public class CameraAuto : MonoBehaviour {public Transform targer; //定義變量 public float m_moveSpeed = 0.03f;Camera mycamera;// Start is called before the first frame updatevoid Start(){mycamera = GetComponent<Camera>(); //初始化}// Update is called once per framevoid Update(){//mycamera.orthographicSize = (Screen.height / 0.6f) / 4f; //設(shè)置攝像機(jī)范圍if(targer){transform.position = Vector3.Lerp(transform.position, targer.position, m_moveSpeed); //移動(dòng)攝像機(jī)}} }保存后選中Main Camera,將Player拖動(dòng)到Targer即可。
注意:
腳本文件中的public變量會(huì)顯示在unity腳本組件下拉菜單中,如上圖中的targer、movespeed。
總結(jié)
以上是生活随笔為你收集整理的三、Unity2D游戏制作——角色制作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python3 爬虫日记(三) 爬取堆糖
- 下一篇: 请java老鸟指教一下