Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

[Unity3D] للكبار فقط : القفزة البعيدة

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • #31
    على شكل قفزه لم أكن اعلم بدلك , لكن انا جربت كود هو ينتقل من مكان الى مكان بالضغط على الماوس كما قال لكن تبقى القفزه و المده المستغرقه للوصول الى تلك النقطه او انه فورية لكن مثلا لو كان اللاعب في نقطه ثم حدد في الماب الخاصه بالردار نقطه معينه يعني يقفز قفزه طويله و الكامرا تلحق اللاعب ؟ يعني و كأنه يطير هل هكدا يريد ...
    راح اشوف الكود و أعدل عليه عليه حتى يفي بالغرض ان تمكنت
    Algeria
    -------------
    C++ & DirectX
    fOr EvEr
    -------
    add me : prmohamed@hotmail.com

    or : kauchmar051@hotmail.com


    تعليق


    • #32
      الانتقال الي نقطه يحددها بالماوس امرها بسيط
      شوف الفيديو الي عرضه علشان تتوضح لك الصوره
      اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
      وتفتك باعدائك اعداء الدين


      تعليق


      • #33
        راح اشوف الفيديو وأخد لمحه و أحاول اطبقها ان شاء الله و انا متابع الموضوع حول كل جديد
        Algeria
        -------------
        C++ & DirectX
        fOr EvEr
        -------
        add me : prmohamed@hotmail.com

        or : kauchmar051@hotmail.com


        تعليق


        • #34
          توصلت الى نتيجة مرضية نوعاً ما في القفزة


          هذه الألية التحريك من نقطة الى نقطة معينة باستخدام مؤشر الماوس


          كود:
          var smooth:int; // Determines how quickly object moves towards position
          var speed : float=2;
          
          private var targetPosition:Vector3;
          //
          function Update () {
              if(Input.GetKeyDown(KeyCode.Mouse0))
              {
                  var playerPlane = new Plane(Vector3.up, transform.position);
                  var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
                  var hitdist = 0.0;
                  
                  if (playerPlane.Raycast (ray, hitdist)) {
                      var targetPoint = ray.GetPoint(hitdist);
                      targetPosition = ray.GetPoint(hitdist);
                      var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
                      transform.rotation = targetRotation;
                     }
          //        }else
          //        {
          //         targetPoint=Vector3.up * 2 *Time.smoothDeltaTime;
          //         }
              }
                transform.position = Vector3.MoveTowards(transform.position, targetPosition, Time.deltaTime * speed);
                
                // transform.RotateAround (Vector3.zero, Vector3.up, 20 * Time.deltaTime);
             // transform.position = Vector3.Lerp (transform.position, targetPosition, Time.deltaTime * smooth);
          }

          تعليق


          • #35
            وهذه مع حركة الكنترول للشخصية مع الماوس

            استخدم كود الشخصية الكنترول للتصبح القفزة مناسبة
            ThirdPersonController




            كود:
            // Require a character controller to be attached to the same game object
            @script RequireComponent(CharacterController)
            
            public var idleAnimation : AnimationClip;
            public var walkAnimation : AnimationClip;
            public var runAnimation : AnimationClip;
            public var jumpPoseAnimation : AnimationClip;
            
            public var walkMaxAnimationSpeed : float = 0.75;
            public var trotMaxAnimationSpeed : float = 1.0;
            public var runMaxAnimationSpeed : float = 1.0;
            public var jumpAnimationSpeed : float = 1.15;
            public var landAnimationSpeed : float = 1.0;
            
            private var _animation : Animation;
            
            enum CharacterState {
            	Idle = 0,
            	Walking = 1,
            	Trotting = 2,
            	Running = 3,
            	Jumping = 4,
            }
            
            private var _characterState : CharacterState;
            
            // The speed when walking
            var walkSpeed = 2.0;
            // after trotAfterSeconds of walking we trot with trotSpeed
            var trotSpeed = 4.0;
            // when pressing "Fire3" button (cmd) we start running
            var runSpeed = 6.0;
            
            var inAirControlAcceleration = 3.0;
            
            // How high do we jump when pressing jump and letting go immediately
            var jumpHeight = 0.5;
            
            // The gravity for the character
            var gravity = 20.0;
            // The gravity in controlled descent mode
            var speedSmoothing = 10.0;
            var rotateSpeed = 500.0;
            var trotAfterSeconds = 3.0;
            
            var canJump = true;
            
            private var jumpRepeatTime = 0.05;
            private var jumpTimeout = 0.15;
            private var groundedTimeout = 0.25;
            
            // The camera doesnt start following the target immediately but waits for a split second to avoid too much waving around.
            private var lockCameraTimer = 0.0;
            
            // The current move direction in x-z
            private var moveDirection = Vector3.zero;
            // The current vertical speed
            //private var verticalSpeed = 0.0;
            // The current x-z move speed
            private var moveSpeed = 0.0;
            
            // The last collision flags returned from controller.Move
            private var collisionFlags : CollisionFlags; 
            
            // Are we jumping? (Initiated with jump button and not grounded yet)
            private var jumping = false;
            private var jumpingReachedApex = false;
            
            // Are we moving backwards (This locks the camera to not do a 180 degree spin)
            private var movingBack = false;
            // Is the user pressing any keys?
            private var isMoving = false;
            // When did the user start walking (Used for going into trot after a while)
            private var walkTimeStart = 0.0;
            // Last time the jump button was clicked down
            private var lastJumpButtonTime = -10.0;
            // Last time we performed a jump
            private var lastJumpTime = -1.0;
            
            
            // the height we jumped from (Used to determine for how long to apply extra jump power after jumping.)
            private var lastJumpStartHeight = 0.0;
            
            
            private var inAirVelocity = Vector3.zero;
            
            private var lastGroundedTime = 0.0;
            
            
            private var isControllable = true;
            var smooth:int; // Determines how quickly object moves towards position
            var speed : float=2;
            var horizontalSpeed : float = 2.0;
            var verticalSpeed : float = 2.0;
            private var targetPosition:Vector3;
            //
            function Awake ()
            {
            	moveDirection = transform.TransformDirection(Vector3.forward);
            	
            	_animation = GetComponent(Animation);
            	if(!_animation)
            		Debug.Log("The character you would like to control doesn't have animations. Moving her might look weird.");
            	
            	/*
            public var idleAnimation : AnimationClip;
            public var walkAnimation : AnimationClip;
            public var runAnimation : AnimationClip;
            public var jumpPoseAnimation : AnimationClip;	
            	*/
            	if(!idleAnimation) {
            		_animation = null;
            		Debug.Log("No idle animation found. Turning off animations.");
            	}
            	if(!walkAnimation) {
            		_animation = null;
            		Debug.Log("No walk animation found. Turning off animations.");
            	}
            	if(!runAnimation) {
            		_animation = null;
            		Debug.Log("No run animation found. Turning off animations.");
            	}
            	if(!jumpPoseAnimation && canJump) {
            		_animation = null;
            		Debug.Log("No jump animation found and the character has canJump enabled. Turning off animations.");
            	}
            			
            }
            
            
            function UpdateSmoothedMovementDirection ()
            {
            	var cameraTransform = Camera.main.transform;
            	var grounded = IsGrounded();
            	
            	// Forward vector relative to the camera along the x-z plane	
            	var forward = cameraTransform.TransformDirection(Vector3.forward);
            	forward.y = 0;
            	forward = forward.normalized;
            
            	// Right vector relative to the camera
            	// Always orthogonal to the forward vector
            	var right = Vector3(forward.z, 0, -forward.x);
            
            //	var v = Input.GetAxisRaw("Vertical");
            //	//var h = Input.mousePosition();
            //   var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition);
            //   
                 // Get the mouse delta. This is not in the range -1...1
                var h : float = horizontalSpeed * Input.GetAxis ("Mouse X");
                var v : float = verticalSpeed * Input.GetAxis ("Mouse Y");
                
                
                transform.Rotate (v, h, 0);
               
               
            	// Are we moving backwards or looking backwards
            	if (v < -0.2)
            		movingBack = true;
            	else
            		movingBack = false;
            	
            	var wasMoving = isMoving;
            	isMoving = Mathf.Abs (h) > 0.1 || Mathf.Abs (v) > 0.1;
            		
            	// Target direction relative to the camera
            	var targetDirection = h * right + v * forward;
            	
            	// Grounded controls
            	if (grounded)
            	{
            		// Lock camera for short period when transitioning moving & standing still
            		lockCameraTimer += Time.deltaTime;
            		if (isMoving != wasMoving)
            			lockCameraTimer = 0.0;
            
            		// We store speed and direction seperately,
            		// so that when the character stands still we still have a valid forward direction
            		// moveDirection is always normalized, and we only update it if there is user input.
            		if (targetDirection != Vector3.zero)
            		{
            			// If we are really slow, just snap to the target direction
            			if (moveSpeed < walkSpeed * 0.9 && grounded)
            			{
            				moveDirection = targetDirection.normalized;
            			}
            			// Otherwise smoothly turn towards it
            			else
            			{
            				moveDirection = Vector3.RotateTowards(moveDirection, targetDirection, rotateSpeed * Mathf.Deg2Rad * Time.deltaTime, 1000);
            				
            				moveDirection = moveDirection.normalized;
            			}
            		}
            		
            		// Smooth the speed based on the current target direction
            		var curSmooth = speedSmoothing * Time.deltaTime;
            		
            		// Choose target speed
            		//* We want to support analog input but make sure you cant walk faster diagonally than just forward or sideways
            		var targetSpeed = Mathf.Min(targetDirection.magnitude, 1.0);
            	
            		_characterState = CharacterState.Idle;
            		
            		// Pick speed modifier
            		if (Input.GetKeyDown(KeyCode.Mouse0) | Input.GetKeyDown(KeyCode.Mouse1))
            		{
            			targetSpeed *= runSpeed;
            			_characterState = CharacterState.Running;
            		}
            		else if (Time.time - trotAfterSeconds > walkTimeStart)
            		{
            			targetSpeed *= trotSpeed;
            			_characterState = CharacterState.Trotting;
            		}
            		else
            		{
            			targetSpeed *= walkSpeed;
            			_characterState = CharacterState.Walking;
            		}
            		
            		moveSpeed = Mathf.Lerp(moveSpeed, targetSpeed, curSmooth);
            		
            		// Reset walk time start when we slow down
            		if (moveSpeed < walkSpeed * 0.3)
            			walkTimeStart = Time.time;
            	}
            	// In air controls
            	else
            	{
            		// Lock camera while in air
            		if (jumping)
            			lockCameraTimer = 0.0;
            
            		if (isMoving)
            			inAirVelocity += targetDirection.normalized * Time.deltaTime * inAirControlAcceleration;
            	}
            	
            
            		
            }
            
            
            function ApplyJumping ()
            {
            	// Prevent jumping too fast after each other
            	if (lastJumpTime + jumpRepeatTime > Time.time)
            		return;
            
            	if (IsGrounded()) {
            		// Jump
            		// - Only when pressing the button down
            		// - With a timeout so you can press the button slightly before landing		
            		if (canJump && Time.time < lastJumpButtonTime + jumpTimeout) {
            			verticalSpeed = CalculateJumpVerticalSpeed (jumpHeight);
            			SendMessage("DidJump", SendMessageOptions.DontRequireReceiver);
            		}
            	}
            }
            
            
            function ApplyGravity ()
            {
            	if (isControllable)	// don't move player at all if not controllable.
            	{
            		// Apply gravity
            		var jumpButton = Input.GetButton("Jump");
            		
            		
            		// When we reach the apex of the jump we send out a message
            		if (jumping && !jumpingReachedApex && verticalSpeed <= 0.0)
            		{
            			jumpingReachedApex = true;
            			SendMessage("DidJumpReachApex", SendMessageOptions.DontRequireReceiver);
            		}
            	
            		if (IsGrounded ())
            			verticalSpeed = 0.0;
            		else
            			verticalSpeed -= gravity * Time.deltaTime;
            	}
            }
            
            function CalculateJumpVerticalSpeed (targetJumpHeight : float)
            {
            	// From the jump height and gravity we deduce the upwards speed 
            	// for the character to reach at the apex.
            	return Mathf.Sqrt(2 * targetJumpHeight * gravity);
            }
            
            function DidJump ()
            {
            	jumping = true;
            	jumpingReachedApex = false;
            	lastJumpTime = Time.time;
            	lastJumpStartHeight = transform.position.y;
            	lastJumpButtonTime = -10;
            	
            	_characterState = CharacterState.Jumping;
            }
            
            function Update() {
            	 if(Input.GetKeyDown(KeyCode.Mouse0))
                {
                    var playerPlane = new Plane(Vector3.up, transform.position);
                    var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
                    var hitdist = 0.0;
                    
                    if (playerPlane.Raycast (ray, hitdist)) {
                        var targetPoint = ray.GetPoint(hitdist);
                        targetPosition = ray.GetPoint(hitdist);
                        var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
                        transform.rotation = targetRotation;
            //            if (lastJumpTime + jumpRepeatTime > Time.time)
            //		return;
            				
            		if (canJump && Time.time < lastJumpButtonTime + jumpTimeout) {
            			verticalSpeed = CalculateJumpVerticalSpeed (jumpHeight);
            			SendMessage("DidJump", SendMessageOptions.DontRequireReceiver);
            		}
                       }
            //        }elseif (IsGrounded()) {
            		// Jump
            		// - Only when pressing the button down
            		// - With a timeout so you can press the button slightly before landing	      
            		// Prevent jumping too fast after each other
            	
            	
            //        {
            //         targetPoint=Vector3.up * 2 *Time.smoothDeltaTime;
            //         }
                }
                  transform.position = Vector3.MoveTowards(transform.position, targetPosition, Time.deltaTime * speed);
                  
            	if (!isControllable)
            	{
            		// kill all inputs if not controllable.
            		Input.ResetInputAxes();
            	}
            
            	  if(Input.GetKeyDown(KeyCode.Mouse0))
            	{
            		lastJumpButtonTime = Time.time;
            	}
            
            	UpdateSmoothedMovementDirection();
            	
            	// Apply gravity
            	// - extra power jump modifies gravity
            	// - controlledDescent mode modifies gravity
            	ApplyGravity ();
            
            	// Apply jumping logic
            	ApplyJumping ();
            	
            	// Calculate actual motion
            	var movement = moveDirection * moveSpeed + Vector3 (0, verticalSpeed, 0) + inAirVelocity;
            	movement *= Time.deltaTime;
            	
            	// Move the controller
            	var controller : CharacterController = GetComponent(CharacterController);
            	collisionFlags = controller.Move(movement);
            	
            	// ANIMATION sector
            	if(_animation) {
            		if(_characterState == CharacterState.Jumping) 
            		{
            			if(!jumpingReachedApex) {
            				_animation[jumpPoseAnimation.name].speed = jumpAnimationSpeed;
            				_animation[jumpPoseAnimation.name].wrapMode = WrapMode.ClampForever;
            				_animation.CrossFade(jumpPoseAnimation.name);
            			} else {
            				_animation[jumpPoseAnimation.name].speed = -landAnimationSpeed;
            				_animation[jumpPoseAnimation.name].wrapMode = WrapMode.ClampForever;
            				_animation.CrossFade(jumpPoseAnimation.name);				
            			}
            		} 
            		else 
            		{
            			if(controller.velocity.sqrMagnitude < 0.1) {
            				_animation.CrossFade(idleAnimation.name);
            			}
            			else 
            			{
            				if(_characterState == CharacterState.Running) {
            					_animation[runAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, runMaxAnimationSpeed);
            					_animation.CrossFade(runAnimation.name);	
            				}
            				else if(_characterState == CharacterState.Trotting) {
            					_animation[walkAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, trotMaxAnimationSpeed);
            					_animation.CrossFade(walkAnimation.name);	
            				}
            				else if(_characterState == CharacterState.Walking) {
            					_animation[walkAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, walkMaxAnimationSpeed);
            					_animation.CrossFade(walkAnimation.name);	
            				}
            				
            			}
            		}
            	}
            	// ANIMATION sector
            	var target : Transform;
            	// Set rotation to the move direction
            	if (IsGrounded())
            	{
            //		//  var relativePos = target.position - transform.position;
            //    var rotation = Quaternion.LookRotation(relativePos);
            //    transform.rotation = rotation;
            //		//transform.rotation = Quaternion.LookRotation(Input.GetRotation);
            //			
            	}	
            	else
            	{
            		var xzMove = movement;
            		xzMove.x = 0;
            		if (xzMove.sqrMagnitude > 0.001)
            		{
            //			 // var relativePos = target.position - transform.position;
            //    var rotation = Quaternion.LookRotation(relativePos);
            //    transform.rotation = rotation;
            		}
            	}	
            	
            	// We are in jump mode but just became grounded
            	if (IsGrounded())
            	{
            		lastGroundedTime = Time.time;
            		inAirVelocity = Vector3.zero;
            		if (jumping)
            		{
            			jumping = false;
            			SendMessage("DidLand", SendMessageOptions.DontRequireReceiver);
            		}
            	}
            }
            
            function OnControllerColliderHit (hit : ControllerColliderHit )
            {
            //	Debug.DrawRay(hit.point, hit.normal);
            	if (hit.moveDirection.y > 0.01) 
            		return;
            }
            
            function GetSpeed () {
            	return moveSpeed;
            }
            
            function IsJumping () {
            	return jumping;
            }
            
            function IsGrounded () {
            	return (collisionFlags & CollisionFlags.CollidedBelow) != 0;
            }
            
            function GetDirection () {
            	return moveDirection;
            }
            
            function IsMovingBackwards () {
            	return movingBack;
            }
            
            function GetLockCameraTimer () 
            {
            	return lockCameraTimer;
            }
            
            function IsMoving ()  : boolean
            {
            	return Mathf.Abs(Input.GetAxisRaw("Vertical")) + Mathf.Abs(Input.GetAxisRaw("Horizontal")) > 0.5;//(
            }
            
            function HasJumpReachedApex ()
            {
            	return jumpingReachedApex;
            }
            
            function IsGroundedWithTimeout ()
            {
            	return lastGroundedTime + groundedTimeout > Time.time;
            }
            
            function Reset ()
            {
            	gameObject.tag = "Player";
            }


            اذا يوجد اخطاء في الحركة سامحوني بها

            محاولات لا بأس بها

            تعليق


            • #36
              الباكج سوف اضعه اليكم بعد تصحيح الأخطاء الذي واجهتها في البرمجة بالنسبة للحركة الماوس في الشخصية

              هذا الباكج الحركي للنقطة للماوس

              مقسمة الى ثلاثة مراحل
              1 - Part1_with_Animation_Point_To_Point
              2- Part2_Animation_CharaterController_Point
              3- Part3_Animation_C_Controller_Final




              http://www.mediafire.com/?v1s7vgiy22h0ki3


              Bouns
              Voxel يوجد مع الباكج هدية متواضعة وهي برمجة انشاء بطريقتي البرمجية الخاصة

              تعليق


              • #37
                عليكم السلام ورحمة الله وبركاته
                تحية طيبة للأعضاء والأصدقاء الكرام
                مع اني منقطع عن المنتدي ودخولي كل فترة لكن السؤال يحمس
                عندي فكرة غير مجربه

                اولا تحديد النقطة المطلوب القفز لها سهلة Raycast ودوران اللاعب لها سهل باستخدام LookRotation

                فكرة القفز عن طريق تحديد منطقة الوسط (Vector3) بين اللاعب ونقطة القفز والمعادلة سهلة
                var center = (transform.position + targetPoint) / 2
                ثم تحديد الارتفاع المطلوب للقفزة
                center.y = 5

                واخيرا كود التحريك اولا باتجاه نقطة الوسط وهو المنحني لأعلي وبعد الوصول التحريك للنقطة المطلوبة القفز لها وهو المنحني لاسفل

                مشاركة بسيطة أتمني تفيد , بالتوفيق
                {قل لي وسوف أنسى, أرني ولعلي أتذكر, أشركني وسوف أفهم}

                تعليق


                • #38
                  المشاركة الأصلية بواسطة GameGun مشاهدة المشاركة
                  عليكم السلام ورحمة الله وبركاته
                  تحية طيبة للأعضاء والأصدقاء الكرام
                  مع اني منقطع عن المنتدي ودخولي كل فترة لكن السؤال يحمس
                  عندي فكرة غير مجربه

                  اولا تحديد النقطة المطلوب القفز لها سهلة Raycast ودوران اللاعب لها سهل باستخدام LookRotation

                  فكرة القفز عن طريق تحديد منطقة الوسط (Vector3) بين اللاعب ونقطة القفز والمعادلة سهلة
                  var center = (transform.position + targetPoint) / 2
                  ثم تحديد الارتفاع المطلوب للقفزة
                  center.y = 5

                  واخيرا كود التحريك اولا باتجاه نقطة الوسط وهو المنحني لأعلي وبعد الوصول التحريك للنقطة المطلوبة القفز لها وهو المنحني لاسفل

                  مشاركة بسيطة أتمني تفيد , بالتوفيق
                  عاش مين شافك

                  أنا هيك كانت فكرتي بس خفت يكونها خطأ مشان هيك ما كتبتها

                  تعليق


                  • #39



                    واخيرا حصلت لك السكربت وهو عبارة مسار منحى بين نقطة البداية ونقطة النهاية

                    كود PHP:
                    var startPosition Vector3 Vector3(-10,0,0); //The starting position in world space
                    var endPosition Vector3 Vector3(10,0,0);    //The ending position in world space
                    var bending Vector3 Vector3.up;          //Bend factor (on all axes)
                    var timeToTravel float 10.0;          //The total time it takes to move from start- to end position

                    function Start () {
                        
                    MoveToPosition();
                    }

                    function 
                    MoveToPosition () {
                        var 
                    timeStamp float Time.time;
                        while (
                    Time.time<timeStamp+timeToTravel) {
                           var 
                    currentPos Vector3 Vector3.Lerp(startPositionendPosition, (Time.time timeStamp)/timeToTravel);

                           
                    currentPos.+= bending.x*Mathf.Sin(Mathf.Clamp01((Time.time timeStamp)/timeToTravel) * Mathf.PI);
                           
                    currentPos.+= bending.y*Mathf.Sin(Mathf.Clamp01((Time.time timeStamp)/timeToTravel) * Mathf.PI);
                           
                    currentPos.+= bending.z*Mathf.Sin(Mathf.Clamp01((Time.time timeStamp)/timeToTravel) * Mathf.PI);

                           
                    transform.position currentPos;

                           yield;
                        }


                    رابط الموضوع وهو جدااا مفيييد

                    http://answers.unity3d.com/questions...urvy-line.html
                    اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
                    وتفتك باعدائك اعداء الدين


                    تعليق


                    • #40
                      المشاركة الأصلية بواسطة GameGun مشاهدة المشاركة
                      عليكم السلام ورحمة الله وبركاته
                      تحية طيبة للأعضاء والأصدقاء الكرام
                      مع اني منقطع عن المنتدي ودخولي كل فترة لكن السؤال يحمس
                      عندي فكرة غير مجربه

                      اولا تحديد النقطة المطلوب القفز لها سهلة Raycast ودوران اللاعب لها سهل باستخدام LookRotation

                      فكرة القفز عن طريق تحديد منطقة الوسط (Vector3) بين اللاعب ونقطة القفز والمعادلة سهلة
                      var center = (transform.position + targetPoint) / 2
                      ثم تحديد الارتفاع المطلوب للقفزة
                      center.y = 5

                      واخيرا كود التحريك اولا باتجاه نقطة الوسط وهو المنحني لأعلي وبعد الوصول التحريك للنقطة المطلوبة القفز لها وهو المنحني لاسفل

                      مشاركة بسيطة أتمني تفيد , بالتوفيق
                      Welcome back

                      شكرا على المشاركة

                      ولكن
                      واخيرا كود التحريك اولا باتجاه نقطة الوسط وهو المنحني لأعلي وبعد الوصول التحريك للنقطة المطلوبة القفز لها وهو المنحني لاسفل
                      هذة هى المشكلة فالباقى سهل
                      -:| My Games |:-
                      AfterEarth Online SOON

                      -:| Contact Us |:-
                      Facebook Page :- NTStudio

                      تعليق


                      • #41
                        المشاركة الأصلية بواسطة omarzonex مشاهدة المشاركة
                        وهذه مع حركة الكنترول للشخصية مع الماوس

                        استخدم كود الشخصية الكنترول للتصبح القفزة مناسبة
                        ThirdPersonController




                        كود:
                        // Require a character controller to be attached to the same game object
                        @script RequireComponent(CharacterController)
                        
                        public var idleAnimation : AnimationClip;
                        public var walkAnimation : AnimationClip;
                        public var runAnimation : AnimationClip;
                        public var jumpPoseAnimation : AnimationClip;
                        
                        public var walkMaxAnimationSpeed : float = 0.75;
                        public var trotMaxAnimationSpeed : float = 1.0;
                        public var runMaxAnimationSpeed : float = 1.0;
                        public var jumpAnimationSpeed : float = 1.15;
                        public var landAnimationSpeed : float = 1.0;
                        
                        private var _animation : Animation;
                        
                        enum CharacterState {
                        	Idle = 0,
                        	Walking = 1,
                        	Trotting = 2,
                        	Running = 3,
                        	Jumping = 4,
                        }
                        
                        private var _characterState : CharacterState;
                        
                        // The speed when walking
                        var walkSpeed = 2.0;
                        // after trotAfterSeconds of walking we trot with trotSpeed
                        var trotSpeed = 4.0;
                        // when pressing "Fire3" button (cmd) we start running
                        var runSpeed = 6.0;
                        
                        var inAirControlAcceleration = 3.0;
                        
                        // How high do we jump when pressing jump and letting go immediately
                        var jumpHeight = 0.5;
                        
                        // The gravity for the character
                        var gravity = 20.0;
                        // The gravity in controlled descent mode
                        var speedSmoothing = 10.0;
                        var rotateSpeed = 500.0;
                        var trotAfterSeconds = 3.0;
                        
                        var canJump = true;
                        
                        private var jumpRepeatTime = 0.05;
                        private var jumpTimeout = 0.15;
                        private var groundedTimeout = 0.25;
                        
                        // The camera doesnt start following the target immediately but waits for a split second to avoid too much waving around.
                        private var lockCameraTimer = 0.0;
                        
                        // The current move direction in x-z
                        private var moveDirection = Vector3.zero;
                        // The current vertical speed
                        //private var verticalSpeed = 0.0;
                        // The current x-z move speed
                        private var moveSpeed = 0.0;
                        
                        // The last collision flags returned from controller.Move
                        private var collisionFlags : CollisionFlags; 
                        
                        // Are we jumping? (Initiated with jump button and not grounded yet)
                        private var jumping = false;
                        private var jumpingReachedApex = false;
                        
                        // Are we moving backwards (This locks the camera to not do a 180 degree spin)
                        private var movingBack = false;
                        // Is the user pressing any keys?
                        private var isMoving = false;
                        // When did the user start walking (Used for going into trot after a while)
                        private var walkTimeStart = 0.0;
                        // Last time the jump button was clicked down
                        private var lastJumpButtonTime = -10.0;
                        // Last time we performed a jump
                        private var lastJumpTime = -1.0;
                        
                        
                        // the height we jumped from (Used to determine for how long to apply extra jump power after jumping.)
                        private var lastJumpStartHeight = 0.0;
                        
                        
                        private var inAirVelocity = Vector3.zero;
                        
                        private var lastGroundedTime = 0.0;
                        
                        
                        private var isControllable = true;
                        var smooth:int; // Determines how quickly object moves towards position
                        var speed : float=2;
                        var horizontalSpeed : float = 2.0;
                        var verticalSpeed : float = 2.0;
                        private var targetPosition:Vector3;
                        //
                        function Awake ()
                        {
                        	moveDirection = transform.TransformDirection(Vector3.forward);
                        	
                        	_animation = GetComponent(Animation);
                        	if(!_animation)
                        		Debug.Log("The character you would like to control doesn't have animations. Moving her might look weird.");
                        	
                        	/*
                        public var idleAnimation : AnimationClip;
                        public var walkAnimation : AnimationClip;
                        public var runAnimation : AnimationClip;
                        public var jumpPoseAnimation : AnimationClip;	
                        	*/
                        	if(!idleAnimation) {
                        		_animation = null;
                        		Debug.Log("No idle animation found. Turning off animations.");
                        	}
                        	if(!walkAnimation) {
                        		_animation = null;
                        		Debug.Log("No walk animation found. Turning off animations.");
                        	}
                        	if(!runAnimation) {
                        		_animation = null;
                        		Debug.Log("No run animation found. Turning off animations.");
                        	}
                        	if(!jumpPoseAnimation && canJump) {
                        		_animation = null;
                        		Debug.Log("No jump animation found and the character has canJump enabled. Turning off animations.");
                        	}
                        			
                        }
                        
                        
                        function UpdateSmoothedMovementDirection ()
                        {
                        	var cameraTransform = Camera.main.transform;
                        	var grounded = IsGrounded();
                        	
                        	// Forward vector relative to the camera along the x-z plane	
                        	var forward = cameraTransform.TransformDirection(Vector3.forward);
                        	forward.y = 0;
                        	forward = forward.normalized;
                        
                        	// Right vector relative to the camera
                        	// Always orthogonal to the forward vector
                        	var right = Vector3(forward.z, 0, -forward.x);
                        
                        //	var v = Input.GetAxisRaw("Vertical");
                        //	//var h = Input.mousePosition();
                        //   var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition);
                        //   
                             // Get the mouse delta. This is not in the range -1...1
                            var h : float = horizontalSpeed * Input.GetAxis ("Mouse X");
                            var v : float = verticalSpeed * Input.GetAxis ("Mouse Y");
                            
                            
                            transform.Rotate (v, h, 0);
                           
                           
                        	// Are we moving backwards or looking backwards
                        	if (v < -0.2)
                        		movingBack = true;
                        	else
                        		movingBack = false;
                        	
                        	var wasMoving = isMoving;
                        	isMoving = Mathf.Abs (h) > 0.1 || Mathf.Abs (v) > 0.1;
                        		
                        	// Target direction relative to the camera
                        	var targetDirection = h * right + v * forward;
                        	
                        	// Grounded controls
                        	if (grounded)
                        	{
                        		// Lock camera for short period when transitioning moving & standing still
                        		lockCameraTimer += Time.deltaTime;
                        		if (isMoving != wasMoving)
                        			lockCameraTimer = 0.0;
                        
                        		// We store speed and direction seperately,
                        		// so that when the character stands still we still have a valid forward direction
                        		// moveDirection is always normalized, and we only update it if there is user input.
                        		if (targetDirection != Vector3.zero)
                        		{
                        			// If we are really slow, just snap to the target direction
                        			if (moveSpeed < walkSpeed * 0.9 && grounded)
                        			{
                        				moveDirection = targetDirection.normalized;
                        			}
                        			// Otherwise smoothly turn towards it
                        			else
                        			{
                        				moveDirection = Vector3.RotateTowards(moveDirection, targetDirection, rotateSpeed * Mathf.Deg2Rad * Time.deltaTime, 1000);
                        				
                        				moveDirection = moveDirection.normalized;
                        			}
                        		}
                        		
                        		// Smooth the speed based on the current target direction
                        		var curSmooth = speedSmoothing * Time.deltaTime;
                        		
                        		// Choose target speed
                        		//* We want to support analog input but make sure you cant walk faster diagonally than just forward or sideways
                        		var targetSpeed = Mathf.Min(targetDirection.magnitude, 1.0);
                        	
                        		_characterState = CharacterState.Idle;
                        		
                        		// Pick speed modifier
                        		if (Input.GetKeyDown(KeyCode.Mouse0) | Input.GetKeyDown(KeyCode.Mouse1))
                        		{
                        			targetSpeed *= runSpeed;
                        			_characterState = CharacterState.Running;
                        		}
                        		else if (Time.time - trotAfterSeconds > walkTimeStart)
                        		{
                        			targetSpeed *= trotSpeed;
                        			_characterState = CharacterState.Trotting;
                        		}
                        		else
                        		{
                        			targetSpeed *= walkSpeed;
                        			_characterState = CharacterState.Walking;
                        		}
                        		
                        		moveSpeed = Mathf.Lerp(moveSpeed, targetSpeed, curSmooth);
                        		
                        		// Reset walk time start when we slow down
                        		if (moveSpeed < walkSpeed * 0.3)
                        			walkTimeStart = Time.time;
                        	}
                        	// In air controls
                        	else
                        	{
                        		// Lock camera while in air
                        		if (jumping)
                        			lockCameraTimer = 0.0;
                        
                        		if (isMoving)
                        			inAirVelocity += targetDirection.normalized * Time.deltaTime * inAirControlAcceleration;
                        	}
                        	
                        
                        		
                        }
                        
                        
                        function ApplyJumping ()
                        {
                        	// Prevent jumping too fast after each other
                        	if (lastJumpTime + jumpRepeatTime > Time.time)
                        		return;
                        
                        	if (IsGrounded()) {
                        		// Jump
                        		// - Only when pressing the button down
                        		// - With a timeout so you can press the button slightly before landing		
                        		if (canJump && Time.time < lastJumpButtonTime + jumpTimeout) {
                        			verticalSpeed = CalculateJumpVerticalSpeed (jumpHeight);
                        			SendMessage("DidJump", SendMessageOptions.DontRequireReceiver);
                        		}
                        	}
                        }
                        
                        
                        function ApplyGravity ()
                        {
                        	if (isControllable)	// don't move player at all if not controllable.
                        	{
                        		// Apply gravity
                        		var jumpButton = Input.GetButton("Jump");
                        		
                        		
                        		// When we reach the apex of the jump we send out a message
                        		if (jumping && !jumpingReachedApex && verticalSpeed <= 0.0)
                        		{
                        			jumpingReachedApex = true;
                        			SendMessage("DidJumpReachApex", SendMessageOptions.DontRequireReceiver);
                        		}
                        	
                        		if (IsGrounded ())
                        			verticalSpeed = 0.0;
                        		else
                        			verticalSpeed -= gravity * Time.deltaTime;
                        	}
                        }
                        
                        function CalculateJumpVerticalSpeed (targetJumpHeight : float)
                        {
                        	// From the jump height and gravity we deduce the upwards speed 
                        	// for the character to reach at the apex.
                        	return Mathf.Sqrt(2 * targetJumpHeight * gravity);
                        }
                        
                        function DidJump ()
                        {
                        	jumping = true;
                        	jumpingReachedApex = false;
                        	lastJumpTime = Time.time;
                        	lastJumpStartHeight = transform.position.y;
                        	lastJumpButtonTime = -10;
                        	
                        	_characterState = CharacterState.Jumping;
                        }
                        
                        function Update() {
                        	 if(Input.GetKeyDown(KeyCode.Mouse0))
                            {
                                var playerPlane = new Plane(Vector3.up, transform.position);
                                var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
                                var hitdist = 0.0;
                                
                                if (playerPlane.Raycast (ray, hitdist)) {
                                    var targetPoint = ray.GetPoint(hitdist);
                                    targetPosition = ray.GetPoint(hitdist);
                                    var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
                                    transform.rotation = targetRotation;
                        //            if (lastJumpTime + jumpRepeatTime > Time.time)
                        //		return;
                        				
                        		if (canJump && Time.time < lastJumpButtonTime + jumpTimeout) {
                        			verticalSpeed = CalculateJumpVerticalSpeed (jumpHeight);
                        			SendMessage("DidJump", SendMessageOptions.DontRequireReceiver);
                        		}
                                   }
                        //        }elseif (IsGrounded()) {
                        		// Jump
                        		// - Only when pressing the button down
                        		// - With a timeout so you can press the button slightly before landing	      
                        		// Prevent jumping too fast after each other
                        	
                        	
                        //        {
                        //         targetPoint=Vector3.up * 2 *Time.smoothDeltaTime;
                        //         }
                            }
                              transform.position = Vector3.MoveTowards(transform.position, targetPosition, Time.deltaTime * speed);
                              
                        	if (!isControllable)
                        	{
                        		// kill all inputs if not controllable.
                        		Input.ResetInputAxes();
                        	}
                        
                        	  if(Input.GetKeyDown(KeyCode.Mouse0))
                        	{
                        		lastJumpButtonTime = Time.time;
                        	}
                        
                        	UpdateSmoothedMovementDirection();
                        	
                        	// Apply gravity
                        	// - extra power jump modifies gravity
                        	// - controlledDescent mode modifies gravity
                        	ApplyGravity ();
                        
                        	// Apply jumping logic
                        	ApplyJumping ();
                        	
                        	// Calculate actual motion
                        	var movement = moveDirection * moveSpeed + Vector3 (0, verticalSpeed, 0) + inAirVelocity;
                        	movement *= Time.deltaTime;
                        	
                        	// Move the controller
                        	var controller : CharacterController = GetComponent(CharacterController);
                        	collisionFlags = controller.Move(movement);
                        	
                        	// ANIMATION sector
                        	if(_animation) {
                        		if(_characterState == CharacterState.Jumping) 
                        		{
                        			if(!jumpingReachedApex) {
                        				_animation[jumpPoseAnimation.name].speed = jumpAnimationSpeed;
                        				_animation[jumpPoseAnimation.name].wrapMode = WrapMode.ClampForever;
                        				_animation.CrossFade(jumpPoseAnimation.name);
                        			} else {
                        				_animation[jumpPoseAnimation.name].speed = -landAnimationSpeed;
                        				_animation[jumpPoseAnimation.name].wrapMode = WrapMode.ClampForever;
                        				_animation.CrossFade(jumpPoseAnimation.name);				
                        			}
                        		} 
                        		else 
                        		{
                        			if(controller.velocity.sqrMagnitude < 0.1) {
                        				_animation.CrossFade(idleAnimation.name);
                        			}
                        			else 
                        			{
                        				if(_characterState == CharacterState.Running) {
                        					_animation[runAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, runMaxAnimationSpeed);
                        					_animation.CrossFade(runAnimation.name);	
                        				}
                        				else if(_characterState == CharacterState.Trotting) {
                        					_animation[walkAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, trotMaxAnimationSpeed);
                        					_animation.CrossFade(walkAnimation.name);	
                        				}
                        				else if(_characterState == CharacterState.Walking) {
                        					_animation[walkAnimation.name].speed = Mathf.Clamp(controller.velocity.magnitude, 0.0, walkMaxAnimationSpeed);
                        					_animation.CrossFade(walkAnimation.name);	
                        				}
                        				
                        			}
                        		}
                        	}
                        	// ANIMATION sector
                        	var target : Transform;
                        	// Set rotation to the move direction
                        	if (IsGrounded())
                        	{
                        //		//  var relativePos = target.position - transform.position;
                        //    var rotation = Quaternion.LookRotation(relativePos);
                        //    transform.rotation = rotation;
                        //		//transform.rotation = Quaternion.LookRotation(Input.GetRotation);
                        //			
                        	}	
                        	else
                        	{
                        		var xzMove = movement;
                        		xzMove.x = 0;
                        		if (xzMove.sqrMagnitude > 0.001)
                        		{
                        //			 // var relativePos = target.position - transform.position;
                        //    var rotation = Quaternion.LookRotation(relativePos);
                        //    transform.rotation = rotation;
                        		}
                        	}	
                        	
                        	// We are in jump mode but just became grounded
                        	if (IsGrounded())
                        	{
                        		lastGroundedTime = Time.time;
                        		inAirVelocity = Vector3.zero;
                        		if (jumping)
                        		{
                        			jumping = false;
                        			SendMessage("DidLand", SendMessageOptions.DontRequireReceiver);
                        		}
                        	}
                        }
                        
                        function OnControllerColliderHit (hit : ControllerColliderHit )
                        {
                        //	Debug.DrawRay(hit.point, hit.normal);
                        	if (hit.moveDirection.y > 0.01) 
                        		return;
                        }
                        
                        function GetSpeed () {
                        	return moveSpeed;
                        }
                        
                        function IsJumping () {
                        	return jumping;
                        }
                        
                        function IsGrounded () {
                        	return (collisionFlags & CollisionFlags.CollidedBelow) != 0;
                        }
                        
                        function GetDirection () {
                        	return moveDirection;
                        }
                        
                        function IsMovingBackwards () {
                        	return movingBack;
                        }
                        
                        function GetLockCameraTimer () 
                        {
                        	return lockCameraTimer;
                        }
                        
                        function IsMoving ()  : boolean
                        {
                        	return Mathf.Abs(Input.GetAxisRaw("Vertical")) + Mathf.Abs(Input.GetAxisRaw("Horizontal")) > 0.5;//(
                        }
                        
                        function HasJumpReachedApex ()
                        {
                        	return jumpingReachedApex;
                        }
                        
                        function IsGroundedWithTimeout ()
                        {
                        	return lastGroundedTime + groundedTimeout > Time.time;
                        }
                        
                        function Reset ()
                        {
                        	gameObject.tag = "Player";
                        }


                        اذا يوجد اخطاء في الحركة سامحوني بها

                        محاولات لا بأس بها
                        شكرا اخ عمر ولكن عندى سؤال فى الاسكربت هلى انت اضفت شىء فى الاسكربت او عدلت فيى عشان يقوم بالقفزة التى نريدها ام هو نفسة ال ThirdPersonController الموجود باليونتى
                        -:| My Games |:-
                        AfterEarth Online SOON

                        -:| Contact Us |:-
                        Facebook Page :- NTStudio

                        تعليق


                        • #42
                          المشاركة الأصلية بواسطة لا اعلم مشاهدة المشاركة



                          واخيرا حصلت لك السكربت وهو عبارة مسار منحى بين نقطة البداية ونقطة النهاية

                          كود PHP:
                          var startPosition Vector3 Vector3(-10,0,0); //The starting position in world space
                          var endPosition Vector3 Vector3(10,0,0);    //The ending position in world space
                          var bending Vector3 Vector3.up;          //Bend factor (on all axes)
                          var timeToTravel float 10.0;          //The total time it takes to move from start- to end position

                          function Start () {
                              
                          MoveToPosition();
                          }

                          function 
                          MoveToPosition () {
                              var 
                          timeStamp float Time.time;
                              while (
                          Time.time<timeStamp+timeToTravel) {
                                 var 
                          currentPos Vector3 Vector3.Lerp(startPositionendPosition, (Time.time timeStamp)/timeToTravel);

                                 
                          currentPos.+= bending.x*Mathf.Sin(Mathf.Clamp01((Time.time timeStamp)/timeToTravel) * Mathf.PI);
                                 
                          currentPos.+= bending.y*Mathf.Sin(Mathf.Clamp01((Time.time timeStamp)/timeToTravel) * Mathf.PI);
                                 
                          currentPos.+= bending.z*Mathf.Sin(Mathf.Clamp01((Time.time timeStamp)/timeToTravel) * Mathf.PI);

                                 
                          transform.position currentPos;

                                 yield;
                              }


                          رابط الموضوع وهو جدااا مفيييد

                          http://answers.unity3d.com/questions...urvy-line.html
                          انا عملت كام شغلة كدا بس هجرب دة وهرد عليك

                          شكرا للمساعدة الجدية
                          -:| My Games |:-
                          AfterEarth Online SOON

                          -:| Contact Us |:-
                          Facebook Page :- NTStudio

                          تعليق


                          • #43
                            اسف على التأخير بس للاسف راح يتعطل الموضوع شوى عشان فى شغلة لازم اعملها اليومين دول
                            راح نكمل الموضوع يوم الجمعة القادم ان شاء الله

                            _____________

                            اهم المشاكل الى قبلتنى هى:

                            دالة SimpleMove لا تصلح بسبب وجود الجازبية بها
                            دالة Move دالة غريبة وعجيبة والتعامل معاها صعب ورخم (بس هحاول لان دة الامل الوحيد بدون صناعة CharacterController من الصفر)
                            دالة Translate مشكلتها انها لا تعترف بال Collider لذلك لا تصلح لتحريك الشخصية

                            مما تبينتة ان امامنا خيارين :
                            الاول :محاولة التعامل مع دالة Move وتطبيق القفزة عليها
                            الثانى: صناعة CharacterController من الصفر ودة شىء صعب كتير

                            شكرا لكل من ساعد بالموضوع
                            -:| My Games |:-
                            AfterEarth Online SOON

                            -:| Contact Us |:-
                            Facebook Page :- NTStudio

                            تعليق


                            • #44
                              المشاركة الأصلية بواسطة NTSoft مشاهدة المشاركة
                              شكرا اخ عمر ولكن عندى سؤال فى الاسكربت هلى انت اضفت شىء فى الاسكربت او عدلت فيى عشان يقوم بالقفزة التى نريدها ام هو نفسة ال ThirdPersonController الموجود باليونتى
                              هذه معدلة مع الأضافة متغيرات للماوس للتصحيح القفزة بالماوس


                              يوجد فرق بين الكود الجاهز والمضافة كود اخر للقفزة بطريقة الخطأ العشوائي


                              قارن بينهما وستلاجظ الفرق

                              تعليق


                              • #45
                                المشاركة الأصلية بواسطة omarzonex مشاهدة المشاركة
                                هذه معدلة مع الأضافة متغيرات للماوس للتصحيح القفزة بالماوس


                                يوجد فرق بين الكود الجاهز والمضافة كود اخر للقفزة بطريقة الخطأ العشوائي


                                قارن بينهما وستلاجظ الفرق
                                هل القفزة على شكل منحنى مثل المبين بالفيديو فى الردود الاولى ام ماذا ؟
                                -:| My Games |:-
                                AfterEarth Online SOON

                                -:| Contact Us |:-
                                Facebook Page :- NTStudio

                                تعليق

                                يعمل...
                                X