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

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

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

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

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

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

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

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

۳۲ مطلب در فروردين ۱۳۹۴ ثبت شده است

ابتدا در subtool روی آبجکتی که می خوایم کلیک می کنیم تا انتخاب بشه. سپس روی دکمه ی Merge>merge Down می زنیم تا با ابجکت زیرینش ادغام بشه. البته با اون فلش پایین یا بالا یا فلش هایی که وجود داره می تونید ابجکت ها رو شیفت(انتقال) بدید به بالا یا پایین(کلید میانبر ctrl+Up یا ctrl+Down)

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

Fibermesh>Export Curves

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

 

برای شروع کار یک پروژه جدید ایجاد می کنیم و اسمش رو ListView with Alphabetical قرار میدیم که به معنی لیست ویو به همراه حروف الفبا است.بر روی لایه برنامه از یک listview برای نمایش لیست میوه ها و از یک LinearLayout برای نمایش حروف اافبا استفاده می کنیم.(کدهای کامل لایه برنامه یا activity_main.xml).

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingLeft="5dp"
tools:context=".MainActivity"
android:baselineAligned="false" >

<ListView
android:id="@+id/list_fruits"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingRight="5dp" >
</ListView>

<LinearLayout
android:id="@+id/side_index"
android:layout_width="50dp"
android:layout_height="fill_parent"
android:background="#c3c3c3"
android:gravity="center_horizontal"
android:orientation="vertical" >
</LinearLayout>

</LinearLayout>

بعد از اینکه لایه برنامه رو تکمیل کردیم نوبت اون میرسه که یک لایه جدید ایجاد کنیم به اسم side_index_item.xml تا حروف الفبا داخل اون قرار بگیره.ایجاد یک لایه و یک فایل xml رو در جلسه پنجاه و ششم میتونید ببینید.(کدهای کامل لایه جدید).

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/side_list_item"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:padding="3dp"
android:textSize="14sp" />

خیلی عالی ,بعد از اینکه لاهی های برنامه رو تکمیل کردیم وقت اون میرسه که اسم میوه هامون رو به لیست ویو اضافه کنیم.برای این کار از پوشه  values فایل String.xml رو انتخاب می کنیم  و ایتم های زیر رو بهش اضافه می کنیم.(لیست ایتم های فایل string).فایل string در واقع به نوعی وظیفه ذخیره سازی اطلاعات در قالب یک فایل xml رو برعهده داره.

<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="app_name">ListView with Alphabetical</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>

<string-array name="fruits_array">
<item>Apples</item>
<item>Apricots</item>
<item>Avocado</item>
<item>Annona</item>
<item>Banana</item>
<item>Blueberry</item>
<item>Blackberry</item>
<item>Blackapple</item>
<item>Custard Apple</item>
<item>Clementine</item>
<item>Cantalope</item>
<item>Date</item>
<item>Elderberry</item>
<item>Fig</item>
<item>Grapefruit</item>
<item>Grape</item>
<item>Gooseberry</item>
<item>Guava</item>
<item>Honeydew melon</item>
<item>Jackfruit</item>
<item>Juniper Berry</item>
<item>Kiwi</item>
<item>Kumquat</item>
<item>Lemons</item>
<item>Limes</item>
<item>Lychee</item>
<item>Mango</item>
<item>Mandarin</item>
<item>Nectaraine</item>
<item>Orange</item>
<item>Olive</item>
<item>Prunes</item>
<item>Pears</item>
<item>Plum</item>
<item>Pineapple</item>
<item>Peach</item>
<item>Papaya</item>
<item>Pomelo</item>
<item>Raspberries</item>
<item>Rambutan</item>
<item>Strawberries</item>
<item>Sweety</item>
<item>Salmonberry</item>
<item>Tangerines</item>
<item>Tomato</item>
<item>Ugli</item>
<item>Watermelon</item>
<item>Woodapple</item>
</string-array>

</resources>

در بخش بعدی کلاس MainActivity.java رو اجرا میکنیم و کدهای زیر رو بهش اضافه می کنیم.در این اموزش با HashMap اشنا میشیم.(کدهای کامل کلاس MainActivity.java).

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {


Map<String, Integer> mapIndex;
ListView fruitList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//گرفتن اطلاعات از فایل xml
String[] fruits = getResources().getStringArray(R.array.fruits_array);

//ایجاد یک ارایه
Arrays.asList(fruits);

fruitList = (ListView) findViewById(R.id.list_fruits);
fruitList.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, fruits));

getIndexList(fruits);

displayIndex();

}

//با استفاده از hashmap کلید ها و حروف ها رو به صورت لیست نمایش میدیم
private void getIndexList(String[] fruits) {
mapIndex = new LinkedHashMap<String, Integer>();
for (int i = 0; i < fruits.length; i++) {
String fruit = fruits[i];
String index = fruit.substring(0, 1);

if (mapIndex.get(index) == null)
mapIndex.put(index, i);
}
}

//نمایش حروف الفبا
private void displayIndex() {
LinearLayout indexLayout = (LinearLayout) findViewById(R.id.side_index);

TextView textView;
List<String> indexList = new ArrayList<String>(mapIndex.keySet());
for (String index : indexList) {
textView = (TextView) getLayoutInflater().inflate(
R.layout.side_index_item, null);
textView.setText(index);
textView.setOnClickListener(this);
indexLayout.addView(textView);
}
}

public void onClick(View view) {
TextView selectedIndex = (TextView) view;
fruitList.setSelection(mapIndex.get(selectedIndex.getText()));
}


منبع :
http://appinapps.com/Articles_View.aspx?t=%D8%B3%D8%A7%D8%AE%D8%AA%20%D9%84%DB%8C%D8%B3%D8%AA%20%D9%88%DB%8C%D9%88%20%D8%A8%D8%A7%20%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA%20%D8%AC%D8%B3%D8%AA%D9%88%D8%AC%D9%88%DB%8C%20%D8%A7%D9%84%D9%81%D8%A8%D8%A7%DB%8C%DB%8C&gid=11&aid=127
۱ نظر موافقین ۰ مخالفین ۰ ۲۸ فروردين ۹۴ ، ۰۸:۳۷
مدیرکل
var radius = 5.0;
    var power = 10.0;
    function Start () {
        // Applies an explosion force to all nearby rigidbodies
        var explosionPos : Vector3 = transform.position;
        var colliders : Collider[] = Physics.OverlapSphere (explosionPos, radius);
        
        for (var hit : Collider in colliders) {
            if (hit && hit.rigidbody)
                hit.rigidbody.AddExplosionForce(power, explosionPos, radius, 3.0);
        }
    }

explosionRadius شعاع انفجار هست.


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

این اموزش ویدئو کوچولوی سه مگی رو گذاشتم اونا که خیلی تازه کار هستن راست چین چپ چین و فونت و رنگ رو بلد شن:
(فقط چون با بچه های مختلف کار می کنم و می بینم اموزش سازی ساده هم براشون سخته اینو میذارم تا اگه استقبال شد بازم بذارم همینجا)

فرمت فایل MP4


http://s5.picofile.com/file/8142953668/w...1.zip.html

به هر آموزشی نیاز دارید درخواست بدید.

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

برای اینکار می تونیم Alt+Space بزنیم و از لیست ابزارها،Scale رو انتخاب کنیم. روش بعدی انتخاب Scale از ناحیه بالایی هست. روش دیگه فشردن کلید E هست.
برای Move و Rotate هم کلید W یا R رو می تونید بزنید(یادتون باشه در Edit mode باید باشیم)

http://s4.picofile.com/file/8182826400/scale_subTool.jpg

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

مسیر Tool > SubTool ->Split to parts رو طی و OK کنید.
سپس در قسمت sub tool قسمت دلخواه رو انتخاب کنید.
حالا می تونید روی قسمت انتخاب شده کار کنید و ویرایش رو انجام بدید.

http://s4.picofile.com/file/8182172050/split_parts_zbrush.jpg

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

http://s2.picofile.com/file/7878490749/Load_And_Save_Game.rar.html

-----------------------------------
این کدهای باز کردن فایل و خوندن اطلاعات:
فرض می کنیم فایلی در مسیر جاری به نام ali.ini وجود داره با محتوا و ساختاری مثل این :

کد PHP:
[data]
esm=dd
emtiaz
=14
max_emtiaz
=33 
-------------------------------------
باز کردن فایل ali.ini :
کد PHP:
ini_open'ali.ini' ); 
-------------------------------------
کد PHP:
global.my_nameini_read_string('data','esm',''); 
کد بالا میگه توی فایل باز شده تمام متن های زیر کلمه ی data رو سرچ کن و اگه دیدی چیزی به نام esm پیدا شد بعدش یه مساوی زده ؛ اون مقداری که بعد از مساوی اومده رو برگردون و بریز توی متغیر my_name.
ضمنا اگه چیزی پیدا نشد یه مقدار خالی یا رشته ی خالی رو بریز توی my_name به صورت پیشفرض یا default
---------------------------
بعدش یه while گذاشتی توی کدها که اونم یه جاش اشتباهه که به جای = باید == بذاریم (اینا نکات ریزی هست که فقط حرفه ای ها درک می کنن چی می گم ولی سوال بود ازم بپرسید)
من کمی تغییرش میدم:
کد PHP:
while (global.my_name=='') global.my_name=get_string('Enter Your Name',''
توی کد بالا می گه اگه در مرحله ی قبلی چیزی پیدا نشد و تا زمانی که متغیر سراسری my_name مقداری نداره یه کادر ورودی باز کن و به کاربر بگو Enter your name یعنی اسمتو وارد کن. و اگه کاربر هیچی وارد نکنه مقدار خالی رو بریز توی my_name (که بازم شرط تکرار بشه تا زمانی که کاربر یه چرت و پرتی رو به عنوان اسم وارد کنه. یعنی در حقیقت اول میاد توی فایل می گرده اگه بود که دیگه while اجرا نمیشه اما اگه نبود از ورودی اسم رو میخواد)
--------------------
خط بعدی شبیه اینه :
کد PHP:
global.my_emtiazini_read_real('data','emtiaz',0); 
می گه همون داستان رو تکرار کن ولی اینبار توی فایل بگرد ببین مقداری که بعد از emtiaz= اومده رو بریز توی متغیر my_emtiaz
و اگه امتیازی پیدا نشد مقدار پیشفرض رو بذار صفر(0)
------------------------------------
دستور بعدی اینه :
کد PHP:
global.highestscoreini_read_real('data','max_emtiaz',0); 
این دستور می گه max_emtiaz و بعدش = رو پیدا کن و بعدش مقداری که هست رو بخون بریز توی highestscore
و اگه مقداری وجود نداشت به طور پیشفرض 3 رو بذار
-------------
آخر کار هم می گه ini_close که دیگه توضیح بی توضیحbig grin
----------------------------------------------------------------------------------
اینم کدهای اصلی شما برای نوشتن توی فایل (این کدها طبق ساختار پروژه ی شما عینا آورده شده و من هیچ توضیحی نمی دم چون مطمئنم دوستان با توضیحات قبلیم و تفکر روی اینا این بخش رو هم به سادگی درک خواهند کرد):
کد PHP:
ini_open('My_Game_Name'+'.'+'format');//Open ini file

ini_write_string('data','name',global.name);//write global.name to 'data' > 'name'
ini_write_real('data','coins',global.coins);//write global.coin to 'data' > 'coins'
if (score>global.highestscore) global.highestscore=score//if the score was higher than the highestscore set variable score into global.highestscore
ini_write_real('data','highestscore',global.highestscore);//write global.highestscore to 'data' > 'highestscore'
//You can Change variable names and saved position

ini_close() //close the ini file

منبع :
پرومیکرز
۱ نظر موافقین ۰ مخالفین ۰ ۲۳ فروردين ۹۴ ، ۱۶:۴۶
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۲۳ فروردين ۹۴ ، ۱۵:۳۳
مدیرکل

وقتی یک مدل رو unwrap می کنیم و مثلا از توی بلندر میبریم توی یونیتی، باید حتما تسکتچر هر بخش ساخته شده رو جدا جدا توی یونیتی ایمپورت کنیم و سپس set کنیم روی متریال جدیدی که حالا bumped هست(شامل تو texture یکی نرمال مپ و یکی دیفیوس)، یا diffuse یا ..
. .
پس دقت کنید که اگه یک تکستچر جدید میسازید که روی مدلتون توی بلندر دوباره ویرایش شده باشه باید حتی اون مدل قبلی رو از توی یونیتی حذف کنید و دوباره مدل ویرایش شده رو(دقت کنید علاوه بر تکستچر ها باید خود مدل رو هم) دوباره اسکپورت و سپس توی یونیتی دوباره ایمپورت کنید وگرنه ممکنه بعضی جاهای خالی جدای از UV شما(مثل اون بخش های شطرنجی یا حالا هرچیز اضافی) روی مدل قبلی تاثیر داشته باشه.


نکته ی بعدی اینه که:

شما نباید یک عکس png یا حالا jpg و .. رو مستقیم بکشید روی مدلتون توی یونیتی.

بلکه شما باید ابتدا یک material جدید رو new کنید و سپس متریال رو انتخاب کنید و سپس تکستچر رو بکشید روی کادر مربوط توی inspector توی قسمت تکستچر از متریال ایجاد شده تا تکستچر شما روی متریال set بشه .

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

نکته ی بعدی که مربوط به بلندر هست ولی اینجا بازم یاد آوری می کنم اینه که برای اینکه توی بلندر در مد uv editing براش یا قلم شما روی تکستچر دلخواهتون set بشه و رنگ که می کنید با تکستچر روی مدل بندازه،باید توی بخش نقاشی روی کادر تکستچر بزنید و تکستچری رو که قبلا load کرده بودید رو انتخاب کنید نه color paint رو.
--
نکته ی آخر که واسه مبتدیا بگم اینه که :

نرمال مپ که می گن همون bumped texture هست که چیز خاصی نداره فقط یک متریال ایجاد می کنید و نوع تکستچر رو از کادر مربوط توی inspector روی bumped می ذاریم خودش دو تا گزینه میاره یکش واسه تکستچر diffuse هست و یکیش واسه normal map. تکستچر دیفیوس همون تکستچری هست که ساختیم و می کشیم روی همین گزینه.
برای ساخت تکستچر normal map کاقیه نرم افزار crazy bumped رو داشته باشید که یکی از بهترین نرم افزار ها هست که فقط همون تکستچر عادی یا diffuse رو توش open می کنید و موقع save فقط save normal to file رو می زنید که یک فایل png آبی و صورتی تولید می کنه که در حقیقت واسه ایجاد یک جور برجستگی روی مدل هست همون می گیم تصویر نرمال یا normal map texture که بعد از ساخت، کافیفه png file رو ببریم توی یونیتی و بعد از ایمپورت شدن بکشیم روی همون کادر normal map تا تکستچر نرمال مپ هم set بشه و در نهایت روی دکمه ی fix فقط یکبار کافیه کلیک کنید تا نتیجه رو روی مدل توی صحنه ی بازی ببینید. البته دقت کنید که معمولا برای شاهده ی بهتر کافیه یک directional light (نور مستقیم) بندازید توی صحنه و در زاویه ی مناسب.
--
سوالی بود بگید تا تصویر بذارم. چون ممکنه بعضیا بگن سطح مطلب بالا بود و متوجه نشن.
۰ نظر موافقین ۰ مخالفین ۰ ۲۳ فروردين ۹۴ ، ۱۴:۵۵
مدیرکل
حجم : 2 مگ
کپی شده از پرومیکرز
http://opizo.com/rjiMTG



۰ نظر موافقین ۰ مخالفین ۰ ۲۳ فروردين ۹۴ ، ۰۲:۴۵
مدیرکل
منبع:gameover.blog.ir
شماره تماس سازنده: 09358077198   sajjad3011    یادش بخیر.... خودمم ادمین.ههههه.... پرومیکرزی ها یادتون بخیر.... نظر بذارید یا sms اگه خواستید تیم بزنید زنگ بزنید منم حاضرم بیام....
دانلود کنید
نظر یادتون نره
(نکته: بعد از گیم میکر/استادیو حتما به سمت یونیتی کوچ کنید.فقط به خاطر مبتدی ها این سورس ها رو یکی دوستان م برای ما گذاشته.)
۲۶ نظر موافقین ۰ مخالفین ۰ ۲۳ فروردين ۹۴ ، ۰۲:۳۸
مدیرکل

ابتدا Http Dll 2.2 رو از اینجا دانلود کنید.
هر ورژنی رو که دوست دارید منتهی من با http_dll_2_3.gex توی گیم میکر 8.1 و با http_dll_2_3_studio.gex توی گیم میکر استادیو کار می کنم.
----
لینک دانلود Http Dll 2.2 :
http://www.maartenbaert.be/game-maker-dl.../#download
احتمالا فایل Gex توی مسیر source\http-dll-2-3\gm هست.
-----------
حالا باید این gex file ها رو توی گیم میکر install کنیم و به سمت چپ انتقال بدیم. توی شکل ببینید

http://s6.picofile.com/file/8182071418/httpDll.gif

سپس یه object بسازید و رویم room بذارید و براش اینا رو ایجاد کنید :

توی رویداد room end:

کد PHP:
// room end event
if httprequest!=-{
    
httprequest_destroy(httprequest);


رویداد draw:
کد PHP:
draw_text(room_width/2,room_height/2,"press Space to Download"); 

رویداد press space :
کد PHP:
globalvar httprequestst;
httprequest httprequest_create();
// download(url, destination)
// downloads a file and saves it at the destination
// returns whether successful
var stresultb;
httprequest httprequest_create();
//httprequest_connect(httprequest, argument0, false);
httprequest_connect(httprequest"http://latex-project.org/lppl/lppl-1-1.txt"false);
while 
true {
    
httprequest_update(httprequest);
    
st httprequest_get_state(httprequest);
    if 
st=or st={
        break;
    }
    
sleep(10);
}
if 
st={
    
result false;
} else {
    
result true;
    
buffer_create();
    
httprequest_get_message_body_buffer(httprequestb);
    
buffer_write_to_file(b"download.txt");
    
show_message("saved download.txt")
    
buffer_destroy(b);
}
httprequest_destroy(httprequest);
return 
result
---------
پروژه رو با F5 اجرا کنید
---------
دقت کنید که توی بالا من دارم فایل :
http://latex-project.org/lppl/lppl-1-1.txt
رو دانلود می کنم و با نام download.txt در مسیر جاری میریزم.
شما می تونید بعد از دانلود فایل اونو move کنید جای دلخواه و سپس اونو delete کنید که از این جور اسکریپت های کار با file هم واسه GML توی اینترت زیاده.
موفق باشید.big grin
هر کی نتونست اجرا بگیره و مشکل داشت پ.خ بده خود فایل gm81 سورس رو بدم اجرا بگیره ولی اول خودتون ور برید باهاش

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

برای ساخت یک فایل HTML مثل index.html مراحل زیر رو دنبال کنید.

توی game maker برید و یک room و یک object بسازید .

توی کد create ابجکت چیزی شبیه اینو بنویسید:

کد :
txtfile file_text_open_write("index.html");
text1="<html><body><form name=form1 id=form1 action=";
text1+="http://sitename.com/sabte_emtiaz/index.php ";
text1+=" method=post><input type=text id=esm name=esm value=ali>";
text1+="<input type=text id=emtiaz name=emtiaz value=123>";
text1+="<input type=submit name=submit value=submit>";
text1+="</form>";
text1+="</body>";
text1+="</html>";
file_text_write_string(txtfile,text1);
file_text_close(txtfile); 
یک بار ابجکت رو توی room قرار بدید.
با F5 سورس رو اجرا کنید.
مشاهده می کنید که در مسیر جاری فایل به اسم index.html ساخته شده که شامل یه فرم دلخواه با مقادیر پیش فرض هست.
از این روش می خواستم برای ثبت امتیاز آنلاین استفاده کنم که به وقتش اگه ساختم سورسشو (هر چند به نظرم دارای باگ هایی هست) میذارم.
هر کی خوشش اومد تشکر رو بزنه بی زحمت
۰ نظر موافقین ۰ مخالفین ۰ ۲۳ فروردين ۹۴ ، ۰۲:۲۹
مدیرکل


جایی که کد رفتن به مرحله ی بعد رو میخواید بدید قبلش کد ذخیره رو اجرا کنید:

کد :
game_save("file.sav"
این کد هم برای ادامه از آخرین save:
کد :
if(file_exists("file.sav")) game_load("file.sav")

۰ نظر موافقین ۰ مخالفین ۰ ۲۲ فروردين ۹۴ ، ۱۸:۱۲
مدیرکل

بزن تا کادر فرمان باز بشه.
Add UV Sphere رو بنویس یا بعضی حروفشو بنویسی خودش لیست می کنه و enter کن تا یک کره(Sphere) ایجاد بشه.
(روش دیگه shift+A و انتخاب mesh->sphere)

حالا با راست کلیک انتخابش کن و برو به Edit mode (با Tab یا از اون پایین به جای object mode باید edit mode رو انتخاب کنی)

حالا برو به UV editing(بالا کادر کنار منوی help) و یک عکس چشم باز کن.

حالا در سمت راست 1 و سپس 5 رو بزن تا به نمای روبرو و ارتوگرافیک(دو بعدی بره) و سپس Space بزن و Project From View رو بنویس و Enter کن تا آنرپ بشه.(البته U هم بزنی می تونی از لیست Project From view رو انتخاب کنی) یعنی انداختن تکستچر روی مدل از نمای جاری روبرو.

بعدش در سمت چپ ماوس رو می بری توی کادر uv editing(اگه صحنه بزرگ بود F بزن تا عکس جا بشه ) و بعدش A می زنی تا تمام رئوس(vertex ها) انتخاب بشه و سپس در همون سمت چپ S بزن و مدل رو Scale کن تا دقیقا اندازه ی تکستچر بشه.

اگه می خوای جابجا کنی G بزن و ماوس رو حرکت بده تا Grab(جابجا بشه) و سپس Enter یا کلیک کن. واسه ذخیره هم مدل رو به obj اکسپورت کن و تکستچر هم با F3 می تونی ذخیره کنی(خودش UV map میشه چون آنرپ کردیم)

http://s4.picofile.com/file/8181953226/eye_model_texture.jpg

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

منبع:gameover.blog.ir

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

منبع : سایت سازنده یونتیی

کد سیشارپ:

using UnityEngine;
using System.Collections;
 
[RequireComponent(typeof(Rigidbody))]
public class Dragable : MonoBehaviour
{
 
	public int normalCollisionCount = 1;
	public float moveLimit = .5f;
	public float collisionMoveFactor = .01f;
	public float addHeightWhenClicked = 0.0f;
	public bool freezeRotationOnDrag = true;
	public Camera cam  ;
	private Rigidbody myRigidbody ;
	private Transform myTransform  ;
	private bool canMove = false;
	private float yPos;
	private bool gravitySetting ;
	private bool freezeRotationSetting ;
	private float sqrMoveLimit ;
	private int collisionCount = 0;
	private Transform camTransform ;
 
	void Start () 
	{
	    myRigidbody = rigidbody;
	    myTransform = transform;
	    if (!cam) 
		{
	        cam = Camera.main;
	    }
	    if (!cam) 
		{
	        Debug.LogError("Can't find camera tagged MainCamera");
	        return;
	    }
	    camTransform = cam.transform;
	    sqrMoveLimit = moveLimit * moveLimit;   // Since we're using sqrMagnitude, which is faster than magnitude
	}
 
	void OnMouseDown () 
	{
	    canMove = true;
	    myTransform.Translate(Vector3.up*addHeightWhenClicked);
	    gravitySetting = myRigidbody.useGravity;
	    freezeRotationSetting = myRigidbody.freezeRotation;
	    myRigidbody.useGravity = false;
	    myRigidbody.freezeRotation = freezeRotationOnDrag;
	    yPos = myTransform.position.y;
	}
 
	void OnMouseUp () 
	{
	    canMove = false;
	    myRigidbody.useGravity = gravitySetting;
	    myRigidbody.freezeRotation = freezeRotationSetting;
	    if (!myRigidbody.useGravity) 
		{
			Vector3 pos = myTransform.position;
	        pos.y = yPos-addHeightWhenClicked;
	        myTransform.position = pos;
	    }
	}
 
	void OnCollisionEnter () 
	{
	    collisionCount++;
	}
 
	void OnCollisionExit () 
	{
	    collisionCount--;
	}
 
	void FixedUpdate () 
	{
	    if (!canMove)
		{
			return;
		}
 
	    myRigidbody.velocity = Vector3.zero;
	    myRigidbody.angularVelocity = Vector3.zero;
 
		Vector3 pos = myTransform.position;
	    pos.y = yPos;
	    myTransform.position = pos;
 
	    Vector3 mousePos = Input.mousePosition;
	    Vector3 move = cam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, camTransform.position.y - myTransform.position.y)) - myTransform.position;
	    move.y = 0.0f;
	    if (collisionCount > normalCollisionCount)		
		{
	        move = move.normalized*collisionMoveFactor;
	    }
	    else if (move.sqrMagnitude > sqrMoveLimit) 
		{
	        move = move.normalized*moveLimit;
	    }
 
	    myRigidbody.MovePosition(myRigidbody.position + move);
	}
}

کد جاوا اسکریپت:


var normalCollisionCount = 1;
var moveLimit = .5;
var collisionMoveFactor = .01;
var addHeightWhenClicked = 0.0;
var freezeRotationOnDrag = true;
var cam : Camera;
private var myRigidbody : Rigidbody;
private var myTransform : Transform;
private var canMove = false;
private var yPos : float;
private var gravitySetting : boolean;
private var freezeRotationSetting : boolean;
private var sqrMoveLimit : float;
private var collisionCount = 0;
private var camTransform : Transform;
 
function Start () {
    myRigidbody = rigidbody;
    myTransform = transform;
    if (!cam) {
        cam = Camera.main;
    }
    if (!cam) {
        Debug.LogError("Can't find camera tagged MainCamera");
        return;
    }
    camTransform = cam.transform;
    sqrMoveLimit = moveLimit * moveLimit;    // Since we're using sqrMagnitude, which is faster than magnitude
}
 
function OnMouseDown () {
    canMove = true;
    myTransform.Translate(Vector3.up*addHeightWhenClicked);
    gravitySetting = myRigidbody.useGravity;
    freezeRotationSetting = myRigidbody.freezeRotation;
    myRigidbody.useGravity = false;
    myRigidbody.freezeRotation = freezeRotationOnDrag;
    yPos = myTransform.position.y;
}
 
function OnMouseUp () {
    canMove = false;
    myRigidbody.useGravity = gravitySetting;
    myRigidbody.freezeRotation = freezeRotationSetting;
    if (!myRigidbody.useGravity) {
        myTransform.position.y = yPos-addHeightWhenClicked;
    }
}
 
function OnCollisionEnter () {
    collisionCount++;
}
 
function OnCollisionExit () {
    collisionCount--;
}
 
function FixedUpdate () {
    if (!canMove) return;
 
    myRigidbody.velocity = Vector3.zero;
    myRigidbody.angularVelocity = Vector3.zero;
    myTransform.position.y = yPos;
    var mousePos = Input.mousePosition;
    var move = cam.ScreenToWorldPoint(Vector3(mousePos.x, mousePos.y, camTransform.position.y - myTransform.position.y)) - myTransform.position;
    move.y = 0.0;
    if (collisionCount > normalCollisionCount) {
        move = move.normalized*collisionMoveFactor;
    }
    else if (move.sqrMagnitude > sqrMoveLimit) {
        move = move.normalized*moveLimit;
    }
 
    myRigidbody.MovePosition(myRigidbody.position + move);
}
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ فروردين ۹۴ ، ۰۳:۴۹
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ فروردين ۹۴ ، ۰۳:۲۲
مدیرکل

function OnCollisionEnter (myCollision Collision) {

     if(
myCollision.gameObject.name == "Platform"){
      if(!
myCollision.gameObject.rigidbody){
       
myCollision.gameObject.AddComponent(Rigidbody);
      }
     }
    }
۰ نظر موافقین ۰ مخالفین ۰ ۲۲ فروردين ۹۴ ، ۰۰:۲۱
مدیرکل


switch show_menu('text1|text2|text3','')
{
case 
1: break;//doe iets bij text1
case 2: break;//doe iets bij text2
case 3: break;//doe iets bij text3
default:
}

منبع : http://www.game-maker.nl/forums/topic,61897.0

اما در حین اجرا باید اسپرایت های اشیای دیگه رو توی رویداد draw با کد زیر رسم کنید ویلا ابتدا صفحه سیاه میشه بعدش باید انتخاب کنید تا صحنه بیاد:

draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,image_alpha)

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

http://s4.picofile.com/file/8181699500/Bomb_and_People.gm81.html

برای ابجکت obj_people طبق عکس زیر تنظیم رو انجام بده(یعنی وقتی کد میدی تو بالا به جای self و other گزینه object رو بزن و object5 رو برای عملیات انتخاب کن(این ابجکت همون شاخه ای هست که می خوایم چک کنیم بمب روش افتاده یا نزدیکش اومده یا نه اگه اومده بعدش فاصله ی آدمک رو تا بمب چک می کنیم و نابودی)

http://s6.picofile.com/file/8181699242/obj_people_Step.jpg

با کلید R بازی ریست میشه.

۰ نظر موافقین ۰ مخالفین ۰ ۲۱ فروردين ۹۴ ، ۰۴:۰۴
مدیرکل
رویداد right_keyboard :
//-hol dadan be rast--// Push Right
if ( place_meeting(x,y,target_obj) && (x < target_obj.x - 5)  )
{
target_obj.x+=speed;
}

رویداد left_keyboard :
//-hol dadan be chap--// push Left
if (  place_meeting(x,y,target_obj) && (x > target_obj.x + 5)  )
{
target_obj.x-=speed;
}

برای پرت شدن بمب همکافیه زیر آبجکت رو چک کنی که اگه خالی بود یا در y+1 شی ای وجود نداشت(با place_empty یا place_meeting یا توابع collision یا ...) جاذبه بدید بهش و اگه برخورد داشت جاذبه یا gravity رو صفر کنید.
--
برای انفجار هم می تونید به اندازه ی sprite_width فاصله ی اطراف بمب رو چک کنید(بعد از برخورد با زمین if y==y1 و انفجار پارتیکل دود یا انفجار و destroy شدن) ، اگه distance_to_object از حد دلخواه کمتر بود اشیایی که در posision_meeting بود رو instance_destroy و نابود کنید و یه پارتیکل انفجار یا چه میدونم دود یا چیزی هم بذارید و بعد از پایان پارتیکل ، پارتیکل رو هم حذف کنید.



۰ نظر موافقین ۰ مخالفین ۰ ۲۰ فروردين ۹۴ ، ۱۳:۲۰
مدیرکل
آموزش ایجاد فایل ini در php :


<?php
//@URL http://stackoverflow.com/questions/1268378/create-ini-file-write-values-in-php?answertab=votes#answer-1268642
function write_ini_file($assoc_arr, $path, $has_sections = FALSE)
{
$content = "";
if ($has_sections) {
foreach ($assoc_arr as $key => $elem) {
$content .= "[" . $key . "]\n";
foreach ($elem as $key2 => $elem2) {
if (is_array($elem2)) {
for ($i = 0; $i < count($elem2); $i++) {
$content .= $key2 . "[] = \"" . $elem2[$i] . "\"\n";
}
} else if ($elem2 == "") $content .= $key2 . " = \n";
else $content .= $key2 . " = \"" . $elem2 . "\"\n";
}
}
} else {
foreach ($assoc_arr as $key => $elem) {
if (is_array($elem)) {
for ($i = 0; $i < count($elem); $i++) {
$content .= $key . "[] = \"" . $elem[$i] . "\"\n";
}
} else if ($elem == "") $content .= $key . " = \n";
else $content .= $key . " = \"" . $elem . "\"\n";
}
}
if (!$handle = fopen($path, 'w')) {
return false;
}
$success = fwrite($handle, $content);
fclose($handle);
return $success;
}
// write your array now in a .ini file
$sampleData = array(
'first' => array(
'first-1' => 1,
'first-2' => 2,
'first-3' => 3,
'first-4' => 4,
'first-5' => 5,
),
'second' => array(
'second-1' => 1,
'second-2' => 2,
'second-3' => 3,
'second-4' => 4,
'second-5' => 5,
));
write_ini_file($sampleData, './data.ini', true);


خواند فایل ini در php :
آموزش رو با مثال دنبال کنید :
در مسیر C:\xampp\htdocs\ini فایلی به اسم sample.ini با محتوای زیر ایجاد کن :

[Cars]
var1 = 1
var2 = 2

حالا فایلی به نام index.php با محتوای زیر ایجاد کن :


<?php
// Parse without sections
$ini_array parse_ini_file("sample.ini");
print_r($ini_array);

// Parse with sections
$ini_array parse_ini_file("sample.ini"true);
print_r($ini_array);

?>


حالا با مرورگر fireFox اینو اجرا بگیر :
http://localhost/ini/
خودش index.php رو اجرا می کنه و خروجی میشه چیزی شبیه این :

Array ( [var1] => 1 [var2] => 2 ) Array ( [Cars] => Array ( [var1] => 1 [var2] => 2 ) )

منبع :

اگه خونه ی اول آرایه رو هم بخوای تکی بدست بیاری :
echo($ini_array["var1"]);

خروجی: 1


-------
اطلاعات بیشتر بر گرفته از پرومیکرز:

تجزیه یک فایل ini



parse_ini_file

parse_ini_file — تجزیه یک فایل ini

شرح
کد PHP:
array parse_ini_file string $filename [, bool $process_sections false [, int $scanner_mode INI_SCANNER_NORMAL ]] ) 
این تابع همه ی اطلاعات یک فایل ini را به صورت یک آرایه ی بر می گرداند .

پارامتر ها
filename
فایل ini ای که می خواهید آنرا تجزیه و تحلیل کنید .
process_sections
اگر مقدار این پارامتر را برابر true قرار دهید یک آرایه ی چند بعدی بر می گرداند با نام section ها ( بخش هایی که در [] هستند ) و setting ( داده ها ) مقدار این پارامتر به صورت پیش فرض برابر false است .

scanner_mode
دو مقدار INI_SCANNER_NORMAL و INI_SCANNER_RAW را می تواند داشته باشد .
INI_SCANNER_NORMAL مقدار پیش فرض است

اگر INI_SCANNER_RAW انتخاب شود مقدار ها( ارزش های متغیر ها ) تجزیه نخواهند شد .

برگرداندن مقدار ها
یک آرایه ی چند بعدی را در صورت موفقیت بر می گرداند اگر موفق نباشد مقدار false بر گردانده می شود .


یک مثال

فایل زیر را با نام sample.ini در نظر بگیرید :

; This is a sample configuration file
; Comments start with ';', as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"

[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"
در فایل php زیر می خواهیم فایل را تجزیه کنیم:

<?php

define
('BIRD''Dodo bird');

// Parse without sections
$ini_array parse_ini_file("sample.ini");
print_r($ini_array);

// Parse with sections
$ini_array parse_ini_file("sample.ini"true);
print_r($ini_array);

?>


*** define تا اونجایی که من می دونم یک ثابت ایجاد می کنه الان ما یک ثابت ایجاد کردیم با اسم BIRD و مقدارش رو برابر Dodo bird قرار دادیم
ثابت ها بر خلاف متغیر های برای فراخونیشون نیاز به $ نیست و فقط اسمش رو بنویسیم فراخوانی می شن
برای مثال
echo BIRD;

خروجی این کد چیزی شبیه به این میشه:

Array
(
    [one] => 1
    [five] => 5
    [animal] => Dodo bird
    [path] => /usr/local/bin
    [URL] => http://www.example.com/~username
    [phpversion] => Array
        (
            [0] => 5.0
            [1] => 5.1
            [2] => 5.2
            [3] => 5.3
        )

)
Array
(
    [first_section] => Array
        (
            [one] => 1
            [five] => 5
            [animal] => Dodo bird
        )

    [second_section] => Array
        (
            [path] => /usr/local/bin
            [URL] => http://www.example.com/~username
        )

    [third_section] => Array
        (
            [phpversion] => Array
                (
                    [0] => 5.0
                    [1] => 5.1
                    [2] => 5.2
                    [3] => 5.3
                )

        )

)

***همونطوری که می بینید مقدار BIRD به جای Dodo bird هست

منبع اصلی :
http://php.net/manual/en/function.parse-ini-file.php

http://www.promakers.ir/showthread.php?tid=8956&pid=98665#pid98665
۰ نظر موافقین ۰ مخالفین ۰ ۱۷ فروردين ۹۴ ، ۱۱:۲۶
مدیرکل


برای تشخیص شیب از Raycasting() استفاده می شه.
اگه میخوای شیب زمین رو تشخیص بدی پیشنهاد میشه از Colider.Raycast() به جای Physics.Raycast() استفاده کنی.
کد نمونه(js) :

نمی دونم تا چه حد کمکت می کنه ولی یه متنی رو برات ترجمه کردم امیدوارم از هیچی بهتر باشه.
برای تشخیص شیب از Raycasting() استفاده می شه.
اگه میخوای شیب زمین رو تشخیص بدی پیشنهاد میشه از Colider.Raycast() به جای Physics.Raycast() استفاده کنی.
کد نمونه(js) :


var hit RaycastHit;
var 
ray = new Ray(transform.positionVector3.down);
if (
someCollider.Raycast(rayhit)) {
var 
slope hit.normal;
//Adjust character based on normal

کد بالا یک سطح نرمال رو نسبت به شیب ،پس می ده . مثل عکس زیر
http://s6.picofile.com/file/8180183634/surface_normal.jpg

اسکریپت های زیادی برای تنظیم جهت چرخش ابجکت در راستای یک سطح نرمال وجود داره.
مثال:

var someCollider Collider;
var 
hit RaycastHit;
var 
ray = new Ray(transform.positionVector3.down);
if (
someCollider.Raycast(rayhit1000)) {
transform.rotation Quaternion.FromToRotation(transform.uphit.normal) * transform.rotation;

اسکریپت رو بداز روی player.
همچنین در inspector، زمین(terrain) شیب دار خودتو با ماوس Drag کن(بگیر) و بنداز روی متغیر someCollider در کادر خصوصیات inspector.
به player هم می تونی چند تا کالیدر بدی مثل برخورد کننده ی کپسولی(capsule collider).
برای جلوگیری از فرو رفتن ابجکت هم می تونی چرخش در جهت بردار انتخابی رو freeze کنی و یا اینکه می تونی مقدار پارامتر Drag در کامپوننت rigidbody رو که به ابجکتت دادی زیاد کنی.
منبع :
http://answers.unity3d.com/questions/509...ction.html


------------------------

حرکت یک گیم آبجکت روی سطح شیب دار :

http://s4.picofile.com/file/8180221934/gif_walker_perimeter.gif

منبع: http://www.asteroidbase.com/devlog/7-lea...w-to-walk/
مترجم : sajjad3011

یک روش آن است که از raycast برای چک کردن collider زیر player (یا شی در حال حرکت روی سطح شیب دار که در اصطلاح به آن Walker هم می گوییم) استفاده کنیم.اما Walker در حین حرکت به اطراف و با توجه به تغییرات باید مثل سنجاب نگاه کند.(منظورش زاویه چرخش هست).در عوض ما دو اشعه(ray) را پرتاب می کنیم.هر کدام برای یک طرف Walker:

bool doubleRaycastDown(TerrainMovementRayProperties movementRay, float rayLength,
        out RaycastHit leftHitInfo, out RaycastHit rightHitInfo)
{
    Vector3 transformUp = transform.up;
    Vector3 transformRight = transform.right;
    Ray leftRay = new Ray(transform.position + movementRay.originOffsetY * transformUp
        + movementRay.distanceFromCenter * transformRight, -transformUp);
    Ray rightRay = new Ray(transform.position + movementRay.originOffsetY * transformUp
        – movementRay.distanceFromCenter * transformRight, -transformUp);

    return Physics.Raycast(leftRay, out leftHitInfo, rayLength, DefaultTerrainLayerMask)
        && Physics.Raycast(rightRay, out rightHitInfo, rayLength, DefaultTerrainLayerMask);
}

اگر هر دو ray به یک کالیدر با لایه ی مناسب برخورد کرد،ما میانگین position و بردارهای normal نتیجه شده ی ابجکت های RaycastHit را بکار برده و از آنها به ترتیب برای تنظیم و موقعیت دهی Walker استفاده خواهیم کرد.این کار آسان است:

void positionOnTerrain(RaycastHit leftHitInfo, RaycastHit rightHitInfo,
        float maxRotationDegrees, float positionOffsetY)
{
    Vector3 averageNormal = (leftHitInfo.normal + rightHitInfo.normal) / 2;
    Vector3 averagePoint = (leftHitInfo.point + rightHitInfo.point) / 2;

    Quaternion targetRotation = Quaternion.FromToRotation(Vector3.up, averageNormal);
    Quaternion finalRotation = Quaternion.RotateTowards(transform.rotation, targetRotation,
        maxRotationDegrees);
    transform.rotation = Quaternion.Euler(0, 0, finalRotation.eulerAngles.z);

    transform.position = averagePoint + transform.up * positionOffsetY;
}

به Walker اجازه دهید تا بچرخد .شاید در هنگام مواجهه با چاله ها و شکاف ها،در هر فریم کمی حرکت تند و عصبی داشته باشد.برای رفع این مشکل کافیست میزان چرخش را با استفاده از Quaternion.RotateTowards محدود نماییم.

در این روش،برای اینکه یک حرکت واقع گرایانه تری داشته باشیم باید کمی بیشتر راه رویم.همچنین Walker تمایل به گیر کردن در انواع خاصی از چاله ها و گودی ها دارد.برای غلبه بر این مشکل ما یک اشعه ی افقی کوتاه را در جهت حرکت،اضافه کردیم که تا حد لبه ی بدن کاراکتر بسط می یابد.اگر این ray با هر قطعه از زمین برخورد(collide) کند،اشعه ی رو به پایین(downward ray)آن سمت از Walker را باطل می کند.

if(rigidbody.velocity.sqrMagnitude > 0)
{
    //if moving left
    if(MathUtilities.VectorSimilarity(rigidbody.velocity, selfTransform.right) > 0)
    {
        RaycastHit overrideLeftHitInfo;
        Ray overrideLeftRay = new Ray(transform.position
            + horizontalRayProperties.originOffsetY * selfTransform.up, selfTransform.right);
        if(Physics.Raycast(overrideLeftRay, out overrideLeftHitInfo,
            horizontalRayProperties.attachedRayLength, DefaultTerrainLayerMask))
        {
            leftHitInfo = overrideLeftHitInfo;
        }
    }
    //if moving right
    else
    {
        RaycastHit overrideRightHitInfo;
        Ray overrideRightRay = new Ray(transform.position
            + horizontalRayProperties.originOffsetY * selfTransform.up, -selfTransform.right);
        if(Physics.Raycast(overrideRightRay, out overrideRightHitInfo,
            horizontalRayProperties.attachedRayLength, DefaultTerrainLayerMask))
        {
            rightHitInfo = overrideRightHitInfo;
        }
    }
}


در شکل زیر نحوه ی علکرد این سیستم را می بینید.

خطوط زرد و قرمز اشعه های پرتابی از طرف Walker را نشان می دهند.

خطوط بنفش و سبز،نرمال های تولید شده از ray های برخوردی با زمین را نشان می دهند.

خط آبی فیروزه ای ،میانگین آن نرمال ها،از نقطه ی وسط Walker در برخورد با زمین است.

اشعه ی باطل کردن افقی(horizontal override ray) در شکل نشان داده نشده.

دشمن کهکشانی در حال حرکت رو ترکیبی از collider ها مثل sphere collider و capsule collider می باشد اما این سیستم مثل همان mesh collider به خوبی کار می کند.

http://s4.picofile.com/file/8180219642/gif_walker_rays.gif

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

منبع :

http://www.joomprod.com/forum/search?q=pathway&childforums=1







public_html/components/com_adsmanager/views/list/tmpl/default.php

<?php 
/*
if ($conf->display_inner_pathway == 1) { ?>
	<div class="adsmanager_pathway">
	<?php 
		$pathway ="";
		$nb = count($this->pathlist);
		for ($i = $nb - 1 ; $i >0;$i--)
		{
			$pathway .= '<a href="'.$this->pathlist[$i]->link.'">'.$this->pathlist[$i]->text.'</a>';
			$pathway .= ' <img src="'.$this->baseurl.'components/com_adsmanager/images/arrow.png" alt="arrow" /> ';
		}
		if (isset($this->pathlist[0]))
			$pathway .= '<a href="'.$this->pathlist[0]->link.'">'.$this->pathlist[0]->text.'</a>';
	echo $pathway;
	*/
	?>
۰ نظر موافقین ۰ مخالفین ۰ ۱۰ فروردين ۹۴ ، ۲۰:۰۶
مدیرکل
۰ نظر موافقین ۰ مخالفین ۰ ۰۹ فروردين ۹۴ ، ۱۲:۵۳
مدیرکل

http://s5.picofile.com/file/8146304076/anime_studio_animate_fanar.jpg

چون احساس کردم خیلیا نیاز دارن از سردرگمی در بیان،توی این اموزش یاد می دم چطوری استخون بذارید و یک عکس png از فنر رو ببرید توی anime studio و اینیمیشن کنید و توی 12 فریم به صورت PNG اسپورت بگیرید واسه ساخت sprite :

http://s5.picofile.com/file/8146305934/fanar_tut_animestudio_sajjad3011.zip.html

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