💾 코드
using System.Linq;
public class Solution {
public string solution(string s) {
string answer = new string(s.OrderByDescending(c => c).ToArray());
//문자열 s의(.)요소(c(charValue))를내림차순으로 정렬하겠다(c => c) 정렬한 요소를 배열화 한다(ToArray)
return answer;
}
}
💾 코드
public class PlayerController : MonoBehaviour
{
public void OnJumpInput(InputAction.CallbackContext context)
{
if(context.phase == InputActionPhase.Started)
{
if(IsGrounded())
//플레이어가 땅에 있는가에 대한 참 거짓(bool)값
_rigidbody.AddForce(Vector2.up * jumpForce, ForceMode.Impulse);
//점프의 힘만큼 이차원 Y방향에 순간적으로 객체에 힘을 가한다.
//자세히: 강체(Rigidbody)에 물리엔진(중력, 힘, 속도 등)중 힘(AddForce)을 (2차원중 위쪽방향으로 점프의 힘(jumpForce)만큼 순간적인 힘으로) 가합니다
}
}
}
📖 참고
namespace UnityEngine
{
public void AddForce(Vector3 force, [UnityEngine.Internal.DefaultValue("ForceMode.Force")] ForceMode mode) => this.AddForce_Injected(ref force, mode);
public enum ForceMode
{
///강체에 지속적인 힘을 가한다
Force = 0,
///강체에 순간적인 힘을 가한다
Impulse = 1,
///강체에 순간적인 속도변화를 가한다
VelocityChange = 2,
///강체에 지속적으로 가속도를 가한다
Acceleration = 5,
}
}
💾 코드
public class PlayerController : MonoBehaviour
{
private bool IsGrounded()
{
Ray[] rays = new Ray[4]
//레이 4개를 정의 합니다
{
new Ray(transform.position + (transform.forward * 0.2f) + (Vector3.up * 0.01f) , Vector3.down),
new Ray(transform.position + (-transform.forward * 0.2f)+ (Vector3.up * 0.01f), Vector3.down),
new Ray(transform.position + (transform.right * 0.2f) + (Vector3.up * 0.01f), Vector3.down),
new Ray(transform.position + (-transform.right * 0.2f) + (Vector3.up * 0.01f), Vector3.down),
//레이는(=) (객체의(+) (앞, 뒤, 왼쪽, 오른쪽(-+forward, right) 기준 0.2f 만큼 넓고) (+) (위로 0.01만큼 높은곳에서)(,) 아래로 향한다)
};
for(int i = 0; i < rays.Length; i++)
{
if (Physics.Raycast(rays[i], 0.1f, groundLayerMask))
//해당 레이케스트를(해당 배열의 값으로 0.1f 만큼 쏜 대상이 해당 레이어 마스크(groundLayerMask))라면
{
return true;
//true를 반환한다
}
}
return false;
//false를 반환한다
}
private void OnDrawGizmos()
// Scene 뷰에서 Gizmos로 시각적인 표시를 제공하는 메서드
{
Gizmos.color = Color.red;
//Gizmos의 색깔을 빨강으로 설정한다
Gizmos.DrawRay(transform.position + (transform.forward * 0.2f), Vector3.down);
Gizmos.DrawRay(transform.position + (-transform.forward * 0.2f), Vector3.down);
Gizmos.DrawRay(transform.position + (transform.right * 0.2f), Vector3.down);
Gizmos.DrawRay(transform.position + (-transform.right * 0.2f), Vector3.down);
//위의 레이를 Gizmos를 통해 시각적으로 보여준다
}
}
📖 참고
namespace UnityEngine
{
public Ray(Vector3 origin, Vector3 direction)
//3차원 기존위치와 방향을 매개변수로 참조한다
{
this.m_Origin = origin;
this.m_Direction = direction.normalized;
//해당 매개변수를 설정한다
}
public static bool Raycast(Ray ray, float maxDistance, int layerMask) => Physics.defaultPhysicsScene.Raycast(ray.origin, ray.direction, maxDistance, layerMask);
//참 거짓(bool)값의 레이케스트의 매개변수(시작위치와 이동할 방향(Ray ray), 최대 이동거리(maxDistance), 레이어마스크의 인트값(Int LayerMask))으로 쏘아서 해당 레이어 마스크의 인트값 이 맞는지 확인하여 참 거짓 값으로 반환한다
}
계산기의 덧셈 뺄셈 과정의 전략 패턴이다
💾 코드
void Update ()
{
var angles = transform.rotation.eulerAngles;
//각도를 오일러 각도로 변환
angles.x += Time.deltaTime * 10;
//변환한 오일러 각도의 x축을 기준으로 프레임마다 10 씩 회전시켜줄 값을 설정한다
transform.rotation = Quaternion.Euler(angles);
//해당 객체 각도를 변환한 오일러각도를 쿼터니언 각도로 변환하여 움직여준다
}
💾 코드
void Update ()
{
float x;
void Update ()
{
x += Time.deltaTime * 10;
transform.rotation = Quaternion.Euler(x,0,0);
}
}
위의 코드에는 지정되어 있는 쿼터니언 값을 수정하려는 시도가 없다