zoukankan      html  css  js  c++  java
  • Unity 黑魂复刻

    DSPlayerCtrl.cs

    
    using System.Collections;
    using System.Collections.Generic;
    using DSFramework;
    using UnityEngine;
    
    public class DSPlayerCtrl : DSMonoBehaviour
    {
        public GameObject model;
        //private Animator ani;
    
        private DSPlayerInput pi;
    
        private Rigidbody DS_Rigidbody_rigid;
    
        [SerializeField] private float DS_float_moveSpeed = 10f;
    
        /// <summary>
        /// 移动向量
        /// </summary>
        private Vector3 movingVec;
    
        private void Awake()
        {
            //ani = model.GetComponent<Animator>();
            pi = GetComponent<DSPlayerInput>();
            DS_Rigidbody_rigid = DSGetCmpt<Rigidbody>();
    
            DSEntity.Mono.DSAddUpdateListener(OnUpdate);
            DSEntity.Mono.DSAddFixedUpdateListener(OnFixedUpdate);
        }
    
        private void OnUpdate()
        {
            //ani.SetFloat("forward", pi.Dmag);
            if (pi.Dmag > 0.1f)
            {
                model.transform.forward = Vector3.Slerp(model.transform.forward, pi.Dvec, 0.3f); //缓慢转向目标
            }
    
            DS_float_moveSpeed = pi.run ? 10f : 5f;
            movingVec = pi.Dmag * model.Forward() * DS_float_moveSpeed;
        }
    
        private void OnFixedUpdate()
        {
            // DS_Rigidbody_rigid.position += movingVec * Time.fixedDeltaTime;
            DS_Rigidbody_rigid.velocity = new Vector3(movingVec.x, DS_Rigidbody_rigid.velocity.y, movingVec.z);
        }
    }
    
    

    DSPlayerInput.cs

    
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using DSFramework;
    using UnityEngine;
    
    public class DSPlayerInput : DSMonoBehaviour
    {
        public KeyCode keyUp = KeyCode.W;
        public KeyCode keyDown = KeyCode.S;
        public KeyCode keyLeft = KeyCode.A;
        public KeyCode keyRight = KeyCode.D;
    
        public KeyCode keyA = KeyCode.LeftShift;
        public KeyCode keyB = KeyCode.None;
        public KeyCode keyC = KeyCode.None;
        public KeyCode keyD = KeyCode.None;
    
        #region 设置方向
    
        /// <summary>
        /// 向上还是向下,1=上,0=下
        /// </summary>
        public float Dup;
    
        private float Dup2;
    
        /// <summary>
        /// 向还是向右,0=左,1=右
        /// </summary>
        public float Dright;
    
        private float Dright2;
    
        private Vector2 tempAxis;
    
        /// <summary>
        /// 输入开关
        /// </summary>
        public bool inputEnable = true;
    
        /// <summary>
        /// 角色动画
        /// </summary>
        [HideInInspector] public float Dmag;
    
        /// <summary>
        /// 角色方向
        /// </summary>
        [HideInInspector] public Vector3 Dvec;
    
        //目标方向
        private float targetDup;
        private float targetDright;
    
        //转动速度
        private float DupVelocity;
        private float DrightVelocity;
    
    
        public bool run = false;
    
        #endregion
    
        private void Start()
        {
            DSEntity.Mono.DSAddUpdateListener(OnUpdate);
        }
    
        private void OnUpdate()
        {
            //设置方向
            targetDup = ((Input.GetKey(keyUp) ? 1.0f : 0f) - (Input.GetKey(keyDown) ? 1.0f : 0f));
            targetDright = ((Input.GetKey(keyRight) ? 1.0f : 0f) - (Input.GetKey(keyLeft) ? 1.0f : 0f));
    
            if (inputEnable == false) return;
    
            Dup = Mathf.SmoothDamp(Dup, targetDup, ref DupVelocity, 0.1f);
            Dright = Mathf.SmoothDamp(Dright, targetDright, ref DrightVelocity, 0.1f);
    
            tempAxis = SquareToCircle(new Vector2(Dup, Dright));
    
            Dup2 = tempAxis.x;
            Dright2 = tempAxis.y;
    
            Dmag = Mathf.Sqrt(Dup2 * Dup2 + Dright2 * Dright2);
            Dvec = Dright2 * transform.right + Dup2 * transform.forward;
    
            run = Input.GetKey(keyA);
        }
    
        /// <summary>
        /// 正方形转为椭圆
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        private Vector2 SquareToCircle(Vector2 input)
        {
            Vector2 output = Vector2.zero;
    
            output.x = input.x * Mathf.Sqrt(1 - (input.y * input.y) / 2.0f);
            output.y = input.y * Mathf.Sqrt(1 - (input.x * input.x) / 2.0f);
    
            return output;
        }
    }
    
    
  • 相关阅读:
    创建新用户
    发生tcp丢包(拥堵、超时)重传
    centos7装机和初步运维
    论上山和下山哪个费力
    一、Linux简介
    服务器设置FTP
    自定义部署资源服务器
    代码管理工具 Git
    远程连接工具rdcman
    dubbo学习(八)dubbo项目搭建--消费者(服务消费者)
  • 原文地址:https://www.cnblogs.com/unitysir/p/14206200.html
Copyright © 2011-2022 走看看