ThreeKingdomsSlingshot/Assets/VFX/GabrielAguiarProductions/Scripts/UniqueProjectiles/RotateToMouseScript.cs

75 lines
2.0 KiB
C#
Raw Permalink Normal View History

스킬 이펙트 작업 준비 — 스킬 테스트 씬 · WL 이펙트 이식 · 이펙트 표 · 보병·창·기병 슬링샷 공격 = WL 창 돌진 이펙트 시험(PD 2026-11-09) PD 「WL 프로젝트에서 스킬을 구현하던 방식과 동일하게 유닛 별 스킬 구현」 · 「테스트 목적: 보병, 창, 기병을 슬링샷으로 공격할 때 WL 창 돌진 공격 이펙트」 - 스킬 테스트 씬 Assets/Scenes/SkillTest.unity(SkillTestBootstrap · 메뉴 TKS/Skill Test/Build Scene): 영웅 목록 선택(heroes.csv 56) · 더미(죽지 않음 · 행동 토글 · 배치 표 Resources/Skills/skill_test.csv) · 슬링샷 · 액티브 버튼 · 쿨 무시 · 영웅 무적 · 이펙트 보기(에디터 · Assets/VFX 검색 → 영웅에 띄움) - 이펙트 표 Resources/Skills/skill_vfx.csv → Runtime/Skills/SkillVfx(키 = 스킬 id 또는 basic_<병종> · cast/travel/hit · f_every 반복 · 사본 Resources/Fx/TKS_Fx_*) · 훅 = SkillSystem Announce/BeginAction/EndAction/Hit/Instant - WL 이펙트 이식 Assets/VFX(약 640 MB · 빌트인 호환분만 · GUID 유지 · 도구 Tools/wl_vfx_import.py) · URP 셰이더 빌트인 이식 4종 Assets/VFX/_BuiltinPorts · com.unity.shadergraph 17.3.0 · 카메라 깊이 텍스처 켬(셰이더 그래프 소프트 파티클) - 시험: basic_infantry/spear/cavalry travel = TKS_Fx_SpearRush · SpearRushWrap · SpearRushDust(WL WLStaffEarth rushFx 1~3 값 환산) — 표 9행 삭제 = 원래대로 - 테스트 118/118 · console error 0 · 이 PC 첫 임포트 자동 재직렬화(png·tga .meta · UITheme · ProjectSettings · InputManager)는 제외 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-09 14:12:52 +00:00
//
//NOTES:
//This script is used for DEMONSTRATION porpuses of the Projectiles. I recommend everyone to create their own code for their own projects.
//This is just a basic example.
//
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RotateToMouseScript : MonoBehaviour {
public float maximumLenght;
private bool use2D;
private Ray rayMouse;
private Vector3 pos;
private Vector3 direction;
private Quaternion rotation;
private Camera cam;
private WaitForSeconds updateTime = new WaitForSeconds (0.01f);
public void StartUpdateRay (){
StartCoroutine (UpdateRay());
}
IEnumerator UpdateRay (){
if (cam != null) {
if (use2D) {
Vector2 direction = Camera.main.ScreenToWorldPoint (Input.mousePosition) - transform.position;
float angle = Mathf.Atan2 (direction.y, direction.x) * Mathf.Rad2Deg;
if (angle > 180) angle -= 360;
rotation.eulerAngles = new Vector3 (-angle, 90, 0); // use different values to lock on different axis
transform.rotation = rotation;
} else {
RaycastHit hit;
var mousePos = Input.mousePosition;
rayMouse = cam.ScreenPointToRay (mousePos);
if (Physics.Raycast (rayMouse.origin, rayMouse.direction, out hit, maximumLenght)) {
RotateToMouse (gameObject, hit.point);
} else {
var pos = rayMouse.GetPoint (maximumLenght);
RotateToMouse (gameObject, pos);
}
}
yield return updateTime;
StartCoroutine (UpdateRay ());
} else
Debug.Log ("Camera not set");
}
public void RotateToMouse (GameObject obj, Vector3 destination ) {
direction = destination - obj.transform.position;
rotation = Quaternion.LookRotation (direction);
obj.transform.localRotation = Quaternion.Lerp (obj.transform.rotation, rotation, 1);
}
public void Set2D (bool state){
use2D = state;
}
public void SetCamera (Camera camera){
cam = camera;
}
public Vector3 GetDirection () {
return direction;
}
public Quaternion GetRotation () {
return rotation;
}
}