Skip to content

Instantly share code, notes, and snippets.

View Tunied's full-sized avatar
🎖️
Working on my new game

Eran Tunied

🎖️
Working on my new game
View GitHub Profile
@Tunied
Tunied / FileUtils_ForEachFile.cs
Created December 10, 2022 14:14
Load给定后缀的所有文件
var rootPath = EMG_FileUtils.PersistentDataPath + $"/{ProjectName}/Script";
if (!Directory.Exists(rootPath))
{
Directory.CreateDirectory(rootPath);
}
var allFilePath = Directory.GetFiles(rootPath, "*.lua");
foreach (var filePath in allFilePath)
{
@Tunied
Tunied / ParabolaMove.cs
Created November 15, 2022 04:17
已知起点和终点进行抛物线移动
using Sirenix.OdinInspector;
using UnityEngine;
public class PreGame_Mono_ParabolaMove : MonoBehaviour
{
[OnValueChanged(nameof(DoRefresh))]
public Vector3 Distance = Vector3.one;
[OnValueChanged(nameof(DoRefresh)), Range(0, 1)]
public float DistancePercent = 0.5f;
@Tunied
Tunied / RayHitPlane.cs
Last active September 25, 2022 03:53
找寻到一个Ray入射到给定Plane上的入射点
var ray = Game.MainGame.Logic.Camera.UnityCamera.ScreenPointToRay(Mouse.current.position.ReadValue());
mGroundPlane.Raycast(ray, out var hitDistance);
var hitPoint = ray.GetPoint(hitDistance);
@Tunied
Tunied / OrbitCamera.cs
Created September 16, 2022 05:01
相机绕着某个目标移动
private void OrbitCamera()
{
//orbit camera - 让相机在一个固定水平高度上绕着物体旋转.用于第三人称视角时候人物跟踪
//lookAngle为定义的视角new Vector(45,30,0) 表示离地角度是45°,水平旋转角度是30°
//因为是正交相机,所以相机距离物体远近无异议,所以才用常量20f作为距离
var lookQuaternion = Quaternion.Euler(lookAngle);
var lookDirection = lookQuaternion * Vector3.forward;
var lookPosition = transform.position - lookDirection * 20f;
Camera.SetPositionAndRotation(lookPosition, lookQuaternion);
}
@Tunied
Tunied / Mono_CompoundTrigger.cs
Last active August 29, 2022 10:45
CompoundTrigger for demonstration
using System.Collections.Generic;
using UnityEngine;
public class Mono_CompoundTrigger : MonoBehaviour
{
public class ColliderInfo
{
public Collider target;
public int count;
}
@Tunied
Tunied / GreedyMeshGenerator.cs
Created August 27, 2022 08:46
在XZ平面上根据给定Tile信息生成Greedy优化后的Mesh
using System.Collections.Generic;
using Code.CopyEngine.Core.Utils;
using UnityEngine;
namespace Code.Utils.Tilemap2Mesh
{
public class Tilemap2Mesh_LayerMeshGenerator
{
public Dictionary<Vector2Int, bool> mMarkDic = new();
Shader "Eran/DrawProceduralIndirect/Basic"
{
SubShader
{
Tags
{
"RenderPipeline"="UniversalPipeline"
"RenderType"="Opaque"
"Queue"="Geometry"
}
using System.Collections.Generic;
using UnityEngine;
namespace Code
{
/// <summary>
/// The simplest example to show how to use Graphics.DrawProceduralIndirect
///
/// What it does:
///
@Tunied
Tunied / Tilemap_WorldLocal_Convert.cs
Created May 1, 2022 11:02
Tilemap World和Local的空间转换
/// <summary>
/// World -> World
/// 比如房间的墙体放在Map里面去Gen,在Logic层存储的都是WorldTileIndex,这样和Modify的Tile去混合时候都可以使用一套相同的坐标系
/// </summary>
public static Vector2Int WorldPos_To_WorldTileIndex(Vector3 _worldPos) { return new(Mathf.FloorToInt(_worldPos.x), Mathf.FloorToInt(_worldPos.y)); }
/// <summary>
/// 把Tilemap的局部Index转到世界做标下
/// </summary>
@Tunied
Tunied / Mirror Sync Protobuf.cs
Created May 1, 2022 05:56
在 Mirror 中 Sync Protobuf
private static void Write_Common(NetworkWriter writer, IMessage _target)
{
byte[] bytes = null;
if (_target != null)
{
bytes = _target.ToByteArray();
}
if (bytes is {Length: > 0})
{