امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
کلمات کلیدی
اسکریپت های مخصوص گیم پلی

اسکریپت های مخصوص گیم پلی
#1
اسکریپت حرکت به جایی که کلیک کردیم move2click در یونیتی:
کد js :
کد php:
// Click To Move script
// Moves the object towards the mouse position on left mouse click
 
var smooth:int=1// Determines how quickly object moves towards position
 
private var targetPosition:Vector3;
 
function 
Update () {
    if(
Input.GetKeyDown(KeyCode.Mouse0))
    {
        var 
playerPlane = new Plane(Vector3.uptransform.position);
        var 
ray Camera.main.ScreenPointToRay (Input.mousePosition);
        var 
hitdist 0.0;
 
        if (
playerPlane.Raycast (rayhitdist)) {
            var 
targetPoint ray.GetPoint(hitdist);
            
targetPosition ray.GetPoint(hitdist);
            var 
targetRotation Quaternion.LookRotation(targetPoint transform.position);
            
transform.rotation targetRotation;
        }
    }
 
    
transform.position Vector3.Lerp (transform.positiontargetPositionTime.deltaTime smooth);

اسکریپت بالا به زبون js هست.بندازید روی player.اجرا کنید. هرجا کلیک می کنید player میره اونجا.
پارامتر smooth روی 1 تظیم شده.اگه مقدارش بیشتر بشه سرعت حرکت بیشتر میشه.
نکته: اسکریپت فوق برای بازی های استراتژی از نمای کامل بالا کار نمی کنه)
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#2
اسکریپت حرکت سه بعدی پلیر در یونیتی/اسکریپت کاراکتر کنترلر:

این اسکریپت رو بدید به player .
نکته: پلیر نباید کامپونتت rigid body داشته باشه.ضمنا یک کامپوننت character controller هم بدید به player.
کد php:
#pragma strict


function Start () {

}
private var 
moveDirection Vector3 Vector3.zero;
function 
Update () {
   
 var 
speed=5;
 var 
jumpSpeed=5;
 var 
gravity=5;
        var 
controller CharacterController GetComponent(CharacterController);
        if (
controller.isGrounded) {
            
// We are grounded, so recalculate
            // move direction directly from axes
            
moveDirection Vector3(Input.GetAxis("Horizontal"), 0,
                                    
Input.GetAxis("Vertical"));
            
moveDirection transform.TransformDirection(moveDirection);
            
moveDirection *= speed;
            
            if (
Input.GetButton ("Jump")) {
                
moveDirection.jumpSpeed;
            }
        }
        
// Apply gravity
        
moveDirection.-= gravity Time.deltaTime;
        
        
// Move the controller
        
controller.Move(moveDirection Time.deltaTime);
    




اسکریپت حرکت دو بعدی player به چپ و راست در یونیتی:
کد php:
//Player.Cs
//move 2d player Left/Right Unity
//Author:Sajjad3011
using UnityEngine;
using System.Collections;

public class 
player MonoBehaviour {

    private 
Animator animator;
    private 
int walkSpeed=5;

    private 
float xScale,yScale;
    private 
bool run;

    
void Start () {
        
animator this.GetComponent<Animator> ();
        
xScale transform.localScale.x;
        
yScale transform.localScale.y;

    }

    
void Update(){ 
        if (
Input.GetKey(KeyCode.RightArrow)) {
            
run=true;
            
GetComponent<Rigidbody2D>().velocity=new Vector2(walkSpeed,GetComponent<Rigidbody2D>().velocity.y);
            
transform.localScale=new Vector2(xScale,yScale);
        }
        if (
Input.GetKey (KeyCode.LeftArrow)) {
            
run=true;
            
GetComponent<Rigidbody2D>().velocity=new Vector2(-walkSpeed,GetComponent<Rigidbody2D>().velocity.y);
            
transform.localScale=new Vector2(-xScale,yScale);
        }
        if (
Input.anyKey==false){
            
GetComponent<Rigidbody2D>().velocity=new Vector2(0,GetComponent<Rigidbody2D>().velocity.y);
            
run=false;
        }

        if (
animator != null) {
            
animator.SetBool ("run"run);

        }

    }


https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#3
حرکت دو بعدی پلیر در یونیتی به وسیله ی easy touch version 3
حرکت دو بعدی player
ویرایش:1/21/2016:

کد php:
//Player 2d move+shoot+jump+double jump
//csharp code
//Author:Sajjad3011
//unity 5.1 final
using UnityEngine;
using System.Collections;
public class 
player MonoBehaviour {
    
    public 
float speed=0.1f,jumpForce=10f;
    private 
bool grounded=false;
    public 
Animator anim;
    private 
float xScale,yScale;
    public 
Rigidbody2D rb2d;
    private 
float signX;
    
    
void Start ()
    {
        
anim=GetComponent <Animator>();
        
xScale transform.localScale.x;
        
yScale transform.localScale.y;
    }    
    
void FixedUpdate () 
    {
        if (
rb2d.velocity.== 0
        {
            
grounded=true;
            
Debug.Log ("on ground");
        } else {
            
grounded false;
            
Debug.Log ("on air");
        }
        if(
grounded && !Input.anyKey)//if we are on ground and no key pressed
        
{
            
rb2d.velocity = new Vector2 (0,0);//stop(x,y)
            
anim.SetInteger("state",1);//play idle animation
        
}
        if (
Input.GetKey (KeyCode.LeftArrow))//if Left
        
{
            
anim.SetInteger("state",2);//play Run animation
            //rb2d.velocity = new Vector2 (-speed ,rb2d.velocity.y);//move left 
            
transform.position += new Vector3(-speed00);
            
transform.localScale = new Vector2 (-xScale,yScale);//face left      
        
}
        if (
Input.GetKey (KeyCode.RightArrow))//if Right      
        
{      
            
anim.SetInteger("state",2);//play Run animation
            //rb2d.velocity = new Vector2 (speed ,rb2d.velocity.y);//move right
            
transform.position += new Vector3(+speed00);
            
transform .localScale = new Vector2 (xScale,yScale);//face right
        
}
        
        if (
Input.GetKeyUp (KeyCode.UpArrow )) jump();    
    }
//
    
    
void jump(){
        if (
grounded) {
            
rb2d.velocity = new Vector2 (rb2d.velocity.xjumpForce);
            
anim.SetInteger ("state"3);//play jump animation
            
        
}//end switch
        
else
            ;
//if on air
        //anim.SetInteger("state",4);//play double jump animation
        //anim.SetInteger("state",1);//play double jump animation
    
}//jump()
    
    
    
void On_JoystickMoveMovingJoystick move){
        
anim.SetInteger("state",2);//run
        
signX Mathf.Sign (move.joystickAxis.x);
        
transform.position += new Vector3(signX*speed00);
        
//rb2d.velocity = new Vector2 (signX *speed ,rb2d.velocity.y);
        
transform.localScale = new Vector2 (signX xScale,yScale);
        if (
move.joystickAxis.0jump ();
        
    }
    

در کد فوق اگه دقت کنید فلش چپ و راست رو با transform نوشتم و فلش بالا رو با velocity از rigidbody2d .
velocity به معنی شتاب هست و در فیزیک معمولا پرش رو بهتره با اون بسازیم که جاذبه زیباتر بشه.
اما فلش چپ و راست رو چرا با velocity نساختم دلیلش این بود که وقتی فلش راست رو رها می کردم بلافاصله کاراکتر ایست نمی کرد و یکم راه می رفت بعدش می موند که این رو من نمی خواستم.
دقت کنید که اسم اسکریپت رو بذارید player چون اسم کلاس داخل سورس بالا player هست و حتما باید اسم اسکریپت و اسم کلاس یکسان باشه(توی سیشارپ)
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#4
کد بهینه یا optimize شده حرکت/پرش/دابل جامپ/راه رفتن دو بعدی player در یونیتی 5 با استفاده از Easy touch version 3 سیشارپ
حرکت دو بعدی پلیر در یونیتی به وسیله ی easy touch version 3
حرکت دو بعدی player
ویرایش:1/25/2016:

سازنده:سجاد
در این کد افت فریم نداریم یا اگه باشه خیلی کمه و همچنین از لحاظ فلش چپ و راست هم از حالت بهینه شده ترنسفورم استفاده کردیم و متغیر کمکی به عنوان حافظه موقت.
کد php:
//optimized Player 2d move+shoot+jump+double jump
//csharp language
//Author:Sajjad3011
//unity 5.2 final
//Easy touch joystick version 3
//gameover.blog.ir
//promakers.ir
using UnityEngine;
using System.Collections;
public class 
player MonoBehaviour {
    
    public 
float speed=0.1f,jumpForce=10f;
    private 
bool grounded=false;
    public 
Animator anim;
    private 
float xScale,yScale;
    public 
Rigidbody2D rb2d;
    private 
float signX;
    private 
Transform _transform;
    
    
void Start ()
    {
        
//anim=GetComponent <Animator>();
        
xScale transform.localScale.x;
        
yScale transform.localScale.y;
        
_transform this.transform;//cache for optimization
    
}    
    
void FixedUpdate () 
    {
        if (
rb2d.velocity.== 0
        {
            
grounded=true;
            
Debug.Log ("on ground");
        } else {
            
grounded false;
            
Debug.Log ("on air");
        }
        if(
grounded && !Input.anyKey)//if we are on ground and no key pressed
        
{
            
rb2d.velocity = new Vector2 (0,0);//stop(x,y)
            
anim.SetInteger("state",1);//play idle animation
            
        
}
        if(
grounded && !Input.anyKey)//if we are on ground and no key pressed
        
{
            
rb2d.velocity = new Vector2 (0,0);//stop(x,y)
            
anim.SetInteger("state",1);//play idle animation
            
        
}
        if (
Input.GetKey (KeyCode.LeftArrow))//if Left
        
{
            
anim.SetInteger("state",2);//play Run animation
            //rb2d.velocity = new Vector2 (-speed ,rb2d.velocity.y);//move left 
            
_transform.position += new Vector3(-speed00);
            
_transform.localScale = new Vector2 (-xScale,yScale);//face left      
        
}
        if (
Input.GetKey (KeyCode.RightArrow))//if Right      
        
{      
            
anim.SetInteger("state",2);//play Run animation
            //rb2d.velocity = new Vector2 (speed ,rb2d.velocity.y);//move right
            
_transform.position += new Vector3(+speed00);
            
_transform .localScale = new Vector2 (xScale,yScale);//face right
        
}
        
        if (
Input.GetKeyUp (KeyCode.UpArrow)) StartCoroutine (jump ());
    }
//
    
    
IEnumerator jump(){
        if (
grounded) {
            
rb2d.velocity = new Vector2 (rb2d.velocity.xjumpForce);
            
anim.SetInteger ("state"3);//play jump animation
            
yield return new WaitForFixedUpdate();
            
        }
//end switch
        
else
            ;
//if on air
        //anim.SetInteger("state",4);//play double jump animation
        //anim.SetInteger("state",1);//play double jump animation
    
}//jump()
    
    
    
void On_JoystickMoveMovingJoystick move){
        
anim.SetInteger("state",2);//run    
        
signX Mathf.Sign (move.joystickAxis.x);
        
_transform.position += new Vector3(signX*speed00);
        
//rb2d.velocity = new Vector2 (signX *speed ,rb2d.velocity.y);
        
_transform.localScale = new Vector2(signX xScale,yScale);
        if (
move.joystickAxis.0StartCoroutine (jump ());
        
    }
    

در مثال فوق بای بهیته سازی ، تابع jump رو هم coRoutine کردم (IEnumerator jump)
تکنیک های بهینه سازی هم اینجا گفتم :
http://promakers.ir/showthread.php?tid=1...#pid131272
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ
#5
روش دیگه توی بهینه سازی مطرح می کنم بعدا که هی نباید instantiate و detroy کنید بعضی چیزا رو.smiley
https://telegram.me/gameoverblog
بیشتر از آنچه برای موفق بودن تلاش می کنی برای با ارزش بودن تلاش کن.آلبرت انیشتین.



پاسخ




کاربرانِ درحال بازدید از این موضوع: 1 مهمان