«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
بایگانی آذر ۱۳۹۴ :: گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

آموزش های علمی با اجازه ی خدا تقدیم به هرکس خدا بخواد

به نام خدا
--
گروه قدیم ما promakers.ir یا پرومیکرز بود که بالای هزار اموزش توش ساخته بودم به اسم sajjad3011 ولی حیف ادمین سایتش عوض کرد
حالا سوالی بود کاری بود این شمارمه

قدیمیا دلم براتون تنگ شده... فقط معرفی کنید توی پیامک یا تماس یاد بیارید.
اگه جواب ندادم شاید موقعیت نداشته باشم.
بگید توی پیام از بچه های پرومیکرز هستید.

---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته
دوست داشتید شماره بذارید تو واتساپ یا ایتا یا .... گروه بزنیم.
09358077198

بایگانی
پیوندها

۲۱ مطلب در آذر ۱۳۹۴ ثبت شده است

منبع :gameover.blog.ir

نکته : گروه ما یونیتی رو توضیه می کنه اما چون مبتدیان گیم میکر کار می کنن بعضی اوقات پاسخ گوی سوالات اونا هستیم.
(البته گیم میکر استادیو هم هنوز برای بازی سازی جایگاهی داره به شرطی که توی کدنویسی لمسی و ... بیشتر تحقق کنید)
با استفاده از این آموزش می تونید با php ارتباط بگیرید:
http://promakers.ir/showthread.php?tid=10070

<?php
//get.php
//Author:Sajjad3011
if (isset($_POST["x"]) && isset($_POST["y"]  )
{
$x=$_POST["x"];
$y=$_POST["y"];
}
   $dbhost = 'اسم هاست مای اس کیو ال';
   $dbuser = 'نام کاربری که برای دیتابیس نسبت دادیم روی هاست';
   $dbpass = 'رمز';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   

   if(! $conn )
   {
      die('Could not connect to host : ' . mysql_error());
   }
   
   $sql = 'INSERT INTO tableName '.
      '(x,y) '.
      'VALUES ( $x, $y )';
      
   mysql_select_db('test_db');
   $result= mysql_query( $sql, $conn );
   
   if(! $result )
   {
      die('Could not enter data: ' . mysql_error());
   }
   
   echo "Entered data successfully\n";
   
   mysql_close($conn);
?>

۰ نظر موافقین ۰ مخالفین ۰ ۲۹ آذر ۹۴ ، ۲۳:۵۵
مدیرکل

منبع :gameover.blog.ir

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    public Renderer rend;
    void Start() {
        rend = GetComponent<Renderer>();
    }
    void OnMouseEnter() {
        rend.material.color = Color.red;
    }
    void OnMouseOver() {
        rend.material.color -= new Color(0.1F, 0, 0) * Time.deltaTime;
    }
    void OnMouseExit() {
        rend.material.color = Color.white;
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۸ آذر ۹۴ ، ۱۸:۰۶
مدیرکل

C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\AndroidManifest.xml

البته فایل AndroidManifest.xml رو برای کنترل بیشتر پروژه های اندرویدی به مسیر Assets->Plugins->Android از پروژه تون اضافه کنید و کدهای مختلف مثل دستری به اینترنت و غیره رو داخلش تنظیم کنید.

۰ نظر موافقین ۰ مخالفین ۰ ۲۸ آذر ۹۴ ، ۰۲:۴۱
مدیرکل
منبع:gameover.blog.ir
سلام دوستان.

اگه سوالی می پرسید لطفا پیام  رو خصوصی نذارید.

عمومی بذارید تا بتونیم پاسخ بدیم.

یکی از دوستان به نام حمید ش ق پیام گذاشته بود در مورد گیم میکر استادیو.سوالشم این بود :

- نحوه ورود رندوم و خودکار ماهی ها به بازی
2- دادن امتیاز + و - به ماهیا
3- حرکت صفحه بازی
خواهشا کمکم کنین برای پروژمه عجله دارم

--

اما پاسخ:

باید از توابع random یا irandom_range استفاده کنید  یا غیره.

مثال:




Create Event:

CODE
speed=3+random(2)
direction=round(random(360))
alarm[0]=50+random(150)



اینم برای آلارم :
Alarm 0 Event:
CODE
direction=round(random(360))
alarm[0]=50+random(150)




http://z11.invisionfree.com/GameMaker_Central/ar/t20.htm



اما راه دیگه :
برای دشمن این کد رو بذارید :
توی create:
مثال :
v_speed=2

توی step هم اینو :
اگر y>room_height شد x=random(room_width و  y=-50


کد بالا باعث میشه دشمن از بالا ی صحنه حرکت کنه به سمت پایین و وقتی y از ارتفاع روم(اتاق) بیشتر شد دوباره از بالا یعنی -50 شروع کنه.
x هم بین صفر تا حداکثر اندازه ی پهنای روم تنظیم میشه به صورت تصادفی.
سوالی بود بذارید.
۰ نظر موافقین ۰ مخالفین ۰ ۲۷ آذر ۹۴ ، ۰۲:۲۴
مدیرکل


حجم: 23 مگابایت

 

این جزوه نزدیک بیش از 700 صفحه هست. فونت 12 .

دارای تصاویر با متن انگلیسی و زیرنویس فارسی

جملات بسیار کاربردی و مهم که در زندگی عامیانه بکار می ره جمع آوری شده

و یه جزوه ی بسیار عالی هست برای کل مقاطع

700 صفحه خیلی هست دوستان.

اما قیمت این کتاب واقعا پایینه و خودم حتی یکی از این نسخه رو برای یادگیری دارم مطالعه می کنم.

شاید شما بتونید با خوندن این کتاب چیزای بسیار خوبی یاد بگیرید.

ممنون از حمایت شما

--------

مشکلی توی دانلود پیش اومد در وبلاگ gameover.blog.ir مطرح کنید تا لینک سالم فایل رو بهتون ایمیل کنیم یا مشکل شما رو برطرف کنیم.

یا در بخش پشتیبانی پیام بذارید.

لینک محصول

۰ نظر موافقین ۰ مخالفین ۰ ۲۵ آذر ۹۴ ، ۰۷:۰۷
مدیرکل

منبع :gameover.blog.ir

مترجم:گیم اور

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ آذر ۹۴ ، ۰۴:۵۴
مدیرکل
منبع :gameover.blog.ir
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
document.getElementById("demo").innerHTML = txt.length;
</script>

۰ نظر موافقین ۰ مخالفین ۰ ۱۷ آذر ۹۴ ، ۱۷:۴۱
مدیرکل
gameover.blog.ir منبع

Dim c As Int = 0
For Each f As String In File.ListFiles(File.DirRootExternal)
   If f.EndsWith(".jpg") Then c = c + 1
Next
Log(c)


روش دوم :
البته خوندم File.ListFiles هم یک لیست بر می گردونه و اسم لیست رو فرض کنیم List باشه List.Size هم تعداد رو برگشت میده.
http://www.b4x.com/android/forum/threads/count-the-number-of-files.32604/


خرید آموزش b4a فارسی با قیمت کم:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
۱ نظر موافقین ۰ مخالفین ۰ ۱۷ آذر ۹۴ ، ۰۳:۳۸
مدیرکل
منبع :gameover.blog.ir
منبع:
http://www.b4x.com/android/forum/threads...rial.8339/
مترجم:
sajjad3011

این آموزش طریقه اتصال بین Android device و remote server رو نشون می ده.
در اینجا قصد اتصال به یک MySQL database رو داریم.
Android به طور مستقیم نمی تونه به database server وصل بشه.
بنابراین نیازه یک simple web service یا سرویس وب ساده بسازیم تا request ما رو به دیتابیس بفرسته و به ما response بده.

مثلا ما یه new database ایجاد کردیم که جمعیت کشور ها رو برامون لیست کنه.
.(در اینجا البته اسم دیتابیس و ... دلخواه هست مثل xxxx یا .... )
دیتابیس ما یه جدول داره به اسم "countries" با سه ستون Name+ID+Population
[تصویر: mysql_1.png]

PHP Script:
web service ما یک اسکریپت php هست که روی سایت سرور قرار میدیم.
روش های ارتباط با این اسکریپت زیاده. مثلا می تونید با ارسال و دریافت پارامترها کار کنید و ... .
می تونیم روی سایت با php یه query بگیریم با دستوای sql و محتوای دیتابیس رو بریزیم بیرون یا واکشی کنیم توی یک فایل دیگه یا یه صفحه که با php درخواست می دیم.(مثلا get.php یا...)
البته این سوریس بهتره public نباشه(تنظیمات chmod روی سایت رو طوری تنظیم کنید که فقط کاربران خاص بتونن بهش دسترسی داشه باشن یا یه سری مسائل ایمنی و رعایت کنید اگه واستون مهمه)
البته یه راهنما هم هست تا افراد نتونن sql رو inject(تزریق) کنن برای باگ یابی از بانک شما:
PHP: mysql_real_escape_string - Manual
http://php.net/manual/en/function.mysql-...string.php


ما در اینجا از روش query استفاده می کنیم.

php script:

<?

$databasehost = "localhost";
$databasename = "xxxx";
$databaseusername ="xxxx";
$databasepassword = "xxxx";

$con = mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
mysql_select_db($databasename) or die(mysql_error());
mysql_query("SET CHARACTER SET utf8");
$query = file_get_contents("php://input");
$sth = mysql_query($query);

if (mysql_errno()) {
    header("HTTP/1.1 500 Internal Server Error");
    echo $query.'\n';
    echo mysql_error();
}
else
{
    $rows = array();
    while($r = mysql_fetch_assoc($sth)) {
        $rows[] = $r;
    }
    print json_encode($rows);
}
?>

این اسکریپت با استفاده از داده ها یا پارامتری هایی که با متد POST بهش ارسال می کنیم یک query از دیتابیس mysql می گیره.یعنی طبق درخواست ما به بانک وصل میشه و نهایتا نتیجه رو البته با فرمت JSON برگشت میده.

نکته: قسمت مهم کد بالا
$query = file_get_contents("php://input");
هست که محتوای متن ارسالی توسط b4a رو در متغیر $query ذخیره می کنه.
کپی شده از http://gameover.blog.ir



Basic4android code:

[تصویر: SS-2013-01-29_16.42.32.png]
این کد یک query(یک متغیر رشته ای که شامل بازجست و دستورات SQL هست مثل select * from table1 برای انتخاب تمام ستون ها از جدول) رو send می کنه. و نتیجه ی JSON دیافت شده رو parse(تجزیه) می کنه و نمایش میده روی listView .

قسمت اصلی سورس b4a  اینطوری هست :
'Activity module
Sub Process_Globals
	Private COUNTRIES_LIST = "countries_list", COUNTRY_POPULATION = "country_population" As String
End Sub

Sub Globals
	Type TwoLines (First As String, Second As String)
	Dim lblPopulation As Label
	Dim ListView1 As ListView
	Dim lblCountry As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("1")
	FetchCountriesList
End Sub
Sub FetchCountriesList
	ProgressDialogShow("Fetching list of countries")
	'Gets all the available countries
	ExecuteRemoteQuery("SELECT name, id FROM countries ORDER BY id", COUNTRIES_LIST)
End Sub


Sub ListView1_ItemClick (Position As Int, Value As Object)
	Dim tl As TwoLines
	tl = Value
	lblCountry.Text = tl.Second
	lblPopulation.Text = "Calling server..."
	ExecuteRemoteQuery("SELECT population FROM countries WHERE id='" & tl.First & "'", COUNTRY_POPULATION)
End Sub

Sub ExecuteRemoteQuery(Query As String, JobName As String)
	Dim job As HttpJob
	job.Initialize(JobName, Me)
	job.PostString("http://www.basic4ppc.com/android/countries.php", Query)
End Sub

Sub JobDone(Job As HttpJob)
	ProgressDialogHide
	If Job.Success Then
	Dim res As String
		res = Job.GetString
		Log("Response from server: " & res)
		Dim parser As JSONParser
		parser.Initialize(res)
		Select Job.JobName
			Case COUNTRIES_LIST
				Dim COUNTRIES As List
				COUNTRIES = parser.NextArray 'returns a list with maps
				For i = 0 To COUNTRIES.Size - 1
					Dim m As Map
					m = COUNTRIES.Get(i)
					'We are using a custom type named TwoLines (declared in Sub Globals).
					'It allows us to later get the two values when the user presses on an item.
					Dim tl As TwoLines
					tl.First = m.Get("id")
					tl.Second = m.Get("name")
					ListView1.AddTwoLines2(tl.First, tl.Second, tl)
				Next
			Case COUNTRY_POPULATION
				Dim l As List
				l = parser.NextArray
				If l.Size = 0 Then
					lblPopulation.Text = "N/A"
				Else
					Dim m As Map
					m = l.Get(0)
					lblPopulation.Text = NumberFormat2(m.Get("population"),0, 0, 0, True) & " (K)"
				End If
		End Select
	Else
		ToastMessageShow("Error: " & Job.ErrorMessage, True)
	End If
	Job.Release
End Sub

Sub Activity_Resume

End Sub

در کد فوق اطاعات یا query بهcountries.php ارسال میشه (ما فرض کردیم همون فایل get.php که بالا اوردیم هست. اسمشون رو خودتون یکی کنید و ادرس رو به هاست یا سایت خودتون تغییر بدید و لینک دقیق فایل php)
اینم سورس رایگان که خودم هم تست کردم کاملا کار می کنه:
http://www.mediafire.com/download/gb2b3a2ka1dye8p/MySQL.zip




خرید آموزش b4a فارسی با قیمت کم:
http://gameover.blog.ir/1395/04/03/%DA%A9%D8%AA%D8%A7%D8%A8-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%A7%D9%85%D9%88%D8%B2%D8%B4-b4a-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%AF%DB%8C%D9%85-%D8%A2%D9%88%D8%B1
۵ نظر موافقین ۰ مخالفین ۰ ۱۷ آذر ۹۴ ، ۰۲:۵۱
مدیرکل
منبع:gameover.blog.ir
کد حرکت اسپرایت به چپ و راست و بالا و پایین حول لولای خودش(با توجه به زاویه ای نگاه):
using UnityEngine;
using System.Collections;
//Author:Sajjad3011
public class player : MonoBehaviour {
    void Update () 
    {
        //Variables:
        float moveSpeed = 1.5f;
        //Moving codes:
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.right * (Time.deltaTime * moveSpeed),Space.Self); //move Right;
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Translate(Vector3.left * (Time.deltaTime * moveSpeed),Space.Self);  //move Left;
        if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.up * (Time.deltaTime * moveSpeed),Space.Self);    //move Up;
        if(Input.GetKey(KeyCode.DownArrow)) 
            transform.Translate(Vector3.down * (Time.deltaTime * moveSpeed),Space.Self);  //move Down;
        
    }
}

کد حرکت اسپرایت به چپ و راست و بالا و پایین حول دنیای واقعی(بدون توجه به زاویه ای نگاه که پلیر داره بهش رو می کنه):

using UnityEngine;
using System.Collections;

public class player : MonoBehaviour {
    void Update () 
    {
        //Variables:
        float moveSpeed = 1.5f;
        //Moving codes:
        if(Input.GetKey(KeyCode.RightArrow))
            transform.Translate(Vector3.right * (Time.deltaTime * moveSpeed),Space.World); //move Right;
        if(Input.GetKey(KeyCode.LeftArrow))
            transform.Translate(Vector3.left * (Time.deltaTime * moveSpeed),Space.World);  //move Left;
        if(Input.GetKey(KeyCode.UpArrow))
            transform.Translate(Vector3.up * (Time.deltaTime * moveSpeed),Space.World);    //move Up;
        if(Input.GetKey(KeyCode.DownArrow)) 
            transform.Translate(Vector3.down * (Time.deltaTime * moveSpeed),Space.World);  //move Down;
        
    }
}
۰ نظر موافقین ۰ مخالفین ۰ ۱۶ آذر ۹۴ ، ۰۳:۳۳
مدیرکل

برای نوشتن object در جاوا اسکریپت از این روش استفاده می کنیم.

var car = {type:"Fiat", model:"500", color:"white"};



در روش بالا برای هر خصوصیت یک نام داده می شود که برای استفاده کردن از محتوای آن کافیست نام متغیر را نوشته و پس از درج نقطه نام خصوصیت را وارد کنیم.

استفاده کردن از اشیا:

car.type
<!DOCTYPE html>
<html>
<body>

<p>Creating a JavaScript Object.</p>

<p id="demo"></p>

<script>
var car = {type:"Fiat", model:"500", color:"white"};
document.getElementById("demo").innerHTML = car.type;
</script>

</body>
</html>


مثال:

خروجی مثال بالا به صورت زیر می باشد.

Creating a JavaScript Object.
Fiat
۰ نظر موافقین ۰ مخالفین ۰ ۱۵ آذر ۹۴ ، ۱۵:۳۷
مدیرکل
منبع :gameover.blog.ir

http://www.mediafire.com/download/njb3v1oy0tyv2ah/Rope+Physics+Tutorial.gmz


کپی:
https://www.dropbox.com/s/s18r2ecq8ueqlb4/Rope%20Physics%20Tutorial.gmz
۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۲۲:۵۰
مدیرکل

منبع:gameover.blog.ir

http://s3.picofile.com/file/8226499542/targetFace.jpg

اسکریپت سیشارپ face2face زیر رو بدید به هر دو اسپرایت دلخواهتون.
سپس در inspector اسپرایت دشمن یا اسپرایتی که می خواید بهش نگاه بشه رو بکشید روی متغیر target .

//Author:Sajjad3011
//face2face.cs
using UnityEngine;
using System.Collections;

public class face2face: MonoBehaviour {

	public Transform target;
	private Vector3 v_diff;
	private float atan2;
	
	void Update()
	{
		v_diff = (target.position - transform.position);    
		atan2 = Mathf.Atan2 ( v_diff.y, v_diff.x );
		transform.rotation = Quaternion.Euler(0f, 0f, atan2 * Mathf.Rad2Deg -90);
	}
}


مثال بالا برای حالت top-down بود.



اما مثال(توضیح) زیر برای حالت platform یا از پهلو هست.

فرض کنید دو گیم ابجکت دو بعدی داریم می خوایم به هم نگاه کنن در هر حالتی.


هر شی اگه در سمت چپ بود به سمت راست وگرنه به چپ نگاه کنه.(به هر شی یک اسکریپت مشترک میدیم).


روش کار:

اگه x کمتر بود، localScale.x رو منفی کنید ویلا مثبت


ببینید

شما x دو گیم ابجکت رو نسبت به هم مقایسه کنید

اگه x کمتر بود، localScale.x رو منفی کنید ویلا مثبت

این کار رو برای هر دو گیم ابجکت  دو بعدی تکرار می کنیم

private float xScale,yScale;

void Start(){
xScale = transform.localScale.x;
yScale = transform.localScale.y;
}


سپس در FixedUpdate  یا Update یا OnGUI  کد زیر رو می ذاریم:( هر کدوم راحت ترید، فرقشون اینه که OnGUI بیشتر از FixedUpdate و FixedUpdate بیشتر از Update فراخوانی میشه تو هر فریم زمان و خب دقت اونی که بیشتر فراخانی میشه بیشتری اما از اونطرف هم سربار محاسبات داریم به خاطر اینکه هی پردازنده باید سیگنال بفرسته برای اجرای تابع یا رویدادی که بیشتر باید چک بشه)


signX = (x1<x2)? +1 : -1 ;
توضیح:

علامت سوال، عملگر شرطی هست، اگه x1 از x2 کمتر بود، علامت مثبت یک میره توش ویلا منفی یک.


علامت بدست اومده ضرب می شه در این فرمول:

_transform.localScale = new Vector2(signX * xScale,yScale);

۱ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۱۷:۵۰
مدیرکل
منبع :gameover.blog.ir
<?php
// example of how to use basic selector to retrieve HTML contents
include('../simple_html_dom.php');

// get DOM from URL or file
$html = file_get_html('http://example.com/#1:7');

// find all link
foreach($html->find('a') as $e) 
    echo $e->href . '<br>';

// find all image
foreach($html->find('img') as $e)
    echo $e->src . '<br>';

// find all image with full tag
foreach($html->find('img') as $e)
    echo $e->outertext . '<br>';

// find all div tags with id=gbar
foreach($html->find('div#content') as $e)
    echo $e->innertext . '<br>';

// find all span tags with class=gb1
foreach($html->find('span.gb1') as $e)
    echo $e->outertext . '<br>';

// find all td tags with attribite align=center
foreach($html->find('td[align=center]') as $e)
    echo $e->innertext . '<br>';

// extract text from table
echo $html->find('td[align="center"]', 1)->plaintext.'<br><hr>';

// extract text from HTML
echo $html->plaintext;
?>

منبع اصلی:
http://stackoverflow.com/questions/26966919/how-to-get-ajax-response-text-from-div-using-php-domdocument
۰ نظر موافقین ۰ مخالفین ۰ ۱۴ آذر ۹۴ ، ۰۹:۳۱
مدیرکل

مشکل از build-tools هست. باید ورژن v21.0.2 رو کپی کنید داخل پوشه.
http://answers.unity3d.com/questions/834744/building-android-application-failed-re-package-res.html

یه آموزش هم قبلا گذاشته بودیم ببینید:

http://gameover.blog.ir/1394/09/13/%D8%B1%D9%81%D8%B9-%D9%85%D8%B4%DA%A9%D9%84-android-sdk-windows-%D8%AF%D8%B1-unity

۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۹:۴۷
مدیرکل
منبع:gameover.blog.ir
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
       echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>';

منبع اصلی:
http://simplehtmldom.sourceforge.net/
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۸:۲۰
مدیرکل

منبع :gameover.blog.ir

اولا واسه خروجی apk گرفتن توی یونیتی هیچی نمی خواد به جز نصب همون چیزایی که واسه apk گرفتن توی game maer studio یادتون دادیم.
سپس:
یونیتی رو باز کنید(ورژن من 4 هست)
از منوی edit گزینه ی preferences رو برید و سپس External Tools و سپس روی دکمه ی جلو android sdk location بزنید و اونجا ازتون android sdk windows رو میخواد ولی شما به جاش آدرس sdk manager رو کپی paste کنید(واسه من اینه : C:\Users\user1\AppData\Local\Android\android-sdk و واسه شما به جای user1 ادرس یوزر خودتون رو بدید. اگه هم بلد نیستید کافیه روی sdk manager که یک ایک سبز داره راست کلیک کنید و از طریق open file location مسیر رو بدست بیارید)

بعدش روی select folder بزنید و پنجره رو ببندید .

[تصویر: preferences.jpg]

حالا از منوی file گزینه ی build settings رو برید(کلید میانبر ctrl+shift+B) و در قسمت android رفته و دکمه ی build رو بزنید تا پنجره ای باز بشه واسه ذخیره فایل apk در مسیر دلخواه شما.
در همین لحظه ممکنه خطا بده که اسم شرکت(کمپانی) و اسم محصول(productName) رو وارد کنید.
[تصویر: Bundle_identifier.jpg]

برای اینکار روی player settings کلیک کنید . و در قسمت bundle intentifier یک اسم به صورت gameover.Company.test وارد کنید. که اینجا اسم محصول رو من test دادم و اسم کمپانی رو gameover دادم و بینش کلمه ی Company بذارید باشه که چپ و راستش نقطه(.) می گیره
همه چی حله پروژه apk رو build کنید و حالشو ببرید:

[تصویر: apk.jpg]

هر چی واسه گیم میکر استادیو واسه خروجی گرفتن apk نصب کردید هموناست. (اگه واسه game maker studio همه چیز رو درست نصب کردید و موفق شدید apk بگیرید واسه یونیتی هم چیز جدیدی نمی خواد فقط این تنظیماتی که بالا گفتم رو انجام بدین حله)(چیز سختی نیست(


مشکل aip level 21 هم اینجا گفته شده :

http://gameover.blog.ir/tag/%D8%A7%D8%A8%D8%B2%D8%A7%D8%B1%D9%87%D8%A7%DB%8C%20%D9%84%D8%A7%D8%B2%D9%85%20%D8%A8%D8%B1%D8%A7%DB%8C%20%D8%AE%D8%B1%D9%88%D8%AC%DB%8C%20%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF%20%D8%AF%D8%B1%20%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C


۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۱۷:۲۱
مدیرکل

منبع :gameover.blog.ir
Vector3 vectorToTarget = targetTransform.position - transform.position;
 float angle = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;
 Quaternion q = Quaternion.AngleAxis(angle, Vector3.forward);
 transform.rotation = Quaternion.Slerp(transform.rotation, q, Time.deltaTime * speed);

منبع اصلی:
http://answers.unity3d.com/questions/650460/rotating-a-2d-sprite-to-face-a-target-on-a-single.html
۰ نظر موافقین ۰ مخالفین ۰ ۱۳ آذر ۹۴ ، ۰۴:۲۱
مدیرکل
منبع:gameover.blog.ir
// Disable screen dimming
	Screen.sleepTimeout = SleepTimeout.NeverSleep;

۱ نظر موافقین ۰ مخالفین ۰ ۱۱ آذر ۹۴ ، ۲۳:۲۷
مدیرکل

منبع:gameover.blog.ir


Culling Mask

فرض کنید بعضی اوقات در کنار player اشیای دیگه ای داریم که نمی خوایم دوربین پشت player اونا رو رندر کنه.

برای اینکار کافیه به اون اشیا یه لایه نسبت بدیم و سپس دوربین رو انتخاب کرده و لایه ای رو که نمی خوایم رندر بشه از لیست Culling Mask غیر فعال یا unCheck کنیم.

http://s3.picofile.com/file/8225947618/cullingMask.jpg

۰ نظر موافقین ۰ مخالفین ۰ ۱۱ آذر ۹۴ ، ۱۶:۳۷
مدیرکل

منبع:gameover.blog.ir

تعداد راس ها و face های مدل رو کم کن(مل رو low polygon بساز. به زبون خودمونی همون لو پلی)
Material ها رو minimize کن.
حجم تکستچرها و UV ها رو کم کن.
فضای خالی تکستچرها رو با تکنیک های Overlapping تا می تونی حذف ن(overlapping یعنی همپوشانی)
از Per-Platform Texture Settings استفاده کن.(یه سری تنظیمات برای فشرده سازی تکستچر در خود یونیتی تعبیه شده.وقتی تکستچر رو توی کادر پروژه انتخاب می کنیم تنظیمات و خصوصیاتی توی inspector میاد حالا دقیق یادم نیست کدومش هست برای تنظیم فشرده سازی که برای تنظیم و فشرده سازی تگستچر برای اجرا روی هر پلتفرمی مثل اندروید یا مک و ویندوز و ... تعبیه شده)
--
نکته ی دیگه ای برای بهینه سازی و بالارفتن performance(کارایی پردازنده):
وقتی از کلاس transform استفاده می کنیم یک سری کارها به صورت فانکشنال(functionality) یا تابعی باید اجرا بشن که نیاز به پردازش بیشتر داره. بهتره که از کش یا ارجاع استفاه بشه. یعنی یه اشاره گر یا متغیر از اون بسازیم. مثل این کد :

void Awake()
{
//Cache Transform (MyTransform is a class variable)
MyTransform = transform;
}
void Update(){
//Update position using cached transform
MyTransform.localPosition = MyPosition;
}

نکته ی بعدی برای افزایش کارایی اینه که تا می تونیم از تابع Update کمتر استفاده کنیم و همینطور توابع مثل LateUpdate و FixedUpdate . این توابع برای رویدادها و رفتارهایی بکار می رن که باید طی زمان تغییر کنن. پس بهتره اونا رو کمتر استفاده کنیم.
مثلا نازی نیست سلامتی دشمن(Enemy) رو توی هر فریم چک کنیم. بلکه کافیه فقط زمانی متغیر health رو چک کنیم که حمله ای صورت بگیره(رویدادهای برخورد OnCollisionEnter و OnCollisionEnter2D و یا ....) به طور خلاصه با بهینه سازی کد می تونیم زمان CPU و GPU رو بهبود بدیم.

نکته ی بعدی: Collider ها رو در حد امکان کاهش بدید.

نکته ی بعد برای افزاریش کارایی: از کلاس GUI و OnGUI کمتر استفاده کنید چون چند بار در هر فریم اجرا میشه و بهتره فقط برای منوهای ساده استفاده بشه نه complex و پیچیده.

نکته ی بعدی: از تکستچرهای اطلس استفاده کنید(تکستچرهای اطلس به تکستچرهایی می گن که ابعادشون توانی از 2 باشه.مثل 8 یا 16 یا 32 یا 64 یا 128 یا 256 یا 512 و ....)(چون اگه نباشه یونیتی مجبوره خودش تبدیلات رو انجام بده.)

مبحث بعدی استفاده از Object Pooling و Static Batching هست.
object pooling یه مبحث برنامه نویسی پیشرفته تری هست . مثلا وقتی اسلحه شلیک می کنه داریم به صورت runtime و داینامیک پریفب گلوله(bullet) رو instantiate می کنیم. به جاش می تونیم قبلا چند گلوله رو ایجاد و در بافر پشت صحنه ی جاری مخفی کنیم(offscreen buffer) و وقتی لازم شد این گلوله های از پیش تولید شده رو از حالت hide در بیاریم و نمایش بدیم.این عملیات باعث افزایش کارایی و پردازش کمتر برای اختصاص حافظه در حین اجرا میشه(dynamic memory allocation) و مخصوصا روی سیستم های موبایل کاربرد ویژه ای داره که بحث برنامه نویسیش کمی پیچیده هست.

Static batching هم یک گزینه هست. برای اون دسته از ابجکت هایی که در حین بازی به هیچ وجه حرکت نمیکنن تیک گزینه ی Static check box رو می زنیم.که در بالا و راست خصوصیات ابجکت در inspector میتونیم تنظیمش کنیم که باعث optimizations(بهینه سازی) میشه.

نکته ی بعدی Skyboxes هست که باید یه سری تنظیمات رو برای آسمان های پانورما و ... در بازی انجام بدیم که به جای اینکه realtime همه چیز تولید بشه یه سری شبیه سازی های از قبل برای ایجاد ستاره ها و غیره از قبل بسازیم و استفاده از تکنیک های parallax effects و .... .

نکته ی بعدی : از نورهای پویا و سایه ها( Dynamic Lights and Shadows) کمتر استفاده کنید.(میشه از Light mapping و تکنیک نورپردازی از قبل رندر شده ی Beast استفاده کرد که در خود یونیتی تعبیه شده و می تونیم نورهای نامحدود بذاریم و bake کنیم)

بقیه هم خودتون برید دنبالش....
۰ نظر موافقین ۰ مخالفین ۱ ۰۲ آذر ۹۴ ، ۱۳:۴۲
مدیرکل