Chinar堅持將簡單的生活方式,帶給世人! (擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例) |
1
Lerp —— 線性插值
Mathf —— 數學運算函數庫
.Abs —— 函數,返回的是一個 float 值,返回的是一個絕對值
//插值運算
//主相機背景色 = 顏色,插值(當前色,目標色,漸變速度)
_mainCamera.backgroundColor = Color.Lerp(_mainCamera.backgroundColor, Color.green, _animationSpeed * Time.deltaTime);
//主相機的正交尺寸 = 運算,插值(當前尺寸,目標尺寸,漸變速度)
_mainCamera.orthographicSize = Mathf.Lerp(_mainCamera.orthographicSize, 3.5f, _animationSpeed * Time.deltaTime);
//判斷是否達到目標值 運算,計算向量(當前值 減去 3.5f )< 0.01f的話 跳出
if (Mathf.Abs(_mainCamera.orthographicSize - 3.5f) < 0.01f) break;
2
LoadScene —— 載入場景
scenemanagement —— 場景管理器
SceneManager —— 場景管理
LoadScene —— 加載場景
.GetActiveScene() —— 獲取激活的場景
buildIndex —— 場景對應下標
using UnityEngine;
using UnityEngine.SceneManagement;//引用命名空間
/// <summary>
/// 測試腳本
/// </summary>
public class Test : MonoBehaviour
{
void Start()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); //重載當前場景
}
}
3
Gizmos —— 小物件
注意:圖片必須是在 Gizmos 文件夾下,需要在代碼中“文件名.格式”寫出格式
OnDrawGizmos() —— 函數,是 MonoBehaviour 的生命周期函數 ,只在編輯狀態下,每幀都會運行
Gizmos.DrawIcon —— 在場景中某個位置繪制一張圖片
Gizmos.DrawCube —— 在場景中某個位置繪制一個Cube
Debug.DrawLine —— 畫一條線,這個方法也可在正常編譯代碼時打印用
/// <summary>
/// 編輯器模式工作,每幀都會運行
/// </summary>
void OnDrawGizmos()
{
Gizmos.DrawCube(transform.position, new Vector3(1, 1, 1)); //在Scene視窗下繪制一個Cube (位置,縮放比例)
Gizmos.DrawIcon(transform.position, "Icon.png", true); //在Scene視窗下繪制一個圖片(位置,名稱.格式 ,是否允許擴展)
Debug.DrawLine(transform.position, new Vector3(0, 10, 0), Color.green); //划線(開始位置,方向,顏色)
}
4
Normalize —— 向量
Vector3.Distance(transform.position,RightPos.position)>MaxDis
三維向量.距離(當前位置,目標位置) > 最大距離
if (Vector3.Distance(transform.position,RightPos.position)>MaxDis)//如果大於設定距離MaxDis
{
Vector3 pos = (transform.position - RightPos.position).normalized;//單位化向量,求得方向
pos *= MaxDis;//給 pos 賦值,乘等於MaxDis
transform.position = pos + RightPos.position;//當前位置賦值:最大距離+起點坐標點的位置
}
5
RelativeVelocity —— 相對速度
collision.relativeVelocity.magnitude > MaxSpeed
碰撞物體的.相對速度.大小 > 最大速度
/// <summary>
/// 觸發檢測
/// </summary>
/// <param name="collision"></param>
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.relativeVelocity.magnitude > MaxSpeed) //如果相對速度.大小>最大速度
{
Destroy(gameObject); //直接死亡
}
else if (collision.relativeVelocity.magnitude > MinSpeed && collision.relativeVelocity.magnitude < MaxSpeed) //相對速度在4-8之間
{
Render.sprite = HurtSprite; //更換圖片,受傷
}
}
6
AudioSource —— 音頻源
AudioSource.PlayClipAtPoint(clip, transform.position);
音頻源.在指定位置播放裁剪音效(音效,位置)
public AudioClip HurtClip; //受傷音效
void Start()
{
AudioPlay(HurtClip);//播放受傷音效
}
/// <summary>
/// 播放音效
/// </summary>
/// <param name="clip"></param>
public void AudioPlay(AudioClip clip)
{
AudioSource.PlayClipAtPoint(clip, transform.position); //靜態方法:播放音效
}
7
CameraFollow —— 相機跟隨,插值
Mathf.Clamp(posX, 0, 18)
數學函數.范圍(限定目標,0,到 18之間)
/// <summary>
/// 相機在指定范圍跟隨
/// </summary>
private void CameraFollow()
{
//記錄Eva的橫坐標
float posX = transform.position.x;
//相機當前位置 = 插值(當前相機位置,目標位置(Mathf.Clamp-限定范圍:(限定posX,0,18之間))
Camera.main.transform.position = Vector3.Lerp(Camera.main.transform.position, new Vector3(Mathf.Clamp(posX, 0, 18), Camera.main.transform.position.y, Camera.main.transform.position.z), SmoothFlo * Time.deltaTime);
}
8
String Split —— 字符串分割
例如一堆物體名字分別為:
Test-1
Test-2
Test-3
Test-4
Test-5
Split(‘-‘)函數:返回值為一個String數組
用-拆分,輸出的值為: 對應數組中:
String[0]:對應Test
String[1]:對應1,2,3,4,5
SkinnedMeshRenderer[] parts = sourceTransform.GetComponentsInChildren<SkinnedMeshRenderer>(); //獲取所有帶有siki的物體位置信息,存入parts
foreach (var part in parts)//遍歷蒙皮網格數組中的每一個元素
{
string[] nameStrings = part.name.Split('-'); //記錄名字,用-拆分,輸出的值為: “Test-1”----對應數組中------0:"Test" 1:"1"
if (!data.ContainsKey(nameStrings[0])) //如果字典GirlData中不包含 第一個資源預設下的子物體的名字
{
GameObject partObj = new GameObject(); //實例化一個空物體
partObj.name = nameStrings[0]; //給物體改名
partObj.transform.parent = target.transform; //設置父物體
mydic.Add(nameStrings[0], partObj.AddComponent<SkinnedMeshRenderer>()); //把骨骼target身上的骨骼信息存起來
data.Add(nameStrings[0], new Dictionary<string, SkinnedMeshRenderer>()); //存到字典中
}
data[nameStrings[0]].Add(nameStrings[1], part); //存儲所有的skin信息到字典
}
9
Toggle/Button|AddListener —— Toggle/按鈕添加監聽
需要引用命名空間:using UnityEngine.UI;
private Toggle MyToggle;//自身的Toggle組件
/// <summary>
/// 初始化方法
/// </summary>
void Start()
{
if (gameObject.name == "SaveButton") //如果按鈕名為:SaveButton
{
Button but = GetComponent<Button>();
but.onClick.AddListener(LoadScene); //給當前物體上的Button組件添加監聽事件
return; //不在向下執行
}
MyToggle = GetComponent<Toggle>();
MyToggle.onValueChanged.AddListener(OnValueChangePerson); //綁定Toggle事件
//MyToggle.onValueChanged.AddListener((bool value) => OnValueChangePerson(value)); //lambda表達式轉換為委托類型
}
/// <summary>
/// Toggle方法,改變
/// </summary>
/// <param name="isChange"></param>
public void OnValueChangePerson(bool isChange)
{
if (isChange)
{
Debug.Log("開關狀態 " + (isChange ? "On" : "Off"));
}
}
/// <summary>
/// 加載其他場景
/// </summary>
public void LoadScene()
{
SceneManager.LoadScene(1);
}
支持
May Be —— 搞開發,總有一天要做的事!
Chinar 提供一站式教程,閉眼式創建! 為新手節省寶貴時間,避免采坑! |
先點擊領取 —— 阿里全產品優惠卷 (享受最低優惠)
1 —— 雲服務器超全購買流程 (新手必備!)
2 —— 阿里ECS雲服務器自定義配置 - 購買教程(新手必備!)
3—— Windows 服務器配置、運行、建站一條龍 !
4 —— Linux 服務器配置、運行、建站一條龍 !

Chinar
本博客為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究
對於需要復制、轉載、鏈接和傳播博客文章或內容的,請及時和本博主進行聯系,留言,Email: ichinar@icloud.com
對於經本博主明確授權和許可使用文章及內容的,使用時請注明文章或內容出處並注明網址