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;
        }
    }
    
    
  • 相关阅读:
    mysql多源复制,多主一从复制
    Linux初始化环境安装
    sql2014 错误:已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除NoSync 订阅,然后重新创建它们
    Jmeter之模拟文件上传、下载接口操作--转载
    配置元件 之 用户自定义的变量--转载
    多态中成员函数的特点--转载
    Jmeter:cup监控、脚本录制、执行布置----转载
    Selenium JavascriptExecutor 详解
    selenium+java自动化测试环境搭建介绍--转载
    IO实时监控命令iostat详解-转载
  • 原文地址:https://www.cnblogs.com/unitysir/p/14206200.html
Copyright © 2011-2022 走看看